JVM Heap認知

一、JVM Heap分爲三部分:新生代、老年代、永久代;


新生代:用於存放JVM新分配的java對象;

老年代:新生代中經過垃圾回收沒有回收掉的對象將被copy到老年代;

永久代:存放Class、Method元信息,也就是反射對象,一般設置爲128M足夠,設置原則是預留30%空間。


二、GC的引發:


1、新生代擁有2個線程;

(1)當新生代的Eden代滿了引發普通GC,僅僅回收新生代;

(2)新生代空間不足時,會把存活的對象轉移到老生代。

2、老年代:當老年代滿時引發Full GC,它將會同時回收新生代、老年代。

3、永生代:當永生代滿時引發Full GC, 它將會把Class 、Method元信息卸載。


三、何原因導致OutOfMemoryException


1、JVM98%代時間都在內存回收;

2、每次回收的內存小於2%。

滿足這兩個原因纔會處發。


四、性能優化

希望達成的目標:

1、GC的時間足夠的小;

2、GC的次數足夠的少;

3、發生Full GC的週期足夠的長。


需要做的事情:

1、建少使用全局變量和大對象;

2、調整新生代的大小到最合適;

3、設置老年代的大小爲最合適;

4、選擇合適的GC收集器。


優化方面:

1、線程池:解決用戶響應時間長的問題;

2、鏈接池;

3、JVM啓動參數:調整各代的內存比例和垃圾回收算法,提供吞吐量;

4、程序算法:改進程序邏輯算法提高性能。


五、JVM監控

java自帶的監控工具比較多,下面僅使用了2種:

1、jstat -gcutil [java PID] 1000(間隔毫秒數) 5(打印的條數);例子:jstat -gcutil 25 1000 5

wKiom1bNYNuCDArFAAAas-0ljnE346.png

2、jmap -heap 25

wKiom1bNYPDChyMTAAB73ssUYZg097.png






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章