我不确定是否应该将此作为答案发布,因为这是my理解这个日志,但对于评论来说似乎太大了。
总时间为STW
事件是0.500ms
如果你用眼睛看G1GC
两者都不是0.500ms
nor 10ms
如果你采取Shenandoah
例如。当你使用G1GC
, STW event
被视为0.500ms
, using Shenandoah
,将导致0.500ms + delta
;在哪里这个delta
将是携带所有内容所花费的累积时间java threads
to a safepoint
(也叫TTSP
- 到达安全点的时间)+为此需要进行的任何清理工作safepoint
。也许一张图片会让这件事变得更容易:
|------|------------------------|---------|
| TTPS | G1 Evacuation Pause | CleanUp |
|------|------------------------|---------|
G1GC
视为STW Event
the G1 Evacuation Pause
region only. Shenandoah
例如,将整个事物视为STW
活动(所有 3 个地区)。谁是对的?我将把这件事留给你来决定。
您可以启用安全点粒度G1GC
via -Xlog:safepoint*
, 例如。
你使用的工具有自己的“意见”哦,我想如何对待每次产生的日志;但绝对不是10 ms
。为什么?正如您已经看到的(正如您在评论中所说),有时您会在日志中得到类似的内容:
[9.090s][info][gc ] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 77M->2M(128M) 0.500ms
[9.090s][info][gc,cpu ] GC(25) User=0.00s Sys=0.00s Real=**0.00s**
注意Real=0.00s
。这是否意味着有no pause?当然不是,这只意味着没有消耗cpu时间。