hotspot/src/share/vm/runtime/synchronizer.hpp
changeset 5920 8fdbb85e62d3
parent 5712 7e82752d3fdf
child 6975 dc9b63952682
equal deleted inserted replaced
5907:874788e4c176 5920:8fdbb85e62d3
   120   // with original recursion count
   120   // with original recursion count
   121   static intptr_t complete_exit  (Handle obj,                TRAPS);
   121   static intptr_t complete_exit  (Handle obj,                TRAPS);
   122   static void reenter            (Handle obj, intptr_t recursion, TRAPS);
   122   static void reenter            (Handle obj, intptr_t recursion, TRAPS);
   123 
   123 
   124   // thread-specific and global objectMonitor free list accessors
   124   // thread-specific and global objectMonitor free list accessors
       
   125 //  static void verifyInUse (Thread * Self) ; too slow for general assert/debug
   125   static ObjectMonitor * omAlloc (Thread * Self) ;
   126   static ObjectMonitor * omAlloc (Thread * Self) ;
   126   static void omRelease (Thread * Self, ObjectMonitor * m) ;
   127   static void omRelease (Thread * Self, ObjectMonitor * m, bool FromPerThreadAlloc) ;
   127   static void omFlush   (Thread * Self) ;
   128   static void omFlush   (Thread * Self) ;
   128 
   129 
   129   // Inflate light weight monitor to heavy weight monitor
   130   // Inflate light weight monitor to heavy weight monitor
   130   static ObjectMonitor* inflate(Thread * Self, oop obj);
   131   static ObjectMonitor* inflate(Thread * Self, oop obj);
   131   // This version is only for internal use
   132   // This version is only for internal use
   148 
   149 
   149   // GC: we current use aggressive monitor deflation policy
   150   // GC: we current use aggressive monitor deflation policy
   150   // Basically we deflate all monitors that are not busy.
   151   // Basically we deflate all monitors that are not busy.
   151   // An adaptive profile-based deflation policy could be used if needed
   152   // An adaptive profile-based deflation policy could be used if needed
   152   static void deflate_idle_monitors();
   153   static void deflate_idle_monitors();
       
   154   static int walk_monitor_list(ObjectMonitor** listheadp,
       
   155                                ObjectMonitor** FreeHeadp,
       
   156                                ObjectMonitor** FreeTailp);
   153   static bool deflate_monitor(ObjectMonitor* mid, oop obj, ObjectMonitor** FreeHeadp,
   157   static bool deflate_monitor(ObjectMonitor* mid, oop obj, ObjectMonitor** FreeHeadp,
   154                               ObjectMonitor** FreeTailp);
   158                               ObjectMonitor** FreeTailp);
   155   static void oops_do(OopClosure* f);
   159   static void oops_do(OopClosure* f);
   156 
   160 
   157   // debugging
   161   // debugging
   161 
   165 
   162  private:
   166  private:
   163   enum { _BLOCKSIZE = 128 };
   167   enum { _BLOCKSIZE = 128 };
   164   static ObjectMonitor* gBlockList;
   168   static ObjectMonitor* gBlockList;
   165   static ObjectMonitor * volatile gFreeList;
   169   static ObjectMonitor * volatile gFreeList;
       
   170   static ObjectMonitor * volatile gOmInUseList; // for moribund thread, so monitors they inflated still get scanned
       
   171   static int gOmInUseCount;
   166 
   172 
   167  public:
   173  public:
   168   static void Initialize () ;
   174   static void Initialize () ;
   169   static PerfCounter * _sync_ContendedLockAttempts ;
   175   static PerfCounter * _sync_ContendedLockAttempts ;
   170   static PerfCounter * _sync_FutileWakeups ;
   176   static PerfCounter * _sync_FutileWakeups ;