src/hotspot/share/gc/shenandoah/shenandoahThreadLocalData.hpp
changeset 59296 9186be5c78ba
parent 53953 235b0e817c32
equal deleted inserted replaced
59295:8b6cc0bb93d0 59296:9186be5c78ba
    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