我需要帮助了解HotSpot Serial Collector的一些日志。
以下是我的JVM(1.8)生成的5个不同的日志。为了便于阅读,它们略有切割,但没有重要的东西被删除。
1) [Full GC (Metadata GC Threshold)
[Tenured: 0K->20760K(2796224K), 0.0516809 secs]
290882K->20760K(4054528K),
[Metaspace: 20914K->20914K(1069056K)], 0.0518074 secs]
2) [GC (Allocation Failure)
[DefNew: 1118528K->35795K(1258304K), 0.0697424 secs]
1208983K->126251K(4054528K), 0.0698470 secs]
3) [GC (Allocation Failure)
[DefNew: 1167292K->1167292K(1258304K), 0.0000172 secs]
[Tenured: 2587705K->2093117K(2796224K), 3.4401746 secs]
3754997K->2093117K(4054528K),
[Metaspace: 241446K->241446K(1296384K)], 3.4450897 secs]
4) [GC (Allocation Failure) 417.013:
[DefNew (promotion failed) : 1234062K->1258304K(1258304K), 1.4832395 secs]
[Tenured: 2796224K->2275534K(2796224K), 4.1927802 secs]
3514367K->2275534K(4054528K),
[Metaspace: 226551K->226551K(1286144K)], 5.6762551 secs]
5) [Full GC (Allocation Failure)
[Tenured: 2796224K->2424825K(2796224K), 4.8644173 secs]
4054528K->2424825K(4054528K),
[Metaspace: 226537K->226537K(1286144K)], 4.8645662 secs]
问题:
在日志1中触发Full GC的是什么?看起来Metaspace没有完全分配。有关信息,它是服务器启动。
日志2很清楚 - 次要GC。它与[GC]不同,与[Full GC]不同。但是在日志3中发生了什么?它并没有说它是Full GC,但老一代被清除了。与此同时,Young gen保持不变。据我所知,老一代只在Full GC期间被清除(就像在日志5中一样)。有趣的是,Java Mission Control将此事件记录为Full GC。
日志4中的“促销失败”是什么意思?
我将不胜感激任何帮助。我想知道是否有任何描述GC日志的官方文件(我个人没有找到)。不幸的是,互联网上的所有文章都限于两个标准日志(当涉及到串行GC时)。
答案 0 :(得分:1)
看起来Metaspace没有完全分配
它没有使用最大大小,但是在增长元空间之前,它需要进行一个集合以确保它需要。
它没有说它是Full GC,但老一代被清除了。
当只有终身空间被GC编辑时,它被称为主要集合。
日志4中“促销失败”是什么意思?
在终身空间没有足够的空间来宣传所有要从新一代启发的对象。