hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java
changeset 8725 8c1e3dd5fe1b
parent 5547 f4b087cbb361
child 8878 a6283814032c
equal deleted inserted replaced
8724:693c6b883b54 8725:8c1e3dd5fe1b
     1 /*
     1 /*
     2  * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   272   private static void initClassFields() {
   272   private static void initClassFields() {
   273     if (hcKlassField == null) {
   273     if (hcKlassField == null) {
   274        // hc_klass is a HotSpot magic field and hence we can't
   274        // hc_klass is a HotSpot magic field and hence we can't
   275        // find it from InstanceKlass for java.lang.Class.
   275        // find it from InstanceKlass for java.lang.Class.
   276        TypeDataBase db = VM.getVM().getTypeDataBase();
   276        TypeDataBase db = VM.getVM().getTypeDataBase();
   277        int hcKlassOffset = (int) Instance.getHeaderSize();
   277        int hcKlassOffset = (int) db.lookupType("java_lang_Class").getCIntegerField("klass_offset").getValue();
   278        try {
       
   279           hcKlassOffset += (db.lookupIntConstant("java_lang_Class::hc_klass_offset").intValue() *
       
   280                            VM.getVM().getHeapOopSize());
       
   281        } catch (RuntimeException re) {
       
   282           // ignore, currently java_lang_Class::hc_klass_offset is zero
       
   283        }
       
   284        if (VM.getVM().isCompressedOopsEnabled()) {
   278        if (VM.getVM().isCompressedOopsEnabled()) {
   285          hcKlassField = new NarrowOopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
   279          hcKlassField = new NarrowOopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
   286        } else {
   280        } else {
   287          hcKlassField = new OopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
   281          hcKlassField = new OopField(new NamedFieldIdentifier("hc_klass"), hcKlassOffset, true);
   288        }
   282        }