Other |
---|
tbd_majorResolved |
Duplicate :
|
|
Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
During reference processing in a gc pause (in G1CollectedHeap::process_discovered_references), we need to preserve (copy) reference objects that were discovered by the concurrent marking reference processor. We use the G1ParPreserveCMReferentsTask GangTask for that, always executing it using all threads but then internally let some threads just do nothing if there is not enough work to do. The problem with that method is, if you are on a large machine with tens of threads, and there is almost nothing to do during this phase (or even during the whole GC), starting up and waiting for that many threads takes a very significant fraction of gc pause time, e.g. half of object copy time. A much better way would be to determine the number of required threads at the outside, and only start up as many threads as required. Test case: GCOld
|