Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8045457 | 8u25 | Per Liden | P2 | Resolved | Fixed | b01 |
JDK-8043120 | 8u20 | Per Liden | P2 | Resolved | Fixed | b17 |
JDK-8053371 | emb-8u26 | Per Liden | P2 | Resolved | Fixed | b17 |
Concurrent marking can potentially hang forever if the following scenario happens:
1) Concurrent mark starts.
2) Global mark stack overflows.
3) Immediately after the overflow condition occurs a Full GC is started which aborts the concurrent mark.
4) There's a race between discovering the overflow condition and the abort condition. Marking threads discovering the overflow condition will go into the overflow protocol and block inside enter_first_sync_barrier() waiting for the other threads to do the same. However, threads that discovered the abort condition first will abort the marking without going through the barrier. The WorkerGang spawned from markFromRoots() will then never terminate.
The end results of this is that concurrent mark will say "in progress", because the abort operation failed to complete. This in turn means that G1 thinks concurrent mark is ongoing, will not try to initiate another concurrent mark phase and hence mixed GCs will never happen. Young GC and Full GCs will continue to work because the hanging marking threads left the STS before blocking on the barrier.
1) Concurrent mark starts.
2) Global mark stack overflows.
3) Immediately after the overflow condition occurs a Full GC is started which aborts the concurrent mark.
4) There's a race between discovering the overflow condition and the abort condition. Marking threads discovering the overflow condition will go into the overflow protocol and block inside enter_first_sync_barrier() waiting for the other threads to do the same. However, threads that discovered the abort condition first will abort the marking without going through the barrier. The WorkerGang spawned from markFromRoots() will then never terminate.
The end results of this is that concurrent mark will say "in progress", because the abort operation failed to complete. This in turn means that G1 thinks concurrent mark is ongoing, will not try to initiate another concurrent mark phase and hence mixed GCs will never happen. Young GC and Full GCs will continue to work because the hanging marking threads left the STS before blocking on the barrier.
- backported by
-
JDK-8043120 G1: Concurrent mark hangs when mark stack overflows
-
- Resolved
-
-
JDK-8045457 G1: Concurrent mark hangs when mark stack overflows
-
- Resolved
-
-
JDK-8053371 G1: Concurrent mark hangs when mark stack overflows
-
- Resolved
-
- blocks
-
JDK-8040807 G1: Enable G1CollectedHeap::stop()
-
- Resolved
-
-
JDK-8044795 G1: Enable G1CollectedHeap::stop()
-
- Closed
-
- relates to
-
JDK-8040245 G1: VM hangs during shutdown
-
- Closed
-
(1 relates to)