[sh/8u] Root processing related backports

Zhengyu Gu zgu at redhat.com
Fri May 8 16:50:11 UTC 2020



On 5/8/20 9:55 AM, Aleksey Shipilev wrote:
> On 3/17/20 5:27 PM, Zhengyu Gu wrote:
>> Webrev:
>> http://cr.openjdk.java.net/~zgu/shenandoah/sh-8u-root-processing/webrev.00/
> 
> Please rebase this to the current sh/8u state? It should be simpler now that Traversal is gone.

This has to be redone, the patch has been left in the dust for a while. 
Will revisit it next week.

Thanks,

-Zhengyu

> 
> *) cleanup_jni_refs() is dropped in shenandoahConcurrentMark.cpp here, where is it added back? I
> looked at weak_roots_work(), is it in ShenandoahWeakRoots now? We have to be very accurate about
> this, because we broke it already at least once :)
> 
>   501   // When we're done marking everything, we process weak references.
>   502   if (_heap->process_references()) {
>   503     weak_refs_work(full_gc);
>   504   } else {
>   505     cleanup_jni_refs();
>   506   }
> 
> *) The bug mentioned here has a reproducer, please try it?
>   https://mail.openjdk.java.net/pipermail/shenandoah-dev/2019-October/010952.html
>   https://mail.openjdk.java.net/pipermail/shenandoah-dev/2019-October/010973.html
> 
>   310     // In JDK 8, this is handled by JNIHandles::weak_oops_do. We cannot enter here, because
>   311     // it would walk the JvmtiTagMap twice (which is okay) and possibly by multiple threads
>   312     // (which is not okay, because that walk is not thread-safe). In subsequent releases,
>   313     // it is handled in a more straightforward manner, see JDK-8189360.
>   314     /*
>   315     ShenandoahForwardedIsAliveClosure is_alive;
>   316     JvmtiExport::weak_oops_do(&is_alive, oops);
>   317     */
> 
> *) Commented out line here:
> 
>   747 void ShenandoahConcurrentMark::weak_roots_work() {
>   748 //  WorkGang* workers = _heap->workers();
>   749   ShenandoahHeap* const heap = ShenandoahHeap::heap();
> 
> *) Inconsistent indenting at L137 here:
> 
>   128 class ShenandoahRootScanner : public ShenandoahRootProcessor {
>   129 private:
>   130   ShenandoahSerialRoots           _serial_roots;
>   131   ShenandoahSystemDictionaryRoots _dict_roots;
>   132   ShenandoahClassLoaderDataRoots  _cld_roots;
>   133   ShenandoahThreadRoots           _thread_roots;
>   134   ShenandoahWeakRoots             _weak_roots;
>   135   ShenandoahStringDedupRoots      _dedup_roots;
>   136   ShenandoahStringTableRoots      _string_table_roots;
>   137   ShenandoahCodeCacheRoots<ITR>  _code_roots;
> 
> ...and at L184 here:
> 
>   174 // Evacuate all roots at a safepoint
>   175 class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
>   176 private:
>   177   ShenandoahSerialRoots          _serial_roots;
>   178   ShenandoahSystemDictionaryRoots _dict_roots;
>   179   ShenandoahClassLoaderDataRoots _cld_roots;
>   180   ShenandoahThreadRoots          _thread_roots;
>   181   ShenandoahWeakRoots            _weak_roots;
>   182   ShenandoahStringDedupRoots     _dedup_roots;
>   183   ShenandoahStringTableRoots      _string_table_roots;
>   184   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
> 
> ...and L201 here:
> 
>   193 class ShenandoahRootUpdater : public ShenandoahRootProcessor {
>   194 private:
>   195   ShenandoahSerialRoots          _serial_roots;
>   196   ShenandoahSystemDictionaryRoots _dict_roots;
>   197   ShenandoahClassLoaderDataRoots _cld_roots;
>   198   ShenandoahThreadRoots          _thread_roots;
>   199   ShenandoahWeakRoots            _weak_roots;
>   200   ShenandoahStringDedupRoots     _dedup_roots;
>   201   ShenandoahStringTableRoots      _string_table_roots;
>   202   ShenandoahCodeCacheRoots<ShenandoahCsetCodeRootsIterator> _code_roots;
>   203   const bool                     _update_code_cache;
> 
> ...and L219 here:
> 
>   210 // Adjuster all roots at a safepoint during full gc
>   211 class ShenandoahRootAdjuster : public ShenandoahRootProcessor {
>   212 private:
>   213   ShenandoahSerialRoots          _serial_roots;
>   214   ShenandoahSystemDictionaryRoots _dict_roots;
>   215   ShenandoahClassLoaderDataRoots _cld_roots;
>   216   ShenandoahThreadRoots          _thread_roots;
>   217   ShenandoahWeakRoots            _weak_roots;
>   218   ShenandoahStringDedupRoots     _dedup_roots;
>   219   ShenandoahStringTableRoots      _string_table_roots;
>   220   ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
> 
> *) shenandoahUtils.hpp has only the copyright header change?
> 
> *) Double new line in shenandoahRootProcessor.inline.hpp here?
> 
>    87   AlwaysTrueClosure always_true;
>    88
>    89
>    90   _serial_roots.oops_do(oops, worker_id);
> 
> *) TestObjItrWithHeapDump.java: have you seen it run? Because I am not sure it even compiles with
> these. Those are still in com.oracle.*-something in 8u, IIRC.
> 
>    36 import jdk.test.lib.process.ProcessTools;
>    37 import jdk.test.lib.process.OutputAnalyzer;
> 



More information about the shenandoah-dev mailing list