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