G1GC GC日志是什么意思?

4
我不明白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算法?为什么G1决定使用它?

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

2

关于“是暂停还是并行?”的信息很少。

在Java术语中,GC有两种类型(基于与mutator即应用程序的并发性)-(1)停止-全球(2)并发。

停止全球GC进一步细分为 - 1a)如果GC线程数为1,则停止全球;1b)如果GC线程数大于1,则为并行。


0

来自Oracle的g1gc博客technetwork文章

那什么是Full GC?

对于G1GC,任何大于半个Region大小的对象都被视为"巨型对象(Humongous object)"。这样的对象被直接分配到老年代的"巨型区域(Humongous region)"中。这些巨型区域是一组连续的区域。

在清理阶段结束时,死亡的巨型对象会被释放,同时也会在进行完整的垃圾回收周期期间释放。

为了减少复制开销,巨型对象不包括在任何疏散暂停中。 完整的垃圾回收周期可以原地压缩巨型对象。

一般来说,Full GC会清理整个堆-包括年轻代和旧生代(老年代)

另外,无论是Young GC还是Full GC等,您都需要担心“应用程序线程停止”的时间。

它是暂停还是并行的?

YounGC是并行的,但FullGC不是

Full GC:目前G1 full gc是单线程的,非常慢,我们应该尽可能避免full gcs(来自oracle文章)

使用哪种GC算法?

您是指Young GC / Major GC / Full GC吗?从日志中可以看出,最后一行是Full GC,第一行是YounGC。

为什么G1决定使用它?

在对第一个查询的回答中已经解释了。

关于G1GC的优化,可以参考Oracle 文章和相关SE问题

0
以下是我从有限的在线G1 GC材料中读出的信息(2004年的一篇论文在付费墙后,JavaWorld 2008的幻灯片和G1 GC页面。如果有其他链接,请添加)。

那么完整的GC是什么意思?

与其他HotSpot GC一样,堆被分为新的或伊甸园空间、幸存者空间和旧的或终身对象空间。然而,与其他HotSpot GC不同的是,G1使用多个区域来容纳这些空间。
通常情况下,G1收集器与应用程序线程并行递增地运行,将对象跟踪和“疏散”到其他区域。然而,它似乎有时会落后太远,以至于必须停止所有操作,并使用所有可用处理器来收集所有堆区域。我认为这就是完整的GC。

它是暂停还是并行化的?

我认为它是并行化的,但也是停止-世界的。
哪种垃圾回收算法被使用了?
不太清楚。
为什么G1决定使用它?
如上所述。由于工作量过大,堆充满了垃圾。

请问?如果您有更多相关的链接,请添加。 - Stephen C
谢谢Stephan。我熟悉那些链接。问题是网上公开的信息似乎不足够......这是否意味着没有人使用或真正评估它? - lifey
我无法判断。我确定有些人在使用它,但是有多少是不可能确定的。在谷歌上搜索“g1gc调优”会出现6页结果,但我不认为它们提供了明确的信息...除非这些信息来自Oracle。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接