All collectors but parallel gc use WorkGang to implement parallelism.
This again and again causes us to add an additional abstraction layer above any code that tries to use parallel threads for all collectors (evacuation failure, dynamic thread sizing, reference processing, ...).
Further the parallel gc task queue mechanism has disadvantages:
- the work (tasks) must be known beforehand
- getting work from the task queue incurs taking a global lock which is actually known for being inefficient in literature already
Investigate to replace the parallel gc task queue mechanism with a work gang.