RFR: 8229451: ZGC: Make some roots invisible to the heap iterator

Per Liden per.liden at oracle.com
Tue Aug 13 08:42:14 UTC 2019

JDK-8227226 can temporarily create long[] objects on the heap, which 
later become oop arrays, when the array initialization has been 
completed. This is fine from a sampling/reporting point of view (the 
things done in the MemAllocator::Allocation destructor), since that only 
happens after the final klass pointer has been installed. However, if a 
heap iteration (via ZHeapIterator) happens before the final klass 
pointer has been installed, it will then see the long[]. As far as I can 
tell, this isn't a big deal, unless that heap iteration is out to 
JVMTI-tag all long[] instances. In that case, we tag a long[] which will 
later become an oop array, which seems wrong and potentially 
problematic. To avoid this, we want to be able to hide these roots from 
the heap iterator until the final klass pointer has been installed.

The approach here is that these temporary long[] objects are not kept 
alive in a Handle, but instead treated as a special root in 
ZThreadLocalData, that can optionally be made invisible to the 

Bug: https://bugs.openjdk.java.net/browse/JDK-8229451
Webrev: http://cr.openjdk.java.net/~pliden/8229451/webrev.0


More information about the hotspot-gc-dev mailing list