85 // ReduceInitialCardMarks
86 void initialize_deferred_card_mark_barriers();
87
88 // If the CollectedHeap was asked to defer a store barrier above,
89 // this informs it to flush such a deferred store barrier to the
90 // remembered set.
91 void flush_deferred_card_mark_barrier(JavaThread* thread);
92
93 // If a compiler is eliding store barriers for TLAB-allocated objects,
94 // we will be informed of a slow-path allocation by a call
95 // to on_slowpath_allocation_exit() below. Such a call precedes the
96 // initialization of the object itself, and no post-store-barriers will
97 // be issued. Some heap types require that the barrier strictly follows
98 // the initializing stores. (This is currently implemented by deferring the
99 // barrier until the next slow-path allocation or gc-related safepoint.)
100 // This interface answers whether a particular barrier type needs the card
101 // mark to be thus strictly sequenced after the stores.
102 virtual bool card_mark_must_follow_store() const;
103
104 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
105 virtual void on_thread_detach(JavaThread* thread);
106
107 virtual void make_parsable(JavaThread* thread) { flush_deferred_card_mark_barrier(thread); }
108
109 virtual void print_on(outputStream* st) const;
110
111 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
112 class AccessBarrier: public ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> {};
113 };
114
115 template<>
116 struct BarrierSet::GetName<CardTableBarrierSet> {
117 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
118 };
119
120 template<>
121 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
122 typedef ::CardTableBarrierSet type;
123 };
124
125 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|
85 // ReduceInitialCardMarks
86 void initialize_deferred_card_mark_barriers();
87
88 // If the CollectedHeap was asked to defer a store barrier above,
89 // this informs it to flush such a deferred store barrier to the
90 // remembered set.
91 void flush_deferred_card_mark_barrier(JavaThread* thread);
92
93 // If a compiler is eliding store barriers for TLAB-allocated objects,
94 // we will be informed of a slow-path allocation by a call
95 // to on_slowpath_allocation_exit() below. Such a call precedes the
96 // initialization of the object itself, and no post-store-barriers will
97 // be issued. Some heap types require that the barrier strictly follows
98 // the initializing stores. (This is currently implemented by deferring the
99 // barrier until the next slow-path allocation or gc-related safepoint.)
100 // This interface answers whether a particular barrier type needs the card
101 // mark to be thus strictly sequenced after the stores.
102 virtual bool card_mark_must_follow_store() const;
103
104 virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj);
105 virtual void on_thread_detach(Thread* thread);
106
107 virtual void make_parsable(JavaThread* thread) { flush_deferred_card_mark_barrier(thread); }
108
109 virtual void print_on(outputStream* st) const;
110
111 template <DecoratorSet decorators, typename BarrierSetT = CardTableBarrierSet>
112 class AccessBarrier: public ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT> {};
113 };
114
115 template<>
116 struct BarrierSet::GetName<CardTableBarrierSet> {
117 static const BarrierSet::Name value = BarrierSet::CardTableBarrierSet;
118 };
119
120 template<>
121 struct BarrierSet::GetType<BarrierSet::CardTableBarrierSet> {
122 typedef ::CardTableBarrierSet type;
123 };
124
125 #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP
|