-
Enhancement
-
Resolution: Fixed
-
P3
-
9
-
b139
Threads are competing for these objects if their local stacks are empty.
Now, the following problems:
- the number of references that are pushed/popped per operation is 16. Considering that the local mark stacks contain 128k (entries I think), quite a few push/pop operations need to be done to fill/empty this stack (note that we never completely fill/empty the local stack, but we do partial filling/emptying)
- the global mark stack is protected by a single global lock (that is not even a lock specifically for the mark stack, that lock is shared by other stuff in the GC too!). This means death on machines with 100+ threads, particularly at the "end" of marking when all threads are emptying the global mark stack
Some applications need a mark stack with 1G entries. Above two issues are really problematic in these cases.
- is blocked by
-
JDK-8160897 Concurrent mark mark stack memory allocation leaks memory
-
- Resolved
-
- relates to
-
JDK-8165848 Remove locks by lock-free algorithms in global mark stack
-
- Open
-
-
JDK-8162952 Zero copy concurrent mark global mark stack push and pops
-
- Open
-
-
JDK-8165674 G1CMMarkStack::out_of_memory possibly redundant
-
- Resolved
-
-
JDK-8166207 Use of Copy::conjoint_oops_atomic in global mark stack causes crashes on arm64
-
- Resolved
-
-
JDK-8195094 Fix type-O in "8159422: Very high Concurrent Mark mark stack contention"
-
- Resolved
-
-
JDK-8151996 Revise mark stack memory management in CMMarkstack
-
- Open
-
-
JDK-8057003 Large reference arrays cause extremely long synchronization times
-
- Resolved
-