[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