< prev index next >

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

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -49,11 +49,11 @@
   public static int LH_ARRAY_TAG_TYPE_VALUE;
   public static int LH_ARRAY_TAG_OBJ_VALUE;
 
   private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
     Type type    = db.lookupType("Klass");
-    javaMirror   = type.getAddressField("_java_mirror");
+    javaMirrorFieldOffset = type.getField("_java_mirror").getOffset();
     superField   = new MetadataField(type.getAddressField("_super"), 0);
     layoutHelper = new IntField(type.getJIntField("_layout_helper"), 0);
     name         = type.getAddressField("_name");
     accessFlags  = new CIntField(type.getCIntegerField("_access_flags"), 0);
     try {

@@ -87,11 +87,11 @@
 
   public boolean isKlass()             { return true; }
   public boolean isArrayKlass()        { return false; }
 
   // Fields
-  private static AddressField   javaMirror;
+  private static long javaMirrorFieldOffset;
   private static MetadataField  superField;
   private static IntField layoutHelper;
   private static AddressField  name;
   private static CIntField accessFlags;
   private static MetadataField  subklass;

@@ -99,27 +99,19 @@
   private static MetadataField  nextLink;
   private static sun.jvm.hotspot.types.Field traceIDField;
   private static CIntField vtableLen;
   private static AddressField classLoaderData;
 
-  private Address getValue(AddressField field) {
-    return addr.getAddressAt(field.getOffset());
-  }
-
   protected Symbol getSymbol(AddressField field) {
     return Symbol.create(addr.getAddressAt(field.getOffset()));
   }
 
   // Accessors for declared fields
   public Instance getJavaMirror() {
-    Address handle = javaMirror.getValue(getAddress());
-    if (handle != null) {
-      // Load through the handle
-      OopHandle refs = handle.getOopHandleAt(0);
-      return (Instance)VM.getVM().getObjectHeap().newOop(refs);
-    }
-    return null;
+    Address addr = getAddress().addOffsetTo(javaMirrorFieldOffset);
+    VMOopHandle vmOopHandle = VMObjectFactory.newObject(VMOopHandle.class, addr);
+    return vmOopHandle.resolve();
   }
   public Klass    getSuper()            { return (Klass)    superField.getValue(this);   }
   public Klass    getJavaSuper()        { return null;  }
   public int      getLayoutHelper()     { return (int)           layoutHelper.getValue(this); }
   public Symbol   getName()             { return            getSymbol(name); }
< prev index next >