< prev index next >
src/hotspot/share/gc/shared/modRefBarrierSet.hpp
rename things
8198949_arraycopy
class Klass;
class ModRefBarrierSet: public BarrierSet {
protected:
! ModRefBarrierSet(const BarrierSet::FakeRtti& fake_rtti)
! : BarrierSet(fake_rtti.add_tag(BarrierSet::ModRef)) { }
~ModRefBarrierSet() { }
public:
template <DecoratorSet decorators, typename T>
inline void write_ref_field_pre(T* addr) {}
class Klass;
class ModRefBarrierSet: public BarrierSet {
protected:
! ModRefBarrierSet(BarrierSetAssembler* barrier_set_assembler,
! const BarrierSet::FakeRtti& fake_rtti)
! : BarrierSet(barrier_set_assembler,
! fake_rtti.add_tag(BarrierSet::ModRef)) { }
~ModRefBarrierSet() { }
public:
template <DecoratorSet decorators, typename T>
inline void write_ref_field_pre(T* addr) {}
***************
// Causes all refs in "mr" to be assumed to be modified.
virtual void invalidate(MemRegion mr) = 0;
virtual void write_region(MemRegion mr) = 0;
+ // Operations on arrays, or general regions (e.g., for "clone") may be
+ // optimized by some barriers.
+
+ // Below length is the # array elements being written
+ virtual void write_ref_array_pre(oop* dst, size_t length,
+ bool dest_uninitialized = false) {}
+ virtual void write_ref_array_pre(narrowOop* dst, size_t length,
+ bool dest_uninitialized = false) {}
+ // Below count is the # array elements being written, starting
+ // at the address "start", which may not necessarily be HeapWord-aligned
+ inline void write_ref_array(HeapWord* start, size_t count);
+
+ protected:
+ virtual void write_ref_array_work(MemRegion mr) = 0;
+
+ public:
// The ModRef abstraction introduces pre and post barriers
template <DecoratorSet decorators, typename BarrierSetT>
class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
< prev index next >