RFR(L): 8195097: Make it possible to process StringTable outside safepoint
robbin.ehn at oracle.com
Mon May 28 13:19:50 UTC 2018
Hi all, please review.
This implements the StringTable with the ConcurrentHashtable for managing the
strings using oopStorage for backing the actual oops via WeakHandles.
The unlinking and freeing of hashtable nodes is moved outside the safepoint,
which means GC only needs to walk the oopStorage, either concurrently or in a
safepoint. Walking oopStorage is also faster so there is a good effect on all
safepoints visiting the oops.
The unlinking and freeing happens during inserts when dead weak oops are
encountered in that bucket. In any normal workload the stringtable self-cleans
without needing any additional cleaning. Cleaning/unlinking can also be done
concurrently via the ServiceThread, it is started when we have a high ‘dead
factor’. E.g. application have a lot of interned string removes the references
and never interns again. The ServiceThread also concurrently grows the table if
‘load factor’ is high. Both the cleaning and growing take care to not prolonging
time to safepoint, at the cost of some speed.
Kitchensink24h, multiple tier1-5 with no issue that I can relate to this
changeset, various benchmark such as JMH, specJBB2015.
More information about the hotspot-gc-dev