我不明白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]
答案 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 blog和technetwork 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