< prev index next >

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

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2000, 2018, 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. --- 1,7 ---- /* ! * 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,59 **** 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"); 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 { --- 49,59 ---- 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"); ! 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,97 **** public boolean isKlass() { return true; } public boolean isArrayKlass() { return false; } // Fields ! private static AddressField javaMirror; private static MetadataField superField; private static IntField layoutHelper; private static AddressField name; private static CIntField accessFlags; private static MetadataField subklass; --- 87,97 ---- public boolean isKlass() { return true; } public boolean isArrayKlass() { return false; } // Fields ! 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,125 **** 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; } 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); } --- 99,117 ---- private static MetadataField nextLink; private static sun.jvm.hotspot.types.Field traceIDField; private static CIntField vtableLen; private static AddressField classLoaderData; protected Symbol getSymbol(AddressField field) { return Symbol.create(addr.getAddressAt(field.getOffset())); } // Accessors for declared fields public Instance getJavaMirror() { ! 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 >