< prev index next >

src/hotspot/share/runtime/mutexLocker.cpp

Print this page




  31 
  32 // Mutexes used in the VM (see comment in mutexLocker.hpp):
  33 //
  34 // Note that the following pointers are effectively final -- after having been
  35 // set at JVM startup-time, they should never be subsequently mutated.
  36 // Instead of using pointers to malloc()ed monitors and mutexes we should consider
  37 // eliminating the indirection and using instances instead.
  38 // Consider using GCC's __read_mostly.
  39 
  40 Mutex*   Patching_lock                = NULL;
  41 Monitor* SystemDictionary_lock        = NULL;
  42 Mutex*   Module_lock                  = NULL;
  43 Mutex*   CompiledIC_lock              = NULL;
  44 Mutex*   InlineCacheBuffer_lock       = NULL;
  45 Mutex*   VMStatistic_lock             = NULL;
  46 Mutex*   JNIGlobalAlloc_lock          = NULL;
  47 Mutex*   JNIGlobalActive_lock         = NULL;
  48 Mutex*   JNIWeakAlloc_lock            = NULL;
  49 Mutex*   JNIWeakActive_lock           = NULL;
  50 Mutex*   JNIHandleBlockFreeList_lock  = NULL;


  51 Mutex*   ResolvedMethodTable_lock     = NULL;
  52 Mutex*   JmethodIdCreation_lock       = NULL;
  53 Mutex*   JfieldIdCreation_lock        = NULL;
  54 Monitor* JNICritical_lock             = NULL;
  55 Mutex*   JvmtiThreadState_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*   SymbolTable_lock             = NULL;
  62 Mutex*   StringTable_lock             = NULL;
  63 Monitor* StringDedupQueue_lock        = NULL;
  64 Mutex*   StringDedupTable_lock        = NULL;
  65 Monitor* CodeCache_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;


 244 
 245   def(Safepoint_lock               , PaddedMonitor, safepoint,   true,  Monitor::_safepoint_check_sometimes);  // locks SnippetCache_lock/Threads_lock
 246 
 247   def(Threads_lock                 , PaddedMonitor, barrier,     true,  Monitor::_safepoint_check_sometimes);
 248 
 249   def(VMOperationQueue_lock        , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);  // VM_thread allowed to block on these
 250   def(VMOperationRequest_lock      , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);
 251   def(RetData_lock                 , PaddedMutex  , nonleaf,     false, Monitor::_safepoint_check_always);
 252   def(Terminator_lock              , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);
 253   def(VtableStubs_lock             , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_always);
 254   def(Notify_lock                  , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_always);
 255   // OopStorage-based JNI may lock the alloc_locks while releasing a handle,
 256   // while previous JNI didn't need a lock for handle release.  This runs afoul
 257   // of some places which hold other locks while releasing a handle, including
 258   // the Patching_lock, which is of "special" rank.  As a temporary workaround,
 259   // lower the JNI oopstorage lock ranks to make them super-special.
 260   def(JNIGlobalAlloc_lock          , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_never);
 261   def(JNIGlobalActive_lock         , PaddedMutex  , nonleaf-1,   true,  Monitor::_safepoint_check_never);
 262   def(JNIWeakAlloc_lock            , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_never);
 263   def(JNIWeakActive_lock           , PaddedMutex  , nonleaf-1,   true,  Monitor::_safepoint_check_never);


 264   def(JNICritical_lock             , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_always);     // used for JNI critical regions
 265   def(AdapterHandlerLibrary_lock   , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_always);
 266 
 267   def(Heap_lock                    , PaddedMonitor, nonleaf+1,   false, Monitor::_safepoint_check_sometimes);
 268   def(JfieldIdCreation_lock        , PaddedMutex  , nonleaf+1,   true,  Monitor::_safepoint_check_always);     // jfieldID, Used in VM_Operation
 269   def(ResolvedMethodTable_lock     , PaddedMutex  , nonleaf+1,   false, Monitor::_safepoint_check_always);     // Used to protect ResolvedMethodTable
 270 
 271   def(CompiledIC_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // locks VtableStubs_lock, InlineCacheBuffer_lock
 272   def(CompileTaskAlloc_lock        , PaddedMutex  , nonleaf+2,   true,  Monitor::_safepoint_check_always);
 273   def(CompileStatistics_lock       , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);
 274   def(DirectivesStack_lock         , PaddedMutex  , special,     true,  Monitor::_safepoint_check_never);
 275   def(MultiArray_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // locks SymbolTable_lock
 276 
 277   def(JvmtiThreadState_lock        , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // Used by JvmtiThreadState/JvmtiEventController
 278   def(Management_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // used for JVM management
 279 
 280   def(Compile_lock                 , PaddedMutex  , nonleaf+3,   true,  Monitor::_safepoint_check_sometimes);
 281   def(MethodData_lock              , PaddedMutex  , nonleaf+3,   false, Monitor::_safepoint_check_always);
 282   def(TouchedMethodLog_lock        , PaddedMutex  , nonleaf+3,   false, Monitor::_safepoint_check_always);
 283 




  31 
  32 // Mutexes used in the VM (see comment in mutexLocker.hpp):
  33 //
  34 // Note that the following pointers are effectively final -- after having been
  35 // set at JVM startup-time, they should never be subsequently mutated.
  36 // Instead of using pointers to malloc()ed monitors and mutexes we should consider
  37 // eliminating the indirection and using instances instead.
  38 // Consider using GCC's __read_mostly.
  39 
  40 Mutex*   Patching_lock                = NULL;
  41 Monitor* SystemDictionary_lock        = NULL;
  42 Mutex*   Module_lock                  = NULL;
  43 Mutex*   CompiledIC_lock              = NULL;
  44 Mutex*   InlineCacheBuffer_lock       = NULL;
  45 Mutex*   VMStatistic_lock             = NULL;
  46 Mutex*   JNIGlobalAlloc_lock          = NULL;
  47 Mutex*   JNIGlobalActive_lock         = NULL;
  48 Mutex*   JNIWeakAlloc_lock            = NULL;
  49 Mutex*   JNIWeakActive_lock           = NULL;
  50 Mutex*   JNIHandleBlockFreeList_lock  = NULL;
  51 Mutex*   VMWeakAlloc_lock             = NULL;
  52 Mutex*   VMWeakActive_lock            = NULL;
  53 Mutex*   ResolvedMethodTable_lock     = NULL;
  54 Mutex*   JmethodIdCreation_lock       = NULL;
  55 Mutex*   JfieldIdCreation_lock        = NULL;
  56 Monitor* JNICritical_lock             = NULL;
  57 Mutex*   JvmtiThreadState_lock        = NULL;
  58 Monitor* Heap_lock                    = NULL;
  59 Mutex*   ExpandHeap_lock              = NULL;
  60 Mutex*   AdapterHandlerLibrary_lock   = NULL;
  61 Mutex*   SignatureHandlerLibrary_lock = NULL;
  62 Mutex*   VtableStubs_lock             = NULL;
  63 Mutex*   SymbolTable_lock             = NULL;
  64 Mutex*   StringTable_lock             = NULL;
  65 Monitor* StringDedupQueue_lock        = NULL;
  66 Mutex*   StringDedupTable_lock        = NULL;
  67 Monitor* CodeCache_lock               = NULL;
  68 Mutex*   MethodData_lock              = NULL;
  69 Mutex*   TouchedMethodLog_lock        = NULL;
  70 Mutex*   RetData_lock                 = NULL;
  71 Monitor* VMOperationQueue_lock        = NULL;
  72 Monitor* VMOperationRequest_lock      = NULL;


 246 
 247   def(Safepoint_lock               , PaddedMonitor, safepoint,   true,  Monitor::_safepoint_check_sometimes);  // locks SnippetCache_lock/Threads_lock
 248 
 249   def(Threads_lock                 , PaddedMonitor, barrier,     true,  Monitor::_safepoint_check_sometimes);
 250 
 251   def(VMOperationQueue_lock        , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);  // VM_thread allowed to block on these
 252   def(VMOperationRequest_lock      , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);
 253   def(RetData_lock                 , PaddedMutex  , nonleaf,     false, Monitor::_safepoint_check_always);
 254   def(Terminator_lock              , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_sometimes);
 255   def(VtableStubs_lock             , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_always);
 256   def(Notify_lock                  , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_always);
 257   // OopStorage-based JNI may lock the alloc_locks while releasing a handle,
 258   // while previous JNI didn't need a lock for handle release.  This runs afoul
 259   // of some places which hold other locks while releasing a handle, including
 260   // the Patching_lock, which is of "special" rank.  As a temporary workaround,
 261   // lower the JNI oopstorage lock ranks to make them super-special.
 262   def(JNIGlobalAlloc_lock          , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_never);
 263   def(JNIGlobalActive_lock         , PaddedMutex  , nonleaf-1,   true,  Monitor::_safepoint_check_never);
 264   def(JNIWeakAlloc_lock            , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_never);
 265   def(JNIWeakActive_lock           , PaddedMutex  , nonleaf-1,   true,  Monitor::_safepoint_check_never);
 266   def(VMWeakAlloc_lock             , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_never);
 267   def(VMWeakActive_lock            , PaddedMutex  , nonleaf-1,   true,  Monitor::_safepoint_check_never);
 268   def(JNICritical_lock             , PaddedMonitor, nonleaf,     true,  Monitor::_safepoint_check_always);     // used for JNI critical regions
 269   def(AdapterHandlerLibrary_lock   , PaddedMutex  , nonleaf,     true,  Monitor::_safepoint_check_always);
 270 
 271   def(Heap_lock                    , PaddedMonitor, nonleaf+1,   false, Monitor::_safepoint_check_sometimes);
 272   def(JfieldIdCreation_lock        , PaddedMutex  , nonleaf+1,   true,  Monitor::_safepoint_check_always);     // jfieldID, Used in VM_Operation
 273   def(ResolvedMethodTable_lock     , PaddedMutex  , nonleaf+1,   false, Monitor::_safepoint_check_always);     // Used to protect ResolvedMethodTable
 274 
 275   def(CompiledIC_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // locks VtableStubs_lock, InlineCacheBuffer_lock
 276   def(CompileTaskAlloc_lock        , PaddedMutex  , nonleaf+2,   true,  Monitor::_safepoint_check_always);
 277   def(CompileStatistics_lock       , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);
 278   def(DirectivesStack_lock         , PaddedMutex  , special,     true,  Monitor::_safepoint_check_never);
 279   def(MultiArray_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // locks SymbolTable_lock
 280 
 281   def(JvmtiThreadState_lock        , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // Used by JvmtiThreadState/JvmtiEventController
 282   def(Management_lock              , PaddedMutex  , nonleaf+2,   false, Monitor::_safepoint_check_always);     // used for JVM management
 283 
 284   def(Compile_lock                 , PaddedMutex  , nonleaf+3,   true,  Monitor::_safepoint_check_sometimes);
 285   def(MethodData_lock              , PaddedMutex  , nonleaf+3,   false, Monitor::_safepoint_check_always);
 286   def(TouchedMethodLog_lock        , PaddedMutex  , nonleaf+3,   false, Monitor::_safepoint_check_always);
 287 


< prev index next >