--- old/src/share/vm/oops/objArrayOop.cpp 2017-04-25 16:45:24.187173479 +0200 +++ new/src/share/vm/oops/objArrayOop.cpp 2017-04-25 16:45:24.075173483 +0200 @@ -27,6 +27,17 @@ #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" +#include "runtime/access.inline.hpp" + +oop objArrayOopDesc::obj_at(int index) const { + ptrdiff_t offset = UseCompressedOops ? obj_at_offset(index) : obj_at_offset(index); + return HeapAccess::oop_load_at(oop_base(), offset); +} + +void objArrayOopDesc::obj_at_put(int index, oop value) { + ptrdiff_t offset = UseCompressedOops ? obj_at_offset(index) : obj_at_offset(index); + HeapAccess::oop_store_at(oop_base(), offset, value); +} oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { @@ -36,12 +47,7 @@ } else { dest = (HeapWord*)obj_at_addr(index); } - oop res = oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value, true); - // update card mark if success - if (res == compare_value) { - update_barrier_set((void*)dest, exchange_value); - } - return res; + return oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value); } #define ObjArrayOop_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \