--- old/src/hotspot/share/gc/parallel/psCompactionManager.cpp 2018-03-22 16:37:40.608885603 +0100 +++ new/src/hotspot/share/gc/parallel/psCompactionManager.cpp 2018-03-22 16:37:40.408885610 +0100 @@ -34,6 +34,8 @@ #include "gc/shared/taskqueue.inline.hpp" #include "logging/log.hpp" #include "memory/iterator.inline.hpp" +#include "oops/access.inline.hpp" +#include "oops/compressedOops.inline.hpp" #include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/objArrayKlass.inline.hpp" @@ -182,10 +184,10 @@ template static void oop_pc_follow_contents_specialized(InstanceRefKlass* klass, oop obj, ParCompactionManager* cm) { T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj); - T heap_oop = oopDesc::load_heap_oop(referent_addr); + T heap_oop = RawAccess<>::oop_load(referent_addr); log_develop_trace(gc, ref)("InstanceRefKlass::oop_pc_follow_contents " PTR_FORMAT, p2i(obj)); - if (!oopDesc::is_null(heap_oop)) { - oop referent = oopDesc::decode_heap_oop_not_null(heap_oop); + if (!CompressedOops::is_null(heap_oop)) { + oop referent = CompressedOops::decode_not_null(heap_oop); if (PSParallelCompact::mark_bitmap()->is_unmarked(referent) && PSParallelCompact::ref_processor()->discover_reference(obj, klass->reference_type())) { // reference already enqueued, referent will be traversed later @@ -201,8 +203,8 @@ T* next_addr = (T*)java_lang_ref_Reference::next_addr_raw(obj); // Treat discovered as normal oop, if ref is not "active", // i.e. if next is non-NULL. - T next_oop = oopDesc::load_heap_oop(next_addr); - if (!oopDesc::is_null(next_oop)) { // i.e. ref is not "active" + T next_oop = RawAccess<>::oop_load(next_addr); + if (!CompressedOops::is_null(next_oop)) { // i.e. ref is not "active" T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj); log_develop_trace(gc, ref)(" Process discovered as normal " PTR_FORMAT, p2i(discovered_addr)); cm->mark_and_push(discovered_addr);