JVM調優之新生代的gc回收經驗


首先:
       默認:
               Eden區:From Space區:To Space區=8x:x:x = 10x = 新生代

1、如果是臨時變量多的接口,Eden一般占用可能也多,但是回收也快

      1.1、如果From Survivor空間和To Survivor空間不夠用,常駐對象就會進入到老年代,這個時候如果Eden區夠用,可以適當調大From Survivor空間和To Survivor空間的大小;如果Eden區也占用多,可以適當調大年輕代的內存占用大小;

      1.2、如果Survivor空間小了,對象又多,且沒被回收,空間又不夠,那么久晉升老年代,這種堆的老年代會呈現持續增長的趨態;此時調大Survivor空間大小,還在使用的臨時對象會移動到To Survivor空間,下一次GC就可以回收掉上次使用,但現在不使用的對象;

      1.3、對於新生代控制比較好,gc能完全回收的,老年代占用一般比較少且空間穩定;

      1.4、對於虛擬機來說,復制對象的成本要遠高於掃描成本,所以,單次Minor GC時間更多取決於GC后存活對象的數量,而非Eden區的大小。因此如果堆中短期對象很多,那么擴容新生代,單次Minor GC時間不會顯著增加。

 

2、如果代碼使用了JVM內存緩存,這種一般對象會常駐內存,不太容易被回收掉,很容易對象晉升至老年代,所以老年代的空間要保持夠用;

 

3、調整比例可以先統計看下活躍常駐對象,臨時對象的占比;根據程序穩定情況下的GC日志分析出來

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM