< prev index next >
src/share/vm/oops/objArrayKlass.cpp
Print this page
*** 54,63 ****
--- 54,65 ----
#include "gc_implementation/g1/heapRegionManager.inline.hpp"
#include "gc_implementation/parNew/parOopClosures.inline.hpp"
#include "gc_implementation/parallelScavenge/psCompactionManager.hpp"
#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
+ #include "gc_implementation/shenandoah/shenandoahBarrierSet.inline.hpp"
+ #include "gc_implementation/shenandoah/shenandoahOopClosures.inline.hpp"
#include "oops/oop.pcgc.inline.hpp"
#endif // INCLUDE_ALL_GCS
ObjArrayKlass* ObjArrayKlass::allocate(ClassLoaderData* loader_data, int n, KlassHandle klass_handle, Symbol* name, TRAPS) {
assert(ObjArrayKlass::header_size() <= InstanceKlass::header_size(),
*** 241,250 ****
--- 243,258 ----
// are using has optimized modes for arrays of references. At least one
// of the asserts below will fail if this is not the case.
assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt");
assert(bs->has_write_ref_array_pre_opt(), "For pre-barrier as well.");
+ #if INCLUDE_ALL_GCS
+ if (UseShenandoahGC) {
+ ShenandoahBarrierSet::barrier_set()->arraycopy_barrier(src, dst, length);
+ }
+ #endif
+
if (s == d) {
// since source and destination are equal we do not need conversion checks.
assert(length > 0, "sanity check");
bs->write_ref_array_pre(dst, length);
Copy::conjoint_oops_atomic(src, dst, length);
< prev index next >