203 def(SATB_Q_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never); 204 def(SATB_Q_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never); 205 def(Shared_SATB_Q_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never); 206 207 def(DirtyCardQ_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never); 208 def(DirtyCardQ_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never); 209 def(Shared_DirtyCardQ_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never); 210 211 def(FreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 212 def(OldSets_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 213 def(RootRegionScan_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never); 214 215 def(StringDedupQueue_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never); 216 def(StringDedupTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 217 218 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 219 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 220 221 def(MonitoringSupport_lock , PaddedMutex , native , true, Monitor::_safepoint_check_never); // used for serviceability monitoring support 222 } 223 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_sometimes); 224 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 225 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_sometimes); 226 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 227 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 228 def(OopMapCacheAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for oop_map_cache allocation. 229 230 def(MetaspaceExpand_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); 231 def(ClassLoaderDataGraph_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 232 233 def(Patching_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); // used for safepointing and code patching. 234 def(Service_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // used for service thread operations 235 def(JmethodIdCreation_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for creating jmethodIDs. 236 237 def(SystemDictionary_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread 238 def(SharedDictionary_lock , PaddedMutex, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread 239 def(Module_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_always); 240 def(InlineCacheBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); 241 def(VMStatistic_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); 242 def(ExpandHeap_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // Used during compilation by VM thread 243 def(JNIHandleBlockFreeList_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); // handles are used by VM thread 244 def(SignatureHandlerLibrary_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); 245 def(SymbolArena_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_never); 247 def(ProfilePrint_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing 248 def(ExceptionCache_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing 249 def(OsrList_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 250 def(Debug1_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 251 #ifndef PRODUCT 252 def(FullGCALot_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // a lock to make FullGCALot MT safe 253 #endif 254 def(BeforeExit_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); 255 def(PerfDataMemAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for allocating PerfData memory for performance data 256 def(PerfDataManager_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for synchronized access to PerfDataManager resources 257 258 // CMS_modUnionTable_lock leaf 259 // CMS_bitMap_lock leaf 1 260 // CMS_freeList_lock leaf 2 261 262 def(Safepoint_lock , PaddedMonitor, safepoint, true, Monitor::_safepoint_check_sometimes); // locks SnippetCache_lock/Threads_lock 263 264 def(Threads_lock , PaddedMonitor, barrier, true, Monitor::_safepoint_check_sometimes); 265 def(NonJavaThreadsList_lock , PaddedMutex, leaf, true, Monitor::_safepoint_check_never); 266 267 def(VMOperationQueue_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_sometimes); // VM_thread allowed to block on these 268 def(VMOperationRequest_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_sometimes); 269 def(RetData_lock , PaddedMutex , nonleaf, false, Monitor::_safepoint_check_always); 270 def(Terminator_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_sometimes); 271 def(VtableStubs_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 272 def(Notify_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); 273 def(JNIGlobalAlloc_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_never); 274 def(JNIGlobalActive_lock , PaddedMutex , nonleaf-1, true, Monitor::_safepoint_check_never); 275 def(JNIWeakAlloc_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_never); 276 def(JNIWeakActive_lock , PaddedMutex , nonleaf-1, true, Monitor::_safepoint_check_never); 277 def(JNICritical_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); // used for JNI critical regions 278 def(AdapterHandlerLibrary_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 279 280 def(Heap_lock , PaddedMonitor, nonleaf+1, false, Monitor::_safepoint_check_sometimes); 281 def(JfieldIdCreation_lock , PaddedMutex , nonleaf+1, true, Monitor::_safepoint_check_always); // jfieldID, Used in VM_Operation 282 def(ResolvedMethodTable_lock , PaddedMutex , nonleaf+1, false, Monitor::_safepoint_check_always); // Used to protect ResolvedMethodTable 283 284 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock 285 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always); 286 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); 287 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 288 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); 289 290 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController 291 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management 292 293 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_sometimes); 294 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always); 295 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always); 296 297 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always); 298 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never); 299 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never); 300 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always); 301 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_sometimes); 302 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always); 303 304 def(ThreadHeapSampler_lock , PaddedMutex, nonleaf, false, Monitor::_safepoint_check_never); 305 306 if (WhiteBoxAPI) { 307 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never); 308 } 309 310 #if INCLUDE_JFR 311 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); 312 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 313 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint' 314 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_sometimes); 315 #endif 316 317 #ifndef SUPPORTS_NATIVE_CX8 318 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never); 319 #endif 320 321 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 322 } 323 324 GCMutexLocker::GCMutexLocker(Monitor * mutex) { 325 if (SafepointSynchronize::is_at_safepoint()) { 326 _locked = false; 327 } else { 328 _mutex = mutex; 329 _locked = true; 330 _mutex->lock(); 331 } 332 } 333 334 // Print all mutexes/monitors that are currently owned by a thread; called | 203 def(SATB_Q_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never); 204 def(SATB_Q_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never); 205 def(Shared_SATB_Q_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never); 206 207 def(DirtyCardQ_FL_lock , PaddedMutex , access, true, Monitor::_safepoint_check_never); 208 def(DirtyCardQ_CBL_mon , PaddedMonitor, access, true, Monitor::_safepoint_check_never); 209 def(Shared_DirtyCardQ_lock , PaddedMutex , access + 1, true, Monitor::_safepoint_check_never); 210 211 def(FreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 212 def(OldSets_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 213 def(RootRegionScan_lock , PaddedMonitor, leaf , true, Monitor::_safepoint_check_never); 214 215 def(StringDedupQueue_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_never); 216 def(StringDedupTable_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 217 218 def(MarkStackFreeList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 219 def(MarkStackChunkList_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_never); 220 221 def(MonitoringSupport_lock , PaddedMutex , native , true, Monitor::_safepoint_check_never); // used for serviceability monitoring support 222 } 223 def(ParGCRareEvent_lock , PaddedMutex , leaf , true, Monitor::_safepoint_check_always); 224 def(DerivedPointerTableGC_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 225 def(CGCPhaseManager_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_always); 226 def(CodeCache_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 227 def(RawMonitor_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 228 def(OopMapCacheAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for oop_map_cache allocation. 229 230 def(MetaspaceExpand_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); 231 def(ClassLoaderDataGraph_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 232 233 def(Patching_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); // used for safepointing and code patching. 234 def(Service_lock , PaddedMonitor, special, true, Monitor::_safepoint_check_never); // used for service thread operations 235 def(JmethodIdCreation_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for creating jmethodIDs. 236 237 def(SystemDictionary_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread 238 def(SharedDictionary_lock , PaddedMutex, leaf, true, Monitor::_safepoint_check_always); // lookups done by VM thread 239 def(Module_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_always); 240 def(InlineCacheBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); 241 def(VMStatistic_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); 242 def(ExpandHeap_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // Used during compilation by VM thread 243 def(JNIHandleBlockFreeList_lock , PaddedMutex , leaf-1, true, Monitor::_safepoint_check_never); // handles are used by VM thread 244 def(SignatureHandlerLibrary_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); 245 def(SymbolArena_lock , PaddedMutex , leaf+2, true, Monitor::_safepoint_check_never); 247 def(ProfilePrint_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing 248 def(ExceptionCache_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // serial profile printing 249 def(OsrList_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 250 def(Debug1_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 251 #ifndef PRODUCT 252 def(FullGCALot_lock , PaddedMutex , leaf, false, Monitor::_safepoint_check_always); // a lock to make FullGCALot MT safe 253 #endif 254 def(BeforeExit_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); 255 def(PerfDataMemAlloc_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for allocating PerfData memory for performance data 256 def(PerfDataManager_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_always); // used for synchronized access to PerfDataManager resources 257 258 // CMS_modUnionTable_lock leaf 259 // CMS_bitMap_lock leaf 1 260 // CMS_freeList_lock leaf 2 261 262 def(Safepoint_lock , PaddedMonitor, safepoint, true, Monitor::_safepoint_check_sometimes); // locks SnippetCache_lock/Threads_lock 263 264 def(Threads_lock , PaddedMonitor, barrier, true, Monitor::_safepoint_check_sometimes); 265 def(NonJavaThreadsList_lock , PaddedMutex, leaf, true, Monitor::_safepoint_check_never); 266 267 def(VMOperationQueue_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); // VM_thread allowed to block on these 268 def(VMOperationRequest_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); 269 def(RetData_lock , PaddedMutex , nonleaf, false, Monitor::_safepoint_check_always); 270 def(Terminator_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); 271 def(VtableStubs_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 272 def(Notify_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); 273 def(JNIGlobalAlloc_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_never); 274 def(JNIGlobalActive_lock , PaddedMutex , nonleaf-1, true, Monitor::_safepoint_check_never); 275 def(JNIWeakAlloc_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_never); 276 def(JNIWeakActive_lock , PaddedMutex , nonleaf-1, true, Monitor::_safepoint_check_never); 277 def(JNICritical_lock , PaddedMonitor, nonleaf, true, Monitor::_safepoint_check_always); // used for JNI critical regions 278 def(AdapterHandlerLibrary_lock , PaddedMutex , nonleaf, true, Monitor::_safepoint_check_always); 279 280 def(Heap_lock , PaddedMonitor, nonleaf+1, false, Monitor::_safepoint_check_always); 281 def(JfieldIdCreation_lock , PaddedMutex , nonleaf+1, true, Monitor::_safepoint_check_always); // jfieldID, Used in VM_Operation 282 def(ResolvedMethodTable_lock , PaddedMutex , nonleaf+1, false, Monitor::_safepoint_check_always); // Used to protect ResolvedMethodTable 283 284 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // locks VtableStubs_lock, InlineCacheBuffer_lock 285 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, Monitor::_safepoint_check_always); 286 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); 287 def(DirectivesStack_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 288 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); 289 290 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController 291 def(Management_lock , PaddedMutex , nonleaf+2, false, Monitor::_safepoint_check_always); // used for JVM management 292 293 def(Compile_lock , PaddedMutex , nonleaf+3, true, Monitor::_safepoint_check_always); 294 def(MethodData_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always); 295 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, Monitor::_safepoint_check_always); 296 297 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, true, Monitor::_safepoint_check_always); 298 def(Debug2_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never); 299 def(Debug3_lock , PaddedMutex , nonleaf+4, true, Monitor::_safepoint_check_never); 300 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, Monitor::_safepoint_check_always); 301 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always); 302 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, Monitor::_safepoint_check_always); 303 304 def(ThreadHeapSampler_lock , PaddedMutex, nonleaf, false, Monitor::_safepoint_check_never); 305 306 if (WhiteBoxAPI) { 307 def(Compilation_lock , PaddedMonitor, leaf, false, Monitor::_safepoint_check_never); 308 } 309 310 #if INCLUDE_JFR 311 def(JfrMsg_lock , PaddedMonitor, leaf, true, Monitor::_safepoint_check_always); 312 def(JfrBuffer_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 313 def(JfrStream_lock , PaddedMutex , leaf+1, true, Monitor::_safepoint_check_never); // ensure to rank lower than 'safepoint' 314 def(JfrStacktrace_lock , PaddedMutex , special, true, Monitor::_safepoint_check_never); 315 #endif 316 317 #ifndef SUPPORTS_NATIVE_CX8 318 def(UnsafeJlong_lock , PaddedMutex , special, false, Monitor::_safepoint_check_never); 319 #endif 320 321 def(CodeHeapStateAnalytics_lock , PaddedMutex , leaf, true, Monitor::_safepoint_check_never); 322 } 323 324 GCMutexLocker::GCMutexLocker(Monitor * mutex) { 325 if (SafepointSynchronize::is_at_safepoint()) { 326 _locked = false; 327 } else { 328 _mutex = mutex; 329 _locked = true; 330 _mutex->lock(); 331 } 332 } 333 334 // Print all mutexes/monitors that are currently owned by a thread; called |