< prev index next >

src/hotspot/share/runtime/basicLock.hpp

Print this page

29 #include "runtime/atomic.hpp"
30 #include "runtime/handles.hpp"
31 #include "utilities/sizes.hpp"
32 
33 class BasicLock {
34   friend class VMStructs;
35   friend class JVMCIVMStructs;
36  private:
37   // This is either the actual displaced header from a locked object, or
38   // a sentinel zero value indicating a recursive stack-lock.
39   volatile markWord _displaced_header;
40  public:
41   markWord displaced_header() const {
42     return Atomic::load(&_displaced_header);
43   }
44 
45   void set_displaced_header(markWord header) {
46     Atomic::store(&_displaced_header, header);
47   }
48 









49   void print_on(outputStream* st, oop owner) const;
50 
51   // move a basic lock (used during deoptimization)
52   void move_to(oop obj, BasicLock* dest);
53 
54   static int displaced_header_offset_in_bytes() { return (int)offset_of(BasicLock, _displaced_header); }
55 };
56 
57 // A BasicObjectLock associates a specific Java object with a BasicLock.
58 // It is currently embedded in an interpreter frame.
59 
60 // Because some machines have alignment restrictions on the control stack,
61 // the actual space allocated by the interpreter may include padding words
62 // after the end of the BasicObjectLock.  Also, in order to guarantee
63 // alignment of the embedded BasicLock objects on such machines, we
64 // put the embedded BasicLock at the beginning of the struct.
65 
66 class BasicObjectLock {
67   friend class VMStructs;
68  private:

29 #include "runtime/atomic.hpp"
30 #include "runtime/handles.hpp"
31 #include "utilities/sizes.hpp"
32 
33 class BasicLock {
34   friend class VMStructs;
35   friend class JVMCIVMStructs;
36  private:
37   // This is either the actual displaced header from a locked object, or
38   // a sentinel zero value indicating a recursive stack-lock.
39   volatile markWord _displaced_header;
40  public:
41   markWord displaced_header() const {
42     return Atomic::load(&_displaced_header);
43   }
44 
45   void set_displaced_header(markWord header) {
46     Atomic::store(&_displaced_header, header);
47   }
48 
49   // TODO[OMWorld]: Cleanup these names, the storage `_displaced_header` usage depends on the locking mode.
50   void clear_displaced_header() {
51     Atomic::store(&_displaced_header, markWord(0));
52   }
53 
54   void set_displaced_header(ObjectMonitor* mon) {
55     Atomic::store(&_displaced_header, markWord::from_pointer(mon));
56   }
57 
58   void print_on(outputStream* st, oop owner) const;
59 
60   // move a basic lock (used during deoptimization)
61   void move_to(oop obj, BasicLock* dest);
62 
63   static int displaced_header_offset_in_bytes() { return (int)offset_of(BasicLock, _displaced_header); }
64 };
65 
66 // A BasicObjectLock associates a specific Java object with a BasicLock.
67 // It is currently embedded in an interpreter frame.
68 
69 // Because some machines have alignment restrictions on the control stack,
70 // the actual space allocated by the interpreter may include padding words
71 // after the end of the BasicObjectLock.  Also, in order to guarantee
72 // alignment of the embedded BasicLock objects on such machines, we
73 // put the embedded BasicLock at the beginning of the struct.
74 
75 class BasicObjectLock {
76   friend class VMStructs;
77  private:
< prev index next >