--- old/src/hotspot/share/gc/cms/parNewGeneration.cpp 2018-03-21 16:40:58.795888362 +0100 +++ new/src/hotspot/share/gc/cms/parNewGeneration.cpp 2018-03-21 16:40:58.591888369 +0100 @@ -51,6 +51,8 @@ #include "logging/log.hpp" #include "logging/logStream.hpp" #include "memory/resourceArea.hpp" +#include "oops/access.inline.hpp" +#include "oops/compressedOops.inline.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.hpp" @@ -679,8 +681,7 @@ void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { - assert(!oopDesc::is_null(*p), "expected non-null ref"); - oop obj = oopDesc::load_decode_heap_oop_not_null(p); + oop obj = RawAccess::oop_load(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); @@ -690,7 +691,7 @@ _par_cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { - oop obj = oopDesc::load_decode_heap_oop_not_null(p); + oop obj = RawAccess::oop_load(p);; _rs->write_ref_field_gc_par(p, obj); } } @@ -706,8 +707,7 @@ void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { - assert(!oopDesc::is_null(*p), "expected non-null ref"); - oop obj = oopDesc::load_decode_heap_oop_not_null(p); + oop obj = RawAccess::oop_load(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); @@ -717,7 +717,7 @@ _cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { - oop obj = oopDesc::load_decode_heap_oop_not_null(p); + oop obj = RawAccess::oop_load(p); _rs->write_ref_field_gc_par(p, obj); } } @@ -726,15 +726,15 @@ void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); } template void ScanClosureWithParBarrier::do_oop_work(T* p) { - T heap_oop = oopDesc::load_heap_oop(p); - if (!oopDesc::is_null(heap_oop)) { - oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); + T heap_oop = RawAccess<>::oop_load(p); + if (!CompressedOops::is_null(heap_oop)) { + oop obj = CompressedOops::decode_not_null(heap_oop); if ((HeapWord*)obj < _boundary) { assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?"); oop new_obj = obj->is_forwarded() ? obj->forwardee() : _g->DefNewGeneration::copy_to_survivor_space(obj); - oopDesc::encode_store_heap_oop_not_null(p, new_obj); + RawAccess<>::oop_store(p, new_obj); } if (_gc_barrier) { // If p points to a younger generation, mark the card.