java - 为什么当我增加新时代内存时,Minor GC 时间会增加

标签 java garbage-collection jvm

我之前使用2G new Age内存,我看到minor gc每10秒发生一次,每次需要0.1-0.15秒,我想减少minor gc频率,所以我将new Age内存设置为3G。之后,minor gc 每 15 秒发生一次,但大约需要 0.3 秒才能完成。为什么当我增加新时代内存时,Minor GC 时间会增加?我注意到增加内存后,GC后的 Activity 对象从55M增加到80M,是什么原因?

最佳答案

原因是,较大的内存区域中有更多的 Activity 对象。 GC 时间主要与必须复制到幸存者区域的 Activity 对象的数量(和总体大小)成比例。

只有当您创建许多同时存在且不完全适合 YG 的对象时,您才能从更大的年轻一代区域中获利。这迫使他们被纳入老一代。

否则,总 GC 时间保持不变,您只需选择如何将其拆分为单独的 stop-the-world 事件:更长且频率更低,或者更短且频率更高。

关于java - 为什么当我增加新时代内存时,Minor GC 时间会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40373999/

相关文章:

java - 从服务启动应用程序

java - 将数组元素设置为 String 对象时,元素是否引用该对象?

java - 当方法之间的差异是参数子类型时,将 null 传递给重写的方法

java - Heroku JVM 内存配额超出,但数字不相加

java - 为什么 Eclipse 不会在我的源代码的某些部分自动建议方法(内容辅助)?

java - 使用 BIRT 导出报告

Clojure eval 导致垃圾收集器挂起

ubuntu - Solr JVM 内存和 MMapDirectory

尝试将 Siena 与 Play Framework 一起使用时出现 java.lang.AbstractMethodError

java - 是否指向列表中的某些元素,限制列表被GC?