< prev index next >

src/share/vm/oops/objArrayOop.hpp

Print this page

        

*** 23,34 **** --- 23,39 ---- */ #ifndef SHARE_VM_OOPS_OBJARRAYOOP_HPP #define SHARE_VM_OOPS_OBJARRAYOOP_HPP + #include "memory/barrierSet.hpp" #include "oops/arrayOop.hpp" + #if INCLUDE_ALL_GCS + #include "gc_implementation/shenandoah/shenandoahBarrierSet.hpp" + #endif + // An objArrayOop is an array containing oops. // Evaluating "String arg[10]" will create an objArrayOop. class objArrayOopDesc : public arrayOopDesc { friend class ObjArrayKlass;
*** 77,93 **** // base is the address following the header. HeapWord* base() const { return (HeapWord*) arrayOopDesc::base(T_OBJECT); } // Accessing oop obj_at(int index) const { // With UseCompressedOops decode the narrow oop in the objArray to an // uncompressed oop. Otherwise this is simply a "*" operator. if (UseCompressedOops) { ! return load_decode_heap_oop(obj_at_addr<narrowOop>(index)); } else { ! return load_decode_heap_oop(obj_at_addr<oop>(index)); } } void obj_at_put(int index, oop value) { if (UseCompressedOops) { oop_store(obj_at_addr<narrowOop>(index), value); --- 82,105 ---- // base is the address following the header. HeapWord* base() const { return (HeapWord*) arrayOopDesc::base(T_OBJECT); } // Accessing oop obj_at(int index) const { + oop obj; // With UseCompressedOops decode the narrow oop in the objArray to an // uncompressed oop. Otherwise this is simply a "*" operator. if (UseCompressedOops) { ! obj = load_decode_heap_oop(obj_at_addr<narrowOop>(index)); } else { ! obj = load_decode_heap_oop(obj_at_addr<oop>(index)); ! } ! #if INCLUDE_ALL_GCS ! if (UseShenandoahGC) { ! obj = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(obj); } + #endif + return obj; } void obj_at_put(int index, oop value) { if (UseCompressedOops) { oop_store(obj_at_addr<narrowOop>(index), value);
< prev index next >