< prev index next >

src/hotspot/share/runtime/mutexLocker.cpp

Print this page
rev 60137 : 8227745: Enable Escape Analysis for Better Performance in the Presence of JVMTI Agents
Reviewed-by: mdoerr, goetz


  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 


< prev index next >