35 // Note that the following pointers are effectively final -- after having been
36 // set at JVM startup-time, they should never be subsequently mutated.
37 // Instead of using pointers to malloc()ed monitors and mutexes we should consider
38 // eliminating the indirection and using instances instead.
39 // Consider using GCC's __read_mostly.
40
41 Mutex* Patching_lock = NULL;
42 Mutex* CompiledMethod_lock = NULL;
43 Monitor* SystemDictionary_lock = NULL;
44 Mutex* ProtectionDomainSet_lock = NULL;
45 Mutex* SharedDictionary_lock = NULL;
46 Mutex* Module_lock = NULL;
47 Mutex* CompiledIC_lock = NULL;
48 Mutex* InlineCacheBuffer_lock = NULL;
49 Mutex* VMStatistic_lock = NULL;
50 Mutex* JNIHandleBlockFreeList_lock = NULL;
51 Mutex* JmethodIdCreation_lock = NULL;
52 Mutex* JfieldIdCreation_lock = NULL;
53 Monitor* JNICritical_lock = NULL;
54 Mutex* JvmtiThreadState_lock = NULL;
55 Monitor* Heap_lock = NULL;
56 Mutex* ExpandHeap_lock = NULL;
57 Mutex* AdapterHandlerLibrary_lock = NULL;
58 Mutex* SignatureHandlerLibrary_lock = NULL;
59 Mutex* VtableStubs_lock = NULL;
60 Mutex* SymbolArena_lock = NULL;
61 Monitor* StringDedupQueue_lock = NULL;
62 Mutex* StringDedupTable_lock = NULL;
63 Monitor* CodeCache_lock = NULL;
64 Monitor* CodeSweeper_lock = NULL;
65 Mutex* MethodData_lock = NULL;
66 Mutex* TouchedMethodLog_lock = NULL;
67 Mutex* RetData_lock = NULL;
68 Monitor* VMOperationQueue_lock = NULL;
69 Monitor* VMOperationRequest_lock = NULL;
70 Monitor* Threads_lock = NULL;
71 Mutex* NonJavaThreadsList_lock = NULL;
72 Mutex* NonJavaThreadsListSync_lock = NULL;
73 Monitor* CGC_lock = NULL;
74 Monitor* STS_lock = NULL;
283 def(VMOperationQueue_lock , PaddedMonitor, nonleaf, true, _safepoint_check_never); // VM_thread allowed to block on these
284 def(VMOperationRequest_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
285 def(RetData_lock , PaddedMutex , nonleaf, false, _safepoint_check_always);
286 def(Terminator_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
287 def(InitCompleted_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
288 def(VtableStubs_lock , PaddedMutex , nonleaf, true, _safepoint_check_never);
289 def(Notify_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
290 def(JNICritical_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always); // used for JNI critical regions
291 def(AdapterHandlerLibrary_lock , PaddedMutex , nonleaf, true, _safepoint_check_always);
292
293 def(Heap_lock , PaddedMonitor, nonleaf+1, false, _safepoint_check_sometimes); // Doesn't safepoint check during termination.
294 def(JfieldIdCreation_lock , PaddedMutex , nonleaf+1, true, _safepoint_check_always); // jfieldID, Used in VM_Operation
295
296 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_never); // locks VtableStubs_lock, InlineCacheBuffer_lock
297 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, _safepoint_check_always);
298 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always);
299 def(DirectivesStack_lock , PaddedMutex , special, true, _safepoint_check_never);
300 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always);
301
302 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
303 def(Management_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always); // used for JVM management
304
305 def(ConcurrentGCBreakpoints_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
306 def(Compile_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
307 def(MethodData_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
308 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
309
310 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, false, _safepoint_check_always);
311 def(Debug2_lock , PaddedMutex , nonleaf+4, true, _safepoint_check_never);
312 def(Debug3_lock , PaddedMutex , nonleaf+4, true, _safepoint_check_never);
313 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, _safepoint_check_always);
314 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, _safepoint_check_always);
315 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, _safepoint_check_always);
316 def(Verify_lock , PaddedMutex, nonleaf+5, true, _safepoint_check_always);
317 def(Zip_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
318
319 if (WhiteBoxAPI) {
320 def(Compilation_lock , PaddedMonitor, leaf, false, _safepoint_check_never);
321 }
322
|
35 // Note that the following pointers are effectively final -- after having been
36 // set at JVM startup-time, they should never be subsequently mutated.
37 // Instead of using pointers to malloc()ed monitors and mutexes we should consider
38 // eliminating the indirection and using instances instead.
39 // Consider using GCC's __read_mostly.
40
41 Mutex* Patching_lock = NULL;
42 Mutex* CompiledMethod_lock = NULL;
43 Monitor* SystemDictionary_lock = NULL;
44 Mutex* ProtectionDomainSet_lock = NULL;
45 Mutex* SharedDictionary_lock = NULL;
46 Mutex* Module_lock = NULL;
47 Mutex* CompiledIC_lock = NULL;
48 Mutex* InlineCacheBuffer_lock = NULL;
49 Mutex* VMStatistic_lock = NULL;
50 Mutex* JNIHandleBlockFreeList_lock = NULL;
51 Mutex* JmethodIdCreation_lock = NULL;
52 Mutex* JfieldIdCreation_lock = NULL;
53 Monitor* JNICritical_lock = NULL;
54 Mutex* JvmtiThreadState_lock = NULL;
55 Monitor* EscapeBarrier_lock = NULL;
56 Monitor* Heap_lock = NULL;
57 Mutex* ExpandHeap_lock = NULL;
58 Mutex* AdapterHandlerLibrary_lock = NULL;
59 Mutex* SignatureHandlerLibrary_lock = NULL;
60 Mutex* VtableStubs_lock = NULL;
61 Mutex* SymbolArena_lock = NULL;
62 Monitor* StringDedupQueue_lock = NULL;
63 Mutex* StringDedupTable_lock = NULL;
64 Monitor* CodeCache_lock = NULL;
65 Monitor* CodeSweeper_lock = NULL;
66 Mutex* MethodData_lock = NULL;
67 Mutex* TouchedMethodLog_lock = NULL;
68 Mutex* RetData_lock = NULL;
69 Monitor* VMOperationQueue_lock = NULL;
70 Monitor* VMOperationRequest_lock = NULL;
71 Monitor* Threads_lock = NULL;
72 Mutex* NonJavaThreadsList_lock = NULL;
73 Mutex* NonJavaThreadsListSync_lock = NULL;
74 Monitor* CGC_lock = NULL;
75 Monitor* STS_lock = NULL;
284 def(VMOperationQueue_lock , PaddedMonitor, nonleaf, true, _safepoint_check_never); // VM_thread allowed to block on these
285 def(VMOperationRequest_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
286 def(RetData_lock , PaddedMutex , nonleaf, false, _safepoint_check_always);
287 def(Terminator_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
288 def(InitCompleted_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
289 def(VtableStubs_lock , PaddedMutex , nonleaf, true, _safepoint_check_never);
290 def(Notify_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
291 def(JNICritical_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always); // used for JNI critical regions
292 def(AdapterHandlerLibrary_lock , PaddedMutex , nonleaf, true, _safepoint_check_always);
293
294 def(Heap_lock , PaddedMonitor, nonleaf+1, false, _safepoint_check_sometimes); // Doesn't safepoint check during termination.
295 def(JfieldIdCreation_lock , PaddedMutex , nonleaf+1, true, _safepoint_check_always); // jfieldID, Used in VM_Operation
296
297 def(CompiledIC_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_never); // locks VtableStubs_lock, InlineCacheBuffer_lock
298 def(CompileTaskAlloc_lock , PaddedMutex , nonleaf+2, true, _safepoint_check_always);
299 def(CompileStatistics_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always);
300 def(DirectivesStack_lock , PaddedMutex , special, true, _safepoint_check_never);
301 def(MultiArray_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always);
302
303 def(JvmtiThreadState_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always); // Used by JvmtiThreadState/JvmtiEventController
304 def(EscapeBarrier_lock , PaddedMonitor, leaf, false, _safepoint_check_never); // Used to synchronize object reallocation/relocking triggered by JVMTI
305 def(Management_lock , PaddedMutex , nonleaf+2, false, _safepoint_check_always); // used for JVM management
306
307 def(ConcurrentGCBreakpoints_lock , PaddedMonitor, nonleaf, true, _safepoint_check_always);
308 def(Compile_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
309 def(MethodData_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
310 def(TouchedMethodLog_lock , PaddedMutex , nonleaf+3, false, _safepoint_check_always);
311
312 def(MethodCompileQueue_lock , PaddedMonitor, nonleaf+4, false, _safepoint_check_always);
313 def(Debug2_lock , PaddedMutex , nonleaf+4, true, _safepoint_check_never);
314 def(Debug3_lock , PaddedMutex , nonleaf+4, true, _safepoint_check_never);
315 def(CompileThread_lock , PaddedMonitor, nonleaf+5, false, _safepoint_check_always);
316 def(PeriodicTask_lock , PaddedMonitor, nonleaf+5, true, _safepoint_check_always);
317 def(RedefineClasses_lock , PaddedMonitor, nonleaf+5, true, _safepoint_check_always);
318 def(Verify_lock , PaddedMutex, nonleaf+5, true, _safepoint_check_always);
319 def(Zip_lock , PaddedMonitor, leaf, true, _safepoint_check_never);
320
321 if (WhiteBoxAPI) {
322 def(Compilation_lock , PaddedMonitor, leaf, false, _safepoint_check_never);
323 }
324
|