如何解决与GC相关的问题
一般来讲,具体问题具体分析,见招拆招,遇河架桥。要相信问题总没办法多。
新生代提升过快问题:
(1)如果频率太快的话,说明空间不足,首先可以尝试调大新生代空间和晋升阈值。
(2)如果内存有限,可以
设置 CMS 垃圾收集在老年代占比达到多少时启动来减少问题发生频率(越早启动问题发生频率越低,但是会降低
吞吐量,具体得多调整几次找到平衡点),参数如下:如果没有第二个参数,会随着 JVM 动态调节 CMS 启动时间
-XX:CMSInitiatingOccupancyFraction=68 (默认是 68)
-XX:+UseCMSInitiatingOccupancyOnly
老年代碎片严重问题:
(1)如果频率太快或者 Full GC 后空间释放不多的话,说明空间不足,首先可以尝试调大
老年代空间。
(2)如果内存不足,可以设置进行 n 次 CMS 后进行一次压缩式 Full GC,参数如下:
-XX:+UseCMSCompactAtFullCollection:允许在 Full GC 时,启用压缩式 GC
-XX:CMSFullGCBeforeCompaction=n 在进行 n 次,CMS 后,进行一次压缩的 Full GC,用以减少 CMS 产生的碎片。