-
Enhancement
-
Resolution: Unresolved
-
P4
-
14
Currently G1 always sets the card table to all-clean during GC and updates it to the appropriate value during allocation (i.e. young).
Observation is that in the large majority of cases, during stable operation, the same regions get allocated to the same type due to how young/old is seggregated during allocation. I.e. a recently cleared young region will be allocated as young almost immediately anyway, wasting the time and effort to first clean and then set to young.
Also, setting all cards to all-clean for all regions takes a lot of time during GC, particularly in throughput oriented large heap loads around 7-10% of pause time.
Investigate doing the clearing lazily, keeping the as-young-marked regions during gc.
Observation is that in the large majority of cases, during stable operation, the same regions get allocated to the same type due to how young/old is seggregated during allocation. I.e. a recently cleared young region will be allocated as young almost immediately anyway, wasting the time and effort to first clean and then set to young.
Also, setting all cards to all-clean for all regions takes a lot of time during GC, particularly in throughput oriented large heap loads around 7-10% of pause time.
Investigate doing the clearing lazily, keeping the as-young-marked regions during gc.
- relates to
-
JDK-8131668 Contention on allocating new TLABs constrains throughput on G1
- Open
-
JDK-8159429 Contention on FreeList_lock during allocating GC regions
- Open
-
JDK-8226731 Remove StoreLoad in G1 post barrier
- Open
-
JDK-8272773 Configurable card table card size
- Resolved