< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddress.java
Print this page
rev 48259 : SA for GC - patch 2
@@ -23,12 +23,31 @@
*/
package sun.jvm.hotspot.gc.z;
import sun.jvm.hotspot.debugger.Address;
+import sun.jvm.hotspot.debugger.OopHandle;
+import sun.jvm.hotspot.runtime.VM;
+import sun.jvm.hotspot.types.TypeDataBase;
+import sun.jvm.hotspot.types.WrongTypeException;
class ZAddress {
+
+ private static long ZAddressWeakBadMask;
+ private static long ZAddressGoodMask;
+ private static long ZAddressOffsetMask;
+
+ static {
+ VM.registerVMInitializedObserver((o, d) -> initialize(VM.getVM().getTypeDataBase()));
+ }
+
+ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
+ ZAddressWeakBadMask = db.lookupLongConstant("ZAddressWeakBadMask").longValue();
+ ZAddressGoodMask = db.lookupLongConstant("ZAddressGoodMask").longValue();
+ ZAddressOffsetMask = db.lookupLongConstant("ZAddressOffsetMask").longValue();
+ }
+
static long as_long(Address value) {
if (value == null) {
return 0;
}
return value.asLongValue();
@@ -37,32 +56,32 @@
static boolean is_null(Address value) {
return value == null;
}
static boolean is_weak_bad(Address value) {
- return (as_long(value) & ZGlobals.ZAddressWeakBadMask()) != 0;
+ return (as_long(value) & ZAddressWeakBadMask) != 0;
}
static boolean is_weak_good(Address value) {
return !is_weak_bad(value) && !is_null(value);
}
static boolean is_weak_good_or_null(Address value) {
return !is_weak_bad(value);
}
- static long offset(Address address) {
- return as_long(address) & ZGlobals.ZAddressOffsetMask;
+ static Address offset(Address address) {
+ return address.andWithMask(ZAddressOffsetMask);
}
- static Address address(long value) {
+ static Address address(Address addr) {
// TODO: Linux-specific - We don't use a heap base on Linux
- return ZOop.to_address(value);
+ return ZOop.to_address(addr);
}
static Address good(Address value) {
- return address(offset(value) | ZGlobals.ZAddressGoodMask());
+ return address(offset(value).orWithMask(ZAddressGoodMask));
}
static Address good_or_null(Address value) {
return is_null(value) ? value : good(value);
}
< prev index next >