Jvm筆記---李興華老師講jvm
Eden區 中文叫 伊甸園區。
年輕代:Eden區+存活區,存活區包括(S0+S1)。
jdk1.8之後取消了永久代,而是變成了元空間(不在堆記憶體裡儲存,而是直接利用實體記憶體儲存)。
伸縮區有這麼大的處理範圍,所以在進行堆記憶體分配的過程時當用戶訪問量增大的時候就一定會導致不斷的判斷空間是否充足,不斷的進行空間的增長,不斷的進行記憶體空間的收縮和釋放。也會影響效率!!
引數說明:
-Xms:設定初始化的記憶體分配大小 預設值(總大小的1/64)
-Xmx:設定最大的可用記憶體空間。(總大小的1/4)
例如:-Xms16g -Xmx16g
設定為一樣大小,可以減少堆記憶體的收縮處理操作。
當堆記憶體的空間很大的情況下,就需要考慮GC的執行效率,所以在這時候就需要考慮兩個技術名詞:BTP、TLAB.
年輕代
---BTP在Eden區採用棧的形式將最晚建立的物件儲存在棧頂。
---TLAB分塊儲存,適合於多執行緒的處理操作上。
-Xmn:設定年輕代的空間大小,預設採用實體記憶體的1/64
-Xss:設定每一個執行緒所佔用的棧的大小。
-X:SurvivorRator設定Eden區與兩個存活區之間的記憶體分配比 8:1:1
老年代
與年輕代比率:-XX:NewRatio
當物件很大的時候,往往不在年輕代進行儲存,而是直接晉級到老年代。利用“-XX:PretenureSizeThreshold”。
GC演算法
主流:G1 未來ZGC
MinorGC
MajorGC(Full GC)
Sytem.gc();
jdk1.7 預設垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.8 預設垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.9 預設垃圾收集器G1
-XX:+PrintCommandLineFlagsjvm引數可檢視預設設定收集器型別
-XX:+PrintGCDetails亦可通過列印的GC日誌的新生代、老年代名稱判斷