equal
deleted
inserted
replaced
24 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |
24 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |
25 #define SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |
25 #define SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |
26 |
26 |
27 #include "gc/shared/plab.hpp" |
27 #include "gc/shared/plab.hpp" |
28 #include "gc/shenandoah/shenandoahBarrierSet.hpp" |
28 #include "gc/shenandoah/shenandoahBarrierSet.hpp" |
|
29 #include "gc/shenandoah/shenandoahCodeRoots.hpp" |
29 #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp" |
30 #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp" |
30 #include "runtime/thread.hpp" |
31 #include "runtime/thread.hpp" |
31 #include "utilities/debug.hpp" |
32 #include "utilities/debug.hpp" |
32 #include "utilities/sizes.hpp" |
33 #include "utilities/sizes.hpp" |
33 |
34 |
41 ShenandoahSATBMarkQueue _satb_mark_queue; |
42 ShenandoahSATBMarkQueue _satb_mark_queue; |
42 PLAB* _gclab; |
43 PLAB* _gclab; |
43 size_t _gclab_size; |
44 size_t _gclab_size; |
44 uint _worker_id; |
45 uint _worker_id; |
45 bool _force_satb_flush; |
46 bool _force_satb_flush; |
|
47 int _disarmed_value; |
46 |
48 |
47 ShenandoahThreadLocalData() : |
49 ShenandoahThreadLocalData() : |
48 _gc_state(0), |
50 _gc_state(0), |
49 _oom_during_evac(0), |
51 _oom_during_evac(0), |
50 _satb_mark_queue(&ShenandoahBarrierSet::satb_mark_queue_set()), |
52 _satb_mark_queue(&ShenandoahBarrierSet::satb_mark_queue_set()), |
123 static void initialize_gclab(Thread* thread) { |
125 static void initialize_gclab(Thread* thread) { |
124 assert (thread->is_Java_thread() || thread->is_Worker_thread(), "Only Java and GC worker threads are allowed to get GCLABs"); |
126 assert (thread->is_Java_thread() || thread->is_Worker_thread(), "Only Java and GC worker threads are allowed to get GCLABs"); |
125 assert(data(thread)->_gclab == NULL, "Only initialize once"); |
127 assert(data(thread)->_gclab == NULL, "Only initialize once"); |
126 data(thread)->_gclab = new PLAB(PLAB::min_size()); |
128 data(thread)->_gclab = new PLAB(PLAB::min_size()); |
127 data(thread)->_gclab_size = 0; |
129 data(thread)->_gclab_size = 0; |
|
130 data(thread)->_disarmed_value = ShenandoahCodeRoots::disarmed_value(); |
128 } |
131 } |
129 |
132 |
130 static PLAB* gclab(Thread* thread) { |
133 static PLAB* gclab(Thread* thread) { |
131 return data(thread)->_gclab; |
134 return data(thread)->_gclab; |
132 } |
135 } |
135 return data(thread)->_gclab_size; |
138 return data(thread)->_gclab_size; |
136 } |
139 } |
137 |
140 |
138 static void set_gclab_size(Thread* thread, size_t v) { |
141 static void set_gclab_size(Thread* thread, size_t v) { |
139 data(thread)->_gclab_size = v; |
142 data(thread)->_gclab_size = v; |
|
143 } |
|
144 |
|
145 static void set_disarmed_value(Thread* thread, int value) { |
|
146 data(thread)->_disarmed_value = value; |
140 } |
147 } |
141 |
148 |
142 #ifdef ASSERT |
149 #ifdef ASSERT |
143 static void set_evac_allowed(Thread* thread, bool evac_allowed) { |
150 static void set_evac_allowed(Thread* thread, bool evac_allowed) { |
144 if (evac_allowed) { |
151 if (evac_allowed) { |
168 |
175 |
169 static ByteSize gc_state_offset() { |
176 static ByteSize gc_state_offset() { |
170 return Thread::gc_data_offset() + byte_offset_of(ShenandoahThreadLocalData, _gc_state); |
177 return Thread::gc_data_offset() + byte_offset_of(ShenandoahThreadLocalData, _gc_state); |
171 } |
178 } |
172 |
179 |
|
180 static ByteSize disarmed_value_offset() { |
|
181 return Thread::gc_data_offset() + byte_offset_of(ShenandoahThreadLocalData, _disarmed_value); |
|
182 } |
173 }; |
183 }; |
174 |
184 |
175 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |
185 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHTHREADLOCALDATA_HPP |