天天看點

JVM堆記憶體劃分和調優

JVM主要包括4個子系統:類加載器,運作時資料區,執行引擎,編譯器。

JDK 1.8以前,分為新生代,老年代和永久代三個區域。1.8之後永久代換成了meta space元空間,主要是存放方法中的操作臨時對象等,JDK1.8之前是占用JVM記憶體,JDK1.8之後直接使用實體記憶體。

其中新生代又分為Eden,S0,S1這三個部分。new出來的對象先配置設定到eden區,經過幾次minor GC還存活的對象就會被放到S0區域,再經過幾次minor GC還存活的對象會放到S1區。最後達到minor GC的門檻值就放到老年代。老年代中就是major GC。Full GC 是Minor GC 加上 MajorGC。一般Full GC都會觸發老年代和新生代的GC回收。

堆記憶體調優的關鍵:

實際上每一塊子記憶體區中都會存在一部分可變伸縮區,如果空間不足,則在可變範圍内擴大記憶體空間。

記憶體空間調整參數:

-Xms:設定初始配置設定大小,預設是實體記憶體的1/64

-Xmx:最大配置設定記憶體,預設是實體記憶體的1/4

-XX:+PrintGCDetails:輸出詳細的GC處理日志

-XX:+PrintGCDateStamps:輸出GC的時間戳資訊

-XX:+PrintHeapAtGC:在GC進行處理的前後列印堆記憶體資訊。

-Xloggc:(SavePath):設定日志資訊儲存檔案 在堆記憶體的調優政策中。

基本隻要調整兩個參數: -Xms -Xmx