首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 核心知識點總結:JVM 分代回收、參數調優、集合線程安全與 HashMap 排序實戰

     編輯:Java 綜合教學

Java 核心知識點總結:JVM 分代回收、參數調優、集合線程安全與 HashMap 排序實戰

本文持續更新,匯總 Java 進階開發必備的核心知識點,涵蓋 JVM 內存模型、參數配置、集合框架線程安全特性及實戰編碼技巧。

一、基於分代的垃圾收集算法

設計思想:按對象存活時間分代管理——新創建對象分配於新生代,經多次 GC 仍存活則晉升至老年代。老年代 GC 頻率較低,顯著減少全堆掃描開銷,提升回收效率。

堆內存劃分:

  • Young 區:包含 Eden 區與兩個 Survivor 區(From/To)。新對象優先分配在 Eden,Eden 滿觸發 Minor GC,存活對象複製至一個 Survivor 區,另一個保持為空。
  • Old 區:存放多次 Minor GC 後仍存活的對象。大對象直接進老年代,老年代滿觸發 Full GC 回收整個堆。
  • Perm 區(JDK 8 後為 Metaspace):存放類 Class 對象,由 Full GC 觸發回收。

JVM 內存模型圖

二、JVM 參數配置實例

JVM 參數配置示例1 JVM 參數配置示例2

關鍵參數解析:

  • -Xms10240m:初始堆內存 10GB
  • -Xmn5120m:新生代 5GB
  • -XX:SurvivorRatio=3:Eden : From : To = 3:1:1,Survivor 總計 2048MB

參考資源:JVM 參數詳解、GC 調優實戰

三、集合框架線程安全性對照表

集合線程安全性對照

非線程安全線程安全對應類備註
HashMapHashtable / ConcurrentHashMap推薦 ConcurrentHashMap
ArrayListVector / Collections.synchronizedListVector 為早期實現
StringBuilderStringBufferStringBuffer 方法同步
—Properties繼承 Hashtable,天然線程安全

四、Collection 與 Map 接口體系圖譜

Collection 體系圖 Map 體系圖

五、HashMap 按 Key/Value 排序實戰代碼

public class SortMap {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("1d", 4);
        map.put("2b", 3);
        map.put("3a", 1);
        map.put("4c", 2);

        System.out.println("原始數據:");
        map.forEach((k, v) -> System.out.println(k + ":" + v));

        // 轉 List 排序
        List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());

        // 按 Key 排序
        Collections.sort(list, Comparator.comparing(Map.Entry::getKey));
        System.out.println("按 Key 排序:");
        list.forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));

        // 按 Value 排序
        Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
        System.out.println("按 Value 排序:");
        list.forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
    }
}

核心思路:將 entrySet 轉為 List,利用 Collections.sort + Comparator 實現多維度排序。Java 8+ 可用 Lambda 表達式進一步簡化代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved