当前位置: 代码迷 >> J2SE >> java full gc为啥还没触发full gc
  详细解决方案

java full gc为啥还没触发full gc

热度:693   发布时间:2016-04-23 19:39:30.0
java full gc为何还没触发full gc
使用的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以上的内存比较容易看出变化。
  相关解决方案