G1GC GC记录它们的含义是什么?

时间:2011-03-08 08:11:58

标签: java logging garbage-collection heap-memory g1gc

我不明白G1GC GC日志究竟是什么意思(添加PrintGCDetails和PrintGCTimeStamps时)。有人可以阐明语法吗?

[

GC pause (young), 0.03067078 secs]
   [SATB Drain Time:   0.2 ms]
   [Parallel Time:  22.6 ms]
      [GC Worker Start Time (ms):  165213430.0  165213430.0  165213430.0  165213430.0  165213430.0  165213430.0  165213430.1  165213430.1]
      [Update RS (ms):  10.7  10.0  11.1  9.9  9.9  11.2  10.6  8.6
       Avg:  10.3, Min:   8.6, Max:  11.2]
         [Processed Buffers : 14 8 8 12 9 11 10 8
          Sum: 80, Avg: 10, Min: 8, Max: 14]
      [Ext Root Scanning (ms):  2.5  2.6  2.9  3.4  3.3  2.7  2.6  2.4
       Avg:   2.8, Min:   2.4, Max:   3.4]
      [Mark Stack Scanning (ms):  0.0  0.0  0.0  0.0  0.0  0.0  0.0  2.2
       Avg:   0.3, Min:   0.0, Max:   2.2]
      [Scan RS (ms):  4.0  4.1  3.1  3.7  3.9  3.2  3.8  3.9
       Avg:   3.7, Min:   3.1, Max:   4.1]
      [Object Copy (ms):  4.7  5.3  4.7  4.8  4.7  4.7  4.8  4.7
       Avg:   4.8, Min:   4.7, Max:   5.3]
      [Termination (ms):  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
       Avg:   0.0, Min:   0.0, Max:   0.0]
         [Termination Attempts : 23 1 26 23 19 29 22 25
          Sum: 168, Avg: 21, Min: 1, Max: 29]
      [GC Worker End Time (ms):  165213452.3  165213452.3  165213452.3  165213452.3  165213452.3  165213452.3  165213452.3  165213452.3]
      [Other:   0.7 ms]
   [Clear CT:   0.6 ms]
   [Other:   7.3 ms]
      [Choose CSet:   0.0 ms]
   [ 3329M->3245M(6000M)]

完整的GC是什么意思?这是一个暂停是否并行化?使用哪种GC算法?为什么G1决定使用它?

5.941: [Full GC 7891K->4756K(6000M), 0.1939233 secs]

3 个答案:

答案 0 :(得分:2)

关于“暂停是否并行化?”的信息很少。 用Java的说法, GC有两种类型(基于与mutator的并发即应用) - (1)Stop-the-world(2)Concurrent

Stop-the-world GC进一步细分为 - 1a)如果GC线程数为1则停止世界1b)如果GC线程数超过1则并行

答案 1 :(得分:0)

以下是我在G1 GC上可以找到的(相当有限的)材料的读物。 (2004年有一篇论文背后是付费墙,来自JavaWorld 2008的幻灯片,以及G1 GC page。如果有人有其他链接,请添加它们。)

  

完整的GC是什么意思?

与其他HotSpot GC一样,堆分为New或Eden空间,Survivor空间和Old或Tenured Object空间。但是,与其他HotSpot GC不同,G1使用多个区域来保存空间。

通常,G1收集器与应用程序线程并行运行,跟踪和“撤离”对象到其他区域。但是,似乎收集器有时会落后于必须停止所有内容,并使用所有可用的处理器来收集所有堆区域。我认为这是一个完整的GC。

  

它是否是并行化的暂停?

我认为它是并行化的,但也是停止世界的。

  

使用哪种GC算法?

目前尚不清楚。

  

为什么G1决定使用它?

见上文。它太落后了,堆满了垃圾。

答案 2 :(得分:0)

来自oracle g1gc blogtechnetwork article

  

完整的GC是什么意思?

对于G1GC ,任何超过区域大小一半的对象都被视为" Humongous对象"。这样的对象直接在老一代中分配到" Humongous region s"。 These Humongous regions are a contiguous set of regions.

在完全垃圾收集周期中,在清理阶段标记周期结束时

Dead Humongous objects are freed

为了减少复制开销,Humongous对象不包含在任何疏散暂停中。 完整的垃圾收集周期可以压缩Humongous对象。

通常完整GC 会清除整个堆 - 年轻和终身空间(旧版)

另一方面,您必须担心应用程序线程停止了多长时间"不论GC类型如何:Young GC或Full GC等。

  

它是否是并行化的暂停?

<强> YounGC is parallelized but not FullGC

完整GC: Currently G1 full gc is single threaded and very slow, 我们应尽量避免使用完整的gcs(来自oracle文章)

  

使用哪种GC算法?

您的意思是年轻GC /主要GC /全GC吗?从您的日志中,它是最后一行的Full GC和第一行的YounGC。

  

为什么G1决定使用它?

在回答第一次查询时解释。

关于G1GC微调,请查看oracle article和相关的SE question