Blob Blame History Raw
# HG changeset patch
# User rkennke
# Date 1463083411 -7200
#      Thu May 12 22:03:31 2016 +0200
# Node ID 632ccab070e6b8f0114f4c636508de5b9d7210ab
# Parent  04726a0d70bbbdef63056ebfe3ef20bf21fb4be7
Enable weak reference discovery in ShenandoahMarkCompact. Otherwise we never process any weak references in full-gc.

diff --git a/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp b/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp
--- openjdk/hotspot/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp
+++ openjdk/hotspot/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp
@@ -126,6 +126,8 @@
   ShenandoahMarkCompactBarrierSet bs(_heap);
   oopDesc::set_bs(&bs);
 
+  _heap->set_need_update_refs(true);
+
   OrderAccess::fence();
 
   phase1_mark_heap();
@@ -260,6 +262,12 @@
   ShenandoahConcurrentMark* cm = _heap->concurrentMark();
 
   cm->prepare_unmarked_root_objs_no_derived_ptrs(true);
+  if (ShenandoahProcessReferences) {
+    ReferenceProcessor* rp = _heap->ref_processor();
+    // enable ("weak") refs discovery
+    rp->enable_discovery(true /*verify_no_refs*/, true);
+    rp->setup_policy(true); // snapshot the soft ref policy to be used in this cycle
+  }
   cm->shared_finish_mark_from_roots();
 
   if (VerifyDuringGC) {