java - ParallelOldGC 垃圾收集器中旧空间的阈值

标签 java garbage-collection jvm-hotspot

我在我的应用程序中使用 ParallelOldGC 作为垃圾收集器。最大堆大小设置为 2 GB 并且正在处理 Java 热点 6、27 更新。

由于旧空间已满,我的应用程序创建了如此多的长生命周期对象。因此,根据并行 GC 算法,当旧空间快满时会触发 Full GC。由于堆大小为 2 GB,因此清理旧空间收集器需要超过 100 秒,这是 Not Acceptable 。

我正在考虑为旧空间设置阈值,比如 30,这样当旧空间完成 30% 时,将调用 Full GC,因为此解决方案会增加 FullGC 计数,但会减少应用程序暂停时间。

我观察到 CMS 包含这样的设施 XX:CMSInitiatingOccupancyFraction 但由于 CMS 的一些缺点无法切换到 CMS。那么在 ParallelOldGC 中是否有任何设施可以设置

提前致谢。

最佳答案

As the heap size is 2 GB so to clean the old space the collector take more than 100 seconds which is not acceptable.

由于您实际要解决的是较长的停顿时间,您可以通过 -XX:MaxGCPauseMillis= 设置停顿时间目标,收集器将尝试满足那个。

它可能由于各种原因而无法满足它,例如因为不允许在收集时消耗足够的 CPU 时间(通过 GCTimeRatio),或者仅仅是因为您有太多旧的 Activity 对象以至于无法满足目标(在这些情况下使用 G1 或 CMS)。

关于java - ParallelOldGC 垃圾收集器中旧空间的阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23911521/

相关文章:

java - 64 位 OpenJDK 7/8 中并发长写入的值完整性保证

java - 为什么在 -server 模式下运行的 Java 说版本是 "mixed-mode"?

c++ - 原始变量是否在 C++ 中被垃圾收集

Java - 应用程序中使用的 HashMap 和 WeakHashMap 引用

Node.js:如何从内存中释放 Mongoose 模型? (内存泄漏)

java - JSP`S session 启动和应用程序启动事件函数

尽管 (Max)MetaspaceSize,Java 8 仍为 Metaspace 保留至少 1G

java - 有没有办法让 JTextField 在用户输入无效时稍微晃动一下?

java - 使用 Android Studio 生成的 APK 未安装在某些设备上

java - 如何使 JSP 函数仅在调用时运行?