为什么线程停止时间与java GC不同

时间:2018-05-14 02:40:57

标签: garbage-collection

当添加PrintGCApplicationStoppedTime以显示GC时的线程停止时间时,我们可以看到不同的停止时间,如: 2018-05-13T11:15:48.562 + 0800:51.190:应用程序线程停止的总时间:0.1729628秒,停止线程:0.0000526秒 2018-05-13T11:15:48.621 + 0800:51.249:应用程序线程停止的总时间:0.0005166秒,停止线程:0.0000728秒

我们可以看到,第一个线程停止了173ms,但第二个线程不到1毫秒。为什么他们如此不同?以及"停止时间"的确切含义是什么? (开始计数时,停止时)。

如果它是线程挂起的真实准确时间,是否意味着一个线程暂停了一段时间,而其他线程在GC时仍在运行?

1 个答案:

答案 0 :(得分:0)

选项名称-XX+PrintGCApplicationStoppedTime具有误导性。 它报告所有JVM安全点(或Stop-the-World暂停)。 此外,GC自己的日志记录只记录GC相关的时间,而安全点进程本身可能只有更多的开销。

Here您可以在HotSpot JVM中找到有关安全点的更多信息。