RFR (XS): 8u40 Backport of 8052172: Evacuation failure handling in G1 does not evacuate all objects if -XX:-G1DeferredRSUpdate is set

Thomas Schatzl thomas.schatzl at oracle.com
Mon Sep 29 08:49:13 UTC 2014


Hi all,

  can I have reviews for a merge error to backport 8052172 to 8u40?

In particular, this hunk from g1ParScanThreadState.hpp:

@@ -124,8 +110,17 @@
     _refs->push(ref);
   }
 
-  template <class T> inline void update_rs(HeapRegion* from, T* p, int tid);
-
+  template <class T> void update_rs(HeapRegion* from, T* p, int tid) {
+    // If the new value of the field points to the same region or
+    // is the to-space, we don't need to include it in the Rset updates.
+    if (!from->is_in_reserved(oopDesc::load_decode_heap_oop(p)) && !from->is_survivor()) {
+      size_t card_index = ctbs()->index_for(p);
+      // If the card hasn't been added to the buffer, do it.
+      if (ctbs()->mark_card_deferred(card_index)) {
+        dirty_card_queue().enqueue((jbyte*)ctbs()->byte_for_index(card_index));
+      }
+    }
+  }
  private:
 
   inline HeapWord* allocate(GCAllocPurpose purpose, size_t word_sz);

did not apply cleanly any more because later changes removed the
allocation methods.

The remainder of the change applied cleanly.

CR:
https://bugs.openjdk.java.net/browse/JDK-8052172
Original Webrev:
http://cr.openjdk.java.net/~tschatzl/8052172/webrev/
8u40 Webrev:
http://cr.openjdk.java.net/~tschatzl/8052172/webrev.8u40/

Thanks,
  Thomas




More information about the hotspot-gc-dev mailing list