< prev index next >
src/hotspot/share/gc/g1/g1BarrierSet.hpp
G1BarrierSet_merge
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
! #ifndef SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP
! #define SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP
- #include "gc/g1/g1RegionToSpaceMapper.hpp"
#include "gc/shared/cardTableModRefBS.hpp"
- #include "memory/memRegion.hpp"
- #include "oops/oop.hpp"
- #include "utilities/macros.hpp"
class DirtyCardQueueSet;
- class G1SATBCardTableLoggingModRefBS;
class CardTable;
class G1CardTable;
// This barrier is specialized to use a logging barrier to support
// snapshot-at-the-beginning marking.
! class G1SATBCardTableModRefBS: public CardTableModRefBS {
friend class VMStructs;
! protected:
! G1SATBCardTableModRefBS(G1CardTable* table, const BarrierSet::FakeRtti& fake_rtti);
! ~G1SATBCardTableModRefBS() { }
- public:
// Add "pre_val" to a set of objects that may have been disconnected from the
// pre-marking object graph.
static void enqueue(oop pre_val);
static void enqueue_if_weak_or_archive(DecoratorSet decorators, oop value);
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
! #ifndef SHARE_VM_GC_G1_G1BARRIERSET_HPP
! #define SHARE_VM_GC_G1_G1BARRIERSET_HPP
#include "gc/shared/cardTableModRefBS.hpp"
class DirtyCardQueueSet;
class CardTable;
class G1CardTable;
// This barrier is specialized to use a logging barrier to support
// snapshot-at-the-beginning marking.
! class G1BarrierSet: public CardTableModRefBS {
friend class VMStructs;
! private:
! DirtyCardQueueSet& _dcqs;
!
! public:
! G1BarrierSet(G1CardTable* table);
! ~G1BarrierSet() { }
// Add "pre_val" to a set of objects that may have been disconnected from the
// pre-marking object graph.
static void enqueue(oop pre_val);
static void enqueue_if_weak_or_archive(DecoratorSet decorators, oop value);
***************
virtual void write_ref_array_pre(oop* dst, int count, bool dest_uninitialized);
virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized);
template <DecoratorSet decorators, typename T>
void write_ref_field_pre(T* field);
- };
-
- template<>
- struct BarrierSet::GetName<G1SATBCardTableModRefBS> {
- static const BarrierSet::Name value = BarrierSet::G1SATBCT;
- };
-
- template<>
- struct BarrierSet::GetType<BarrierSet::G1SATBCT> {
- typedef G1SATBCardTableModRefBS type;
- };
-
- // Adds card-table logging to the post-barrier.
- // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet.
- class G1SATBCardTableLoggingModRefBS: public G1SATBCardTableModRefBS {
- private:
- DirtyCardQueueSet& _dcqs;
-
- public:
- G1SATBCardTableLoggingModRefBS(G1CardTable* card_table);
// NB: if you do a whole-heap invalidation, the "usual invariant" defined
// above no longer applies.
void invalidate(MemRegion mr);
***************
virtual void on_thread_attach(JavaThread* thread);
virtual void on_thread_detach(JavaThread* thread);
// Callbacks for runtime accesses.
! template <DecoratorSet decorators, typename BarrierSetT = G1SATBCardTableLoggingModRefBS>
class AccessBarrier: public ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> {
typedef ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> ModRef;
typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
public:
virtual void on_thread_attach(JavaThread* thread);
virtual void on_thread_detach(JavaThread* thread);
// Callbacks for runtime accesses.
! template <DecoratorSet decorators, typename BarrierSetT = G1BarrierSet>
class AccessBarrier: public ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> {
typedef ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> ModRef;
typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
public:
***************
static oop oop_load_in_heap(T* addr);
};
};
template<>
! struct BarrierSet::GetName<G1SATBCardTableLoggingModRefBS> {
! static const BarrierSet::Name value = BarrierSet::G1SATBCTLogging;
};
template<>
! struct BarrierSet::GetType<BarrierSet::G1SATBCTLogging> {
! typedef G1SATBCardTableLoggingModRefBS type;
};
! #endif // SHARE_VM_GC_G1_G1SATBCARDTABLEMODREFBS_HPP
static oop oop_load_in_heap(T* addr);
};
};
template<>
! struct BarrierSet::GetName<G1BarrierSet> {
! static const BarrierSet::Name value = BarrierSet::G1BarrierSet;
};
template<>
! struct BarrierSet::GetType<BarrierSet::G1BarrierSet> {
! typedef ::G1BarrierSet type;
};
! #endif // SHARE_VM_GC_G1_G1BARRIERSET_HPP
< prev index next >