< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Mark.java

Print this page
*** 49,22 ***
--- 49,28 ---
  
      ageBits             = db.lookupLongConstant("markWord::age_bits").longValue();
      lockBits            = db.lookupLongConstant("markWord::lock_bits").longValue();
      maxHashBits         = db.lookupLongConstant("markWord::max_hash_bits").longValue();
      hashBits            = db.lookupLongConstant("markWord::hash_bits").longValue();
+     hashCtrlBits        = db.lookupLongConstant("markWord::hashctrl_bits").longValue();
      lockShift           = db.lookupLongConstant("markWord::lock_shift").longValue();
      ageShift            = db.lookupLongConstant("markWord::age_shift").longValue();
      hashShift           = db.lookupLongConstant("markWord::hash_shift").longValue();
+     hashCtrlShift       = db.lookupLongConstant("markWord::hashctrl_shift").longValue();
      if (VM.getVM().isLP64()) {
        klassShift          = db.lookupLongConstant("markWord::klass_shift").longValue();
      }
      lockMask            = db.lookupLongConstant("markWord::lock_mask").longValue();
      lockMaskInPlace     = db.lookupLongConstant("markWord::lock_mask_in_place").longValue();
      ageMask             = db.lookupLongConstant("markWord::age_mask").longValue();
      ageMaskInPlace      = db.lookupLongConstant("markWord::age_mask_in_place").longValue();
      hashMask            = db.lookupLongConstant("markWord::hash_mask").longValue();
      hashMaskInPlace     = db.lookupLongConstant("markWord::hash_mask_in_place").longValue();
+     hashCtrlMask        = db.lookupLongConstant("markWord::hashctrl_mask").longValue();
+     hashCtrlMaskInPlace = db.lookupLongConstant("markWord::hashctrl_mask_in_place").longValue();
+     hashCtrlHashedMaskInPlace =   db.lookupLongConstant("markWord::hashctrl_hashed_mask_in_place").longValue();
+     hashCtrlExpandedMaskInPlace = db.lookupLongConstant("markWord::hashctrl_expanded_mask_in_place").longValue();
      lockedValue         = db.lookupLongConstant("markWord::locked_value").longValue();
      unlockedValue       = db.lookupLongConstant("markWord::unlocked_value").longValue();
      monitorValue        = db.lookupLongConstant("markWord::monitor_value").longValue();
      markedValue         = db.lookupLongConstant("markWord::marked_value").longValue();
      noHash              = db.lookupLongConstant("markWord::no_hash").longValue();

*** 79,22 ***
--- 85,28 ---
    // Constants -- read from VM
    private static long ageBits;
    private static long lockBits;
    private static long maxHashBits;
    private static long hashBits;
+   private static long hashCtrlBits;
  
    private static long lockShift;
    private static long ageShift;
    private static long hashShift;
+   private static long hashCtrlShift;
    private static long klassShift;
  
    private static long lockMask;
    private static long lockMaskInPlace;
    private static long ageMask;
    private static long ageMaskInPlace;
    private static long hashMask;
    private static long hashMaskInPlace;
+   private static long hashCtrlMask;
+   private static long hashCtrlMaskInPlace;
+   private static long hashCtrlHashedMaskInPlace;
+   private static long hashCtrlExpandedMaskInPlace;
  
    private static long lockedValue;
    private static long unlockedValue;
    private static long monitorValue;
    private static long markedValue;

*** 190,17 ***
    }
    public int age() { return (int) Bits.maskBitsLong(value() >> ageShift, ageMask); }
  
    // hash operations
    public long hash() {
!     return Bits.maskBitsLong(value() >> hashShift, hashMask);
    }
  
    public boolean hasNoHash() {
      return hash() == noHash;
    }
  
    public Klass getKlass() {
      assert(VM.getVM().isCompactObjectHeadersEnabled());
      return (Klass)Metadata.instantiateWrapperFor(addr.getCompKlassAddressAt(0));
    }
  
--- 202,27 ---
    }
    public int age() { return (int) Bits.maskBitsLong(value() >> ageShift, ageMask); }
  
    // hash operations
    public long hash() {
!     if (VM.getVM().isCompactObjectHeadersEnabled()) {
+       System.exit(-23);
+       throw new RuntimeException("Compact I-Hash not yet implemented");
+     } else {
+       return Bits.maskBitsLong(value() >> hashShift, hashMask);
+     }
    }
  
    public boolean hasNoHash() {
      return hash() == noHash;
    }
  
+   public boolean isExpanded() {
+     assert(VM.getVM().isCompactObjectHeadersEnabled());
+     return Bits.maskBitsLong(value(), hashCtrlExpandedMaskInPlace) != 0;
+   }
+ 
    public Klass getKlass() {
      assert(VM.getVM().isCompactObjectHeadersEnabled());
      return (Klass)Metadata.instantiateWrapperFor(addr.getCompKlassAddressAt(0));
    }
  
< prev index next >