-
Enhancement
-
Resolution: Duplicate
-
P4
-
8u40, 9
References to the heap in string deduplication data structures (queue/table) are treated as weak roots, so they need to be updated at every GC.
Currently G1 updates all queues and the entire table every GC. Depending on the application this is a time consuming process; this results that in some applications, the performance gains due to smaller footprint are completely offset by the increase in pause time.
E.g. in CRM Fuse, while decreasing the number of GCs by >20% (by freeing up a large amount of memory), the individual pauses are lengthened by 25%, increasing overall latency.
Investigation showed that the main problem is the update of the string dedup table: it has 700k entries which just takes time to iterate through, e.g. >10ms at a total pause time of 35ms.
Look into ways to decrease the impact of string deduplication.
One idea is to somehow seggregate the table into per-region tables like for the code cache.
Another data point is that the amount of actually removed entries per gc is very small, at most in the low hundreds of entries.
Currently G1 updates all queues and the entire table every GC. Depending on the application this is a time consuming process; this results that in some applications, the performance gains due to smaller footprint are completely offset by the increase in pause time.
E.g. in CRM Fuse, while decreasing the number of GCs by >20% (by freeing up a large amount of memory), the individual pauses are lengthened by 25%, increasing overall latency.
Investigation showed that the main problem is the update of the string dedup table: it has 700k entries which just takes time to iterate through, e.g. >10ms at a total pause time of 35ms.
Look into ways to decrease the impact of string deduplication.
One idea is to somehow seggregate the table into per-region tables like for the code cache.
Another data point is that the amount of actually removed entries per gc is very small, at most in the low hundreds of entries.
- duplicates
-
JDK-8254598 StringDedupTable should use OopStorage
-
- Resolved
-