-
Enhancement
-
Resolution: Fixed
-
P4
-
18
-
b17
G1's evacuation failure injector is typically used for testing evacuation failure handling code, causing evacuation failures.
This helps finding issues with evacuation failure handling; as such, since this is debug-only code, it is completely disabled (compiled out) in product code.
For region pinning for performance measurements we found when manually enabling it in product mode the current implementation causes significant performance regressions on some systems (see JDK-8273309) by itself, making performance work for region pinning (g1 uses evacuation failure handling for handling pinned regions) unusable.
The reason seems to be that reading and writing G1YoungGCEvacFailureInjector::_evacuation_failure_object_count without synchronization by multiple threads millions of times per gc causes a huge slowdown.
Since we need/use this mechanism for performance work, improve the implementation to have much less performance impact by itself.
This helps finding issues with evacuation failure handling; as such, since this is debug-only code, it is completely disabled (compiled out) in product code.
For region pinning for performance measurements we found when manually enabling it in product mode the current implementation causes significant performance regressions on some systems (see JDK-8273309) by itself, making performance work for region pinning (g1 uses evacuation failure handling for handling pinned regions) unusable.
The reason seems to be that reading and writing G1YoungGCEvacFailureInjector::_evacuation_failure_object_count without synchronization by multiple threads millions of times per gc causes a huge slowdown.
Since we need/use this mechanism for performance work, improve the implementation to have much less performance impact by itself.
- relates to
-
JDK-8273309 G1: Handling objects that fail evacuation very slow
- Open
-
JDK-8276094 JEP 423: Region Pinning for G1
- Closed