< prev index next >

src/hotspot/share/runtime/basicLock.hpp

Print this page

53 };
54 
55 // A BasicObjectLock associates a specific Java object with a BasicLock.
56 // It is currently embedded in an interpreter frame.
57 
58 // Because some machines have alignment restrictions on the control stack,
59 // the actual space allocated by the interpreter may include padding words
60 // after the end of the BasicObjectLock.  Also, in order to guarantee
61 // alignment of the embedded BasicLock objects on such machines, we
62 // put the embedded BasicLock at the beginning of the struct.
63 
64 class BasicObjectLock {
65   friend class VMStructs;
66  private:
67   BasicLock _lock;                                    // the lock, must be double word aligned
68   oop       _obj;                                     // object holds the lock;
69 
70  public:
71   // Manipulation
72   oop      obj() const                                { return _obj;  }

73   void set_obj(oop obj)                               { _obj = obj; }
74   BasicLock* lock()                                   { return &_lock; }
75 
76   // Note: Use frame::interpreter_frame_monitor_size() for the size of BasicObjectLocks
77   //       in interpreter activation frames since it includes machine-specific padding.
78   static int size()                                   { return sizeof(BasicObjectLock)/wordSize; }
79 
80   // GC support
81   void oops_do(OopClosure* f) { f->do_oop(&_obj); }
82 
83   static ByteSize obj_offset()                { return byte_offset_of(BasicObjectLock, _obj);  }
84   static ByteSize lock_offset()               { return byte_offset_of(BasicObjectLock, _lock); }
85 };
86 
87 
88 #endif // SHARE_RUNTIME_BASICLOCK_HPP

53 };
54 
55 // A BasicObjectLock associates a specific Java object with a BasicLock.
56 // It is currently embedded in an interpreter frame.
57 
58 // Because some machines have alignment restrictions on the control stack,
59 // the actual space allocated by the interpreter may include padding words
60 // after the end of the BasicObjectLock.  Also, in order to guarantee
61 // alignment of the embedded BasicLock objects on such machines, we
62 // put the embedded BasicLock at the beginning of the struct.
63 
64 class BasicObjectLock {
65   friend class VMStructs;
66  private:
67   BasicLock _lock;                                    // the lock, must be double word aligned
68   oop       _obj;                                     // object holds the lock;
69 
70  public:
71   // Manipulation
72   oop      obj() const                                { return _obj;  }
73   oop*     obj_adr()                                  { return &_obj; }
74   void set_obj(oop obj)                               { _obj = obj; }
75   BasicLock* lock()                                   { return &_lock; }
76 
77   // Note: Use frame::interpreter_frame_monitor_size() for the size of BasicObjectLocks
78   //       in interpreter activation frames since it includes machine-specific padding.
79   static int size()                                   { return sizeof(BasicObjectLock)/wordSize; }
80 
81   // GC support
82   void oops_do(OopClosure* f) { f->do_oop(&_obj); }
83 
84   static ByteSize obj_offset()                { return byte_offset_of(BasicObjectLock, _obj);  }
85   static ByteSize lock_offset()               { return byte_offset_of(BasicObjectLock, _lock); }
86 };
87 
88 
89 #endif // SHARE_RUNTIME_BASICLOCK_HPP
< prev index next >