164 }
165 #endif
166
167 #define def(var, type, pri, vm_block, safepoint_check_allowed ) { \
168 var = new type(Mutex::pri, #var, vm_block, safepoint_check_allowed); \
169 assert(_num_mutex < MAX_NUM_MUTEX, "increase MAX_NUM_MUTEX"); \
170 _mutex_array[_num_mutex++] = var; \
171 }
172
173 // Using Padded subclasses to prevent false sharing of these global monitors and mutexes.
174 void mutex_init() {
175 def(tty_lock , PaddedMutex , event, true, Monitor::_safepoint_check_never); // allow to lock in VM
176
177 def(CGC_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // coordinate between fore- and background GC
178 def(STS_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);
179
180 if (UseConcMarkSweepGC || UseG1GC) {
181 def(FullGCCount_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never); // in support of ExplicitGCInvokesConcurrent
182 }
183 if (UseG1GC) {
184
185 def(SATB_Q_FL_lock , PaddedMutex , special , true, Monitor::_safepoint_check_never);
186 def(SATB_Q_CBL_mon , PaddedMonitor, leaf - 1 , true, Monitor::_safepoint_check_never);
187 def(Shared_SATB_Q_lock , PaddedMutex , leaf - 1 , true, Monitor::_safepoint_check_never);
188
189 def(DirtyCardQ_FL_lock , PaddedMutex , special , true, Monitor::_safepoint_check_never);
190 def(DirtyCardQ_CBL_mon , PaddedMonitor, leaf - 1 , true, Monitor::_safepoint_check_never);
191 def(Shared_DirtyCardQ_lock , PaddedMutex , leaf - 1 , true, Monitor::_safepoint_check_never);
192
193 def(FreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
194 def(SecondaryFreeList_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never);
195 def(OldSets_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
196 def(RootRegionScan_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never);
197 def(MMUTracker_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
198
199 def(StringDedupQueue_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);
200 def(StringDedupTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
201
202 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
203 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
204 }
205 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes);
206 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
207 #ifdef INCLUDE_ALL_GCS
208 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes);
209 #endif
210 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
211 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
|
164 }
165 #endif
166
167 #define def(var, type, pri, vm_block, safepoint_check_allowed ) { \
168 var = new type(Mutex::pri, #var, vm_block, safepoint_check_allowed); \
169 assert(_num_mutex < MAX_NUM_MUTEX, "increase MAX_NUM_MUTEX"); \
170 _mutex_array[_num_mutex++] = var; \
171 }
172
173 // Using Padded subclasses to prevent false sharing of these global monitors and mutexes.
174 void mutex_init() {
175 def(tty_lock , PaddedMutex , event, true, Monitor::_safepoint_check_never); // allow to lock in VM
176
177 def(CGC_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // coordinate between fore- and background GC
178 def(STS_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);
179
180 if (UseConcMarkSweepGC || UseG1GC) {
181 def(FullGCCount_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never); // in support of ExplicitGCInvokesConcurrent
182 }
183 if (UseG1GC) {
184 def(SATB_Q_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never);
185 def(SATB_Q_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never);
186 def(Shared_SATB_Q_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never);
187
188 def(DirtyCardQ_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never);
189 def(DirtyCardQ_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never);
190 def(Shared_DirtyCardQ_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never);
191
192 def(FreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
193 def(SecondaryFreeList_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never);
194 def(OldSets_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
195 def(RootRegionScan_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never);
196 def(MMUTracker_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
197
198 def(StringDedupQueue_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never);
199 def(StringDedupTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
200
201 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
202 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never);
203 }
204 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes);
205 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never);
206 #ifdef INCLUDE_ALL_GCS
207 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes);
208 #endif
209 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
210 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never);
|