java - 升级失败时gc log的含义

标签 java jvm

发生promotion failure时出现以下gc日志是什么意思?

2019-07-24T23:58:32.113+0800: 1731400.358: [ParNew 
(0: promotion failure size = 3)
(1: promotion failure size = 2)  
(2: promotion failure size = 2)
(3: promotion failure size = 2)  
(4: promotion failure size = 3)
(6: promotion failure size = 2)  
(7: promotion failure size = 65538)
(8: promotion failure size = 2)  
(9: promotion failure size = 9)
(0: promotion failure size = 3)  
(1: promotion failure size = 2)
(2: promotion failure size = 2)  
(3: promotion failure size = 2)
(4: promotion failure size = 3)
(6: promotion failure size = 2)
(7: promotion failure size = 65538)
(8: promotion failure size = 2)
(9: promotion failure size = 9)
(0: promotion failure size = 3)
(1: promotion failure size = 2)
(2: promotion failure size = 2)
(3: promotion failure size = 2)
(4: promotion failure size = 3)
(6: promotion failure size = 2)
(7: promotion failure size = 65538)
(8: promotion failure size = 2)
(9: promotion failure size = 9)
(0: promotion failure size = 3)
(1: promotion failure size = 2)
(2: promotion failure size = 2)
(3: promotion failure size = 2)
(4: promotion failure size = 3)
(6: promotion failure size = 2)
(7: promotion failure size = 65538)
(8: promotion failure size = 2)
(9: promotion failure size = 9)
(0: promotion failure size = 3)
(1: promotion failure size = 2)
(2: promotion failure size = 2)
(3: promotion failure size = 2)
(4: promotion failure size = 3)
(6: promotion failure size = 2)
(7: promotion failure size = 65538)
(8: promotion failure size = 2)
(9: promotion failure size = 9)
(0: promotion failure size = 3)
(1: promotion failure size = 2)
(2: promotion failure size = 2)
(3: promotion failure size = 2)
(4: promotion failure size = 3)
(6: promotion failure size = 2)
(7: promotion failure size = 65538)
(8: promotion failure size = 2)
(9: promotion failure size = 9)
(0: promotion failure size = 3) 

我使用parNew + CMS

JDK 1.8_102

最佳答案

提升失败是指垃圾收集在旧代中找不到足够的(连续)空间来将对象从新一代提升到其中时发生。

简单的解决方案是增加老年代堆大小。 This doc对你有帮助。

另一种解决方案,使用带 -XX:+UseG1GC 标志的 GC1 算法。因为在老年代碎片方面,G1 GCCMS更成功。 Oracle doc说:

The G1 GC reduces heap fragmentation by incremental parallel copying of live objects from one or more sets of regions (called Collection Set (CSet)) into different new region(s) to achieve compaction. The goal is to reclaim as much heap space as possible, starting with those regions that contain the most reclaimable space, while attempting to not exceed the pause time goal (garbage first).

关于java - 升级失败时gc log的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57195185/

相关文章:

java - 当两个页面都采用 HTTPS 协议(protocol)时,从一个页面到另一个页面时是否始终发送请求 header "referer"

java - 这个 FileWriter 是如何工作的?

java - ScheduledExecutorService 的不稳定行为

java - 使用 Ant 构建 Android 应用程序时遇到错误

clojure - 为什么 Clojure 而不是其他 JVM Lisps : Kawa, Armed Bear 或 SISC?

Java JDBC 不是重用 String 值吗?

java - 我已为一个类中的数组赋值,但数组在另一个类中显示为 null,为什么? (提供了部分代码)

Java:方法 Hook 和查找对象实例

web-applications - Websphere 类加载

java - 为什么当设置不同的 JVM XMX 时,相同代码的 RES 内存会发生变化