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

Java GC 工作原理詳解:新生代與老年代回收機制對比

     編輯:Java 綜合教學

Java GC 工作原理詳解

JVM 內存結構

JVM 內存結構

  • 堆:所有 new 對象分配地,可用 -Xmx/-Xms 控制。劃分為新生代(Eden + From/To Survivor)與老年代。
    堆分代
  • 棧:線程私有,每方法調用創建棧幀,存局部變量、操作棧。
  • 本地方法棧:支援 Native 方法。
  • 方法區:存類信息、靜態變量、常量。用永久代實現,-XX:PermSize/MaxPermSize 配置。

新生代 GC(Minor GC)

對象朝生夕死,採用複製算法。Eden 滿觸發 GC,存活對象複製到 Survivor,經歷多次仍存活則進老年代。
空閒指針控制分配,連續分配可觀察對象從 Eden → Survivor → 老年代。
VisualVM 觀察

三種執行機制:

  1. Serial GC:單線程,Client 默認,-XX:+UseSerialGC。
  2. Parallel Scavenge:多線程,Server 默認,關注吞吐量,-XX:+UseParallelGC -XX:ParallelGCThreads=4。
  3. ParNew:多線程,需與 CMS 配合。

老年代 GC(Major/Full GC)

對象存活率高,採用標記算法(標記-清除/標記-整理)。三種收集器:

  1. Serial MSC:單線程 STW。
  2. Parallel MSC:多線程並行。
  3. CMS:並發標記清除,低停頓,四階段(初始標記、並發標記、重新標記、並發清除),不做壓縮以免移動對象導致應用線程找不到引用。

收集器組合對照表

收集器組合

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