请教关于minor gc问题

各位大佬,有没有谁知道:   minor gc如果运行很频繁,可能是什么原因引起的?minor gc如果运行很慢,可能是什么原因引起的?(百度没找到。。。)
我谁这样想的(不知道对不对,或者完不完整),minor gc是回收年轻代空间的,频繁是因为程序一直在产生新的对象。慢是因为年轻代中的对象都是存活对象,要复制到存活区。(或者存活区太小需要将存活区复制到老年代?)

新的风暴已经出现,是时候有个大佬站出来科普了。
全部评论
minor gc很频繁有可能是,新生代空间分配太小,分配的对象一会儿就占满了:增大新生代,或者调整提前担保进入老生代的threshold值;钉子户比较多的话,降低晋升老生代的threshold; minor gc很慢可能是,新生代分配空间太大,扫描存活对象时间太长; minor gc这边性能需求大的话,解决办法都可能增大full gc次数的产生,内存就那么大,此消彼长,个人感觉。
2 回复 分享
发布于 2019-04-07 16:14
首先要分析一下minor gc触发的时机,新生代一般分为eden,from space,to space区域,采用的是复制算法,新生的对象一般在eden区域中,当eden区域装不下的时候就会触发minor gc,所以minor gc触发很频繁,可能是程序一直在产生新的对象,这个没错,慢不一定是年轻代中都是存活的对象,因为经过研究,大部分的对象都是朝生夕死,大概占百分之90多,所以新生代才会按照一定的比例划分,然后采用复制算法,慢可能是因为eden区中有较大的对象,复制起来比较消耗时间,也有可能是幸存区的空间不够了,然后触发了分配担保机制,将一些对象复制到老年代中去。
点赞 回复 分享
发布于 2019-04-07 16:09

相关推荐

10-02 19:14
门头沟学院 Java
投递平安产险科技中心等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务