< prev index next >

src/hotspot/share/runtime/lockStack.hpp

Print this page
@@ -30,14 +30,16 @@
  #include "oops/oopsHierarchy.hpp"
  #include "utilities/globalDefinitions.hpp"
  #include "utilities/sizes.hpp"
  
  class JavaThread;
+ class ObjectMonitor;
  class OopClosure;
  class outputStream;
  template<typename>
  class GrowableArray;
+ class Thread;
  
  class LockStack {
    friend class LockStackTest;
    friend class VMStructs;
    JVMCI_ONLY(friend class JVMCIVMStructs;)

@@ -81,10 +83,13 @@
  
    // The boundary indicies of the lock-stack.
    static uint32_t start_offset();
    static uint32_t end_offset();
  
+   // Return true if we have room to push n oops onto this lock-stack, false otherwise.
+   inline bool can_push(int n = 1) const;
+ 
    // Returns true if the lock-stack is full. False otherwise.
    inline bool is_full() const;
  
    // Pushes an oop on this lock-stack.
    inline void push(oop o);

@@ -94,10 +99,13 @@
    inline oop bottom() const;
  
    // Is the lock-stack empty.
    inline bool is_empty() const;
  
+   // Get the oldest oop in the stack
+   inline oop top();
+ 
    // Check if object is recursive.
    // Precondition: This lock-stack must contain the oop.
    inline bool is_recursive(oop o) const;
  
    // Try recursive enter.

@@ -124,6 +132,31 @@
  
    // Verify Lock Stack consistent with lock order
    void verify_consistent_lock_order(GrowableArray<oop>& lock_order, bool leaf_frame) const NOT_DEBUG_RETURN;
  };
  
+ class OMCache {
+   friend class VMStructs;
+ public:
+   static constexpr int CAPACITY = 8;
+ 
+ private:
+   struct OMCacheEntry {
+     oop _oop = nullptr;
+     ObjectMonitor* _monitor = nullptr;
+   } _entries[CAPACITY];
+   const oop _null_sentinel = nullptr;
+ 
+ public:
+   static ByteSize entries() { return byte_offset_of(OMCache, _entries); }
+   static constexpr ByteSize oop_to_oop_difference() { return in_ByteSize(sizeof(OMCacheEntry)); }
+   static constexpr ByteSize oop_to_monitor_difference() { return in_ByteSize(sizeof(oop)); }
+ 
+   explicit OMCache(JavaThread* jt);
+ 
+   inline ObjectMonitor* get_monitor(oop o);
+   inline void set_monitor(ObjectMonitor* monitor);
+   inline void clear();
+ 
+ };
+ 
  #endif // SHARE_RUNTIME_LOCKSTACK_HPP
< prev index next >