< prev index next >

src/share/vm/gc_implementation/g1/g1EvacFailure.hpp

Print this page
rev 7471 : 8060025: Object copy time regressions after JDK-8031323 and JDK-8057536
Summary: Evaluate and improve object copy time by micro-optimizations and splitting out slow and fast paths aggressively.
Reviewed-by:
Contributed-by: Tony Printezis <tprintezis@twitter.com>, Thomas Schatzl <thomas.schatzl@oracle.com>

@@ -30,10 +30,11 @@
 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
 #include "gc_implementation/g1/g1_globals.hpp"
 #include "gc_implementation/g1/g1OopClosures.inline.hpp"
 #include "gc_implementation/g1/heapRegion.hpp"
 #include "gc_implementation/g1/heapRegionRemSet.hpp"
+#include "oops/markOop.inline.hpp"
 #include "utilities/workgroup.hpp"
 
 // Closures and tasks associated with any self-forwarding pointers
 // installed as a result of an evacuation failure.
 

@@ -118,11 +119,13 @@
     if (_end_of_last_gap != obj_addr) {
       // there was a gap before obj_addr
       _last_gap_threshold = _hr->cross_threshold(_end_of_last_gap, obj_addr);
     }
 
-    if (obj->is_forwarded() && obj->forwardee() == obj) {
+    markOop m = obj->mark();
+    if (m->is_marked() && ((oop)m->decode_pointer() == obj)) {
+
       // The object failed to move.
 
       // We consider all objects that we find self-forwarded to be
       // live. What we'll do is that we'll update the prev marking
       // info so that they are all under PTAMS and explicitly marked.
< prev index next >