測驗環境用的openjdk1.8.0_212
啟動java行程后默認用了UseParallelGC和UseAdaptiveSizePolicy
-XX:+PrintTenuringDistribution -XX:NativeMemoryTracking=summary
SurvivorRatio=8
-XX:MinHeapFreeRatio=40
-XX:MaxHeapFreeRatio=70
-Xmx3092m -Xms972m
通過觀察,這個SurvivorRatio引數沒有起作用,每次gc后都會自動調整edan和survivor的比值,導致survivor被調整的很小,又導致很多物件在回收一次以后直接進入老年代。java堆在每次gc之后都會增長一點,慢慢就超過總記憶體80%,系統會產生告警。
我把動態調整edan survivor引數禁用后-XX:-UseAdaptiveSizePolicy,又會出現gc以后堆大小不會自動擴容問題,堆大小一直在xms的大小,沒有自動擴容。
如何使SurvivorRatio生效又能保證堆在需要時自動擴容呢?
uj5u.com熱心網友回復:
使用CMS垃圾回收器 或者參考這位大佬的翻譯,里邊關于JVM調優講的很詳細https://blog.csdn.net/zhoutao198712/article/details/7783038uj5u.com熱心網友回復:
在 oracle jdk 8中MinHeapFreeRatio和MaxHeapFreeRatio在使用UseParallelGC時沒有效果的,為了達到你現在想要的效果,你可以嘗試切換成其它垃圾收集器,比如CMS,-XX:+UseConcMarkSweepGC,會自動開啟-XX:+UseParNewGC,新生代使用ParNew,老年代使用CMS,并且UseAdaptiveSizePolicy也不會再使用,其它引數可以不變,然后你再看下記憶體狀態uj5u.com熱心網友回復:
謝謝,我試試
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284318.html
標籤:Java EE
