Java 如何从g1gc日志计算对象提升率?

Java 如何从g1gc日志计算对象提升率?,java,garbage-collection,g1gc,Java,Garbage Collection,G1gc,我使用下面的公式来计算从并行GC日志提升的字节 promoted_bytes = (('younggen_used_before_gc') - ('younggen_used_after_gc')) - (('heap_used_before_gc') - ('heap_used_after_gc')) 如何从G1GC日志中计算相同的值 上面的公式适用于并行GC日志,但它为下面的G1GC日志事件提供了负值(-147.6) 2019-04-24T13:41:06.982+0000: 59627.

我使用下面的公式来计算从并行GC日志提升的字节

promoted_bytes = (('younggen_used_before_gc') - ('younggen_used_after_gc')) - (('heap_used_before_gc') - ('heap_used_after_gc'))
如何从G1GC日志中计算相同的值

上面的公式适用于并行GC日志,但它为下面的G1GC日志事件提供了负值(-147.6)

2019-04-24T13:41:06.982+0000: 59627.940: [GC pause (G1 Evacuation Pause) (young), 0.1640632 secs]    
   [Parallel Time: 161.0 ms, GC Workers: 2]    
      [GC Worker Start (ms): Min: 59627940.0, Avg: 59627940.0, Max: 59627940.0, Diff: 0.0]    
      [Ext Root Scanning (ms): Min: 56.4, Avg: 57.5, Max: 58.6, Diff: 2.1, Sum: 115.0]    
      [Update RS (ms): Min: 7.1, Avg: 7.2, Max: 7.3, Diff: 0.3, Sum: 14.4]    
         [Processed Buffers: Min: 46, Avg: 58.5, Max: 71, Diff: 25, Sum: 117]    
      [Scan RS (ms): Min: 3.7, Avg: 3.8, Max: 3.9, Diff: 0.2, Sum: 7.7]    
      [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
      [Object Copy (ms): Min: 91.3, Avg: 92.4, Max: 93.4, Diff: 2.1, Sum: 184.8]    
      [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
         [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 2]    
      [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]    
      [GC Worker Total (ms): Min: 160.9, Avg: 160.9, Max: 160.9, Diff: 0.0, Sum: 321.9]    
      [GC Worker End (ms): Min: 59628100.9, Avg: 59628100.9, Max: 59628100.9, Diff: 0.0]    
   [Code Root Fixup: 0.1 ms]    
   [Code Root Purge: 0.0 ms]    
   [Clear CT: 0.6 ms]    
   [Other: 2.3 ms]    
      [Choose CSet: 0.0 ms]    
      [Ref Proc: 0.8 ms]    
      [Ref Enq: 0.1 ms]    
      [Redirty Cards: 0.4 ms]    
      [Humongous Register: 0.1 ms]    
      [Humongous Reclaim: 0.2 ms]    
      [Free CSet: 0.2 ms]    
   [Eden: 352.0M(352.0M)->0.0B(392.0M) Survivors: 56.0M->16.0M Heap: 5133.7M(8192.0M)->4594.1M(8192.0M)]    
 [Times: user=0.32 sys=0.00, real=0.17 secs]    
这就是我目前面临的问题,从G1GC日志来看,对于大多数日志事件,提升的字节值将变为负值


G1GC日志中的升级字节计算公式是否不同?我在这里遗漏了什么吗?

可能是因为
大量对象
回收:

[Humongous Reclaim: 0.2 ms]  --> Time spent to free humongous regions
庞大的对象
在旧一代中直接分配,仅在标记周期结束时或在整个GCs()期间收集

但是,由于JDK 8u40,默认情况下,G1GC在每个年轻的GC()上回收死的
大量对象
对象

可以尝试关闭此功能并重新测量:

-XX:-G1ReclaimDeadHumongousObjectsAtYoungGC

可能是由于
大量对象
回收:

[Humongous Reclaim: 0.2 ms]  --> Time spent to free humongous regions
庞大的对象
在旧一代中直接分配,仅在标记周期结束时或在整个GCs()期间收集

但是,由于JDK 8u40,默认情况下,G1GC在每个年轻的GC()上回收死的
大量对象
对象

可以尝试关闭此功能并重新测量:

-XX:-G1ReclaimDeadHumongousObjectsAtYoungGC