使用的gc策略是UseConcMarkSweepGC,老年代空间使用达到86%以上了还未执行full gc,按理应该是默认是68%就会执行full gc吧?
------解决思路----------------------
UseConcMarkSweepGC这个只是设置多线程处理年老代GC操作。能够减少GC的停顿时间,这个参数跟内存占用比数无关。有扯上一点关系的是CMS时,出现内存不足等问题时会触发full gc。full gc的触发主要跟各个区的可用空间大小有关,如年老代的剩余空间不足(直接转移发现、统计可用转移发现)、永生代空间不足、CMS GC出现promotion failed和concurrent mode failure等等。关于GC的内容,建议楼主可以网上多了解下相关内容。
------解决思路----------------------
68%触发的不是full GC而是老年代的GC,你指定CMS的GC方式会在old区达到68%时发生。这时GC和应用程序会并行执行,也就是说,此时既有内存被释放,又有内存往里增加。合理的情况是释放的速度快于增加的速度。如果增加的速度大于释放的速度,old区会被填满,这时会触发full GC。应用程序停止运行,专心做GC的事。另外测试最好在服务器做,40g以上的内存比较容易看出变化。