java full gc为何还没触发full gc

young-ming 2015-09-06 04:21:18
使用的gc策略是UseConcMarkSweepGC,老年代空间使用达到86%以上了还未执行full gc,按理应该是默认是68%就会执行full gc吧?
...全文
458 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
玮G 2015-09-18
  • 打赏
  • 举报
回复
68%触发的不是full GC而是老年代的GC,你指定CMS的GC方式会在old区达到68%时发生。这时GC和应用程序会并行执行,也就是说,此时既有内存被释放,又有内存往里增加。合理的情况是释放的速度快于增加的速度。如果增加的速度大于释放的速度,old区会被填满,这时会触发full GC。应用程序停止运行,专心做GC的事。另外测试最好在服务器做,40g以上的内存比较容易看出变化。
young-ming 2015-09-07
  • 打赏
  • 举报
回复
还是在没有指定UseCMSInitiatingOccupancyOnly的情况下,CMSInitiatingOccupancyFraction设的值只是对第一次的full gc有效? “ -XX:+UseCMSInitiatingOccupancyOnly指定HotSpot VM总是使用-XX:CMSInitiatingOccupancyFraction的值作为old的空间使用率限制来启动CMS垃圾回收。如果没有使用-XX:+UseCMSInitiatingOccupancyOnly,那么HotSpot VM只是利用这个值来启动第一次CMS垃圾回收,后面都是使用HotSpot VM自动计算出来”
young-ming 2015-09-07
  • 打赏
  • 举报
回复
我想问的是什么时候会执行full gc,CMSInitiatingOccupancyFraction默认是68%,年老代使用空间68%即执行full gc
zhuangqingch 2015-09-06
  • 打赏
  • 举报
回复
UseConcMarkSweepGC这个只是设置多线程处理年老代GC操作。能够减少GC的停顿时间,这个参数跟内存占用比数无关。有扯上一点关系的是CMS时,出现内存不足等问题时会触发full gc。full gc的触发主要跟各个区的可用空间大小有关,如年老代的剩余空间不足(直接转移发现、统计可用转移发现)、永生代空间不足、CMS GC出现promotion failed和concurrent mode failure等等。关于GC的内容,建议楼主可以网上多了解下相关内容。
普凡 2015-09-06
  • 打赏
  • 举报
回复
怎么监控的。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧