agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7017732 Sdiff agent/src/share/classes/sun/jvm/hotspot/oops

agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java

Print this page


   1 /*
   2  * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   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
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


  70     methodOrdering       = new OopField(type.getOopField("_method_ordering"), Oop.getHeaderSize());
  71     localInterfaces      = new OopField(type.getOopField("_local_interfaces"), Oop.getHeaderSize());
  72     transitiveInterfaces = new OopField(type.getOopField("_transitive_interfaces"), Oop.getHeaderSize());
  73     nofImplementors      = new CIntField(type.getCIntegerField("_nof_implementors"), Oop.getHeaderSize());
  74     IMPLEMENTORS_LIMIT   = db.lookupIntConstant("instanceKlass::implementors_limit").intValue();
  75     implementors         = new OopField[IMPLEMENTORS_LIMIT];
  76     for (int i = 0; i < IMPLEMENTORS_LIMIT; i++) {
  77       long arrayOffset = Oop.getHeaderSize() + (i * db.getAddressSize());
  78       implementors[i]    = new OopField(type.getOopField("_implementors[0]"), arrayOffset);
  79     }
  80     fields               = new OopField(type.getOopField("_fields"), Oop.getHeaderSize());
  81     constants            = new OopField(type.getOopField("_constants"), Oop.getHeaderSize());
  82     classLoader          = new OopField(type.getOopField("_class_loader"), Oop.getHeaderSize());
  83     protectionDomain     = new OopField(type.getOopField("_protection_domain"), Oop.getHeaderSize());
  84     signers              = new OopField(type.getOopField("_signers"), Oop.getHeaderSize());
  85     sourceFileName       = type.getAddressField("_source_file_name");
  86     sourceDebugExtension = type.getAddressField("_source_debug_extension");
  87     innerClasses         = new OopField(type.getOopField("_inner_classes"), Oop.getHeaderSize());
  88     nonstaticFieldSize   = new CIntField(type.getCIntegerField("_nonstatic_field_size"), Oop.getHeaderSize());
  89     staticFieldSize      = new CIntField(type.getCIntegerField("_static_field_size"), Oop.getHeaderSize());
  90     staticOopFieldSize   = new CIntField(type.getCIntegerField("_static_oop_field_size"), Oop.getHeaderSize());
  91     nonstaticOopMapSize  = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), Oop.getHeaderSize());
  92     isMarkedDependent    = new CIntField(type.getCIntegerField("_is_marked_dependent"), Oop.getHeaderSize());
  93     initState            = new CIntField(type.getCIntegerField("_init_state"), Oop.getHeaderSize());
  94     vtableLen            = new CIntField(type.getCIntegerField("_vtable_len"), Oop.getHeaderSize());
  95     itableLen            = new CIntField(type.getCIntegerField("_itable_len"), Oop.getHeaderSize());
  96     breakpoints          = type.getAddressField("_breakpoints");
  97     genericSignature     = type.getAddressField("_generic_signature");
  98     majorVersion         = new CIntField(type.getCIntegerField("_major_version"), Oop.getHeaderSize());
  99     minorVersion         = new CIntField(type.getCIntegerField("_minor_version"), Oop.getHeaderSize());
 100     headerSize           = alignObjectOffset(Oop.getHeaderSize() + type.getSize());
 101 
 102     // read field offset constants
 103     ACCESS_FLAGS_OFFSET = db.lookupIntConstant("instanceKlass::access_flags_offset").intValue();
 104     NAME_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::name_index_offset").intValue();
 105     SIGNATURE_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::signature_index_offset").intValue();
 106     INITVAL_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::initval_index_offset").intValue();
 107     LOW_OFFSET = db.lookupIntConstant("instanceKlass::low_offset").intValue();
 108     HIGH_OFFSET = db.lookupIntConstant("instanceKlass::high_offset").intValue();
 109     GENERIC_SIGNATURE_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::generic_signature_offset").intValue();
 110     NEXT_OFFSET = db.lookupIntConstant("instanceKlass::next_offset").intValue();


 123     super(handle, heap);
 124   }
 125 
 126   private static OopField  arrayKlasses;
 127   private static OopField  methods;
 128   private static OopField  methodOrdering;
 129   private static OopField  localInterfaces;
 130   private static OopField  transitiveInterfaces;
 131   private static CIntField nofImplementors;
 132   private static OopField[] implementors;
 133   private static OopField  fields;
 134   private static OopField  constants;
 135   private static OopField  classLoader;
 136   private static OopField  protectionDomain;
 137   private static OopField  signers;
 138   private static AddressField  sourceFileName;
 139   private static AddressField  sourceDebugExtension;
 140   private static OopField  innerClasses;
 141   private static CIntField nonstaticFieldSize;
 142   private static CIntField staticFieldSize;
 143   private static CIntField staticOopFieldSize;
 144   private static CIntField nonstaticOopMapSize;
 145   private static CIntField isMarkedDependent;
 146   private static CIntField initState;
 147   private static CIntField vtableLen;
 148   private static CIntField itableLen;
 149   private static AddressField breakpoints;
 150   private static AddressField  genericSignature;
 151   private static CIntField majorVersion;
 152   private static CIntField minorVersion;
 153 
 154   // type safe enum for ClassState from instanceKlass.hpp
 155   public static class ClassState {
 156      public static final ClassState UNPARSABLE_BY_GC = new ClassState("unparsable_by_gc");
 157      public static final ClassState ALLOCATED    = new ClassState("allocated");
 158      public static final ClassState LOADED       = new ClassState("loaded");
 159      public static final ClassState LINKED       = new ClassState("linked");
 160      public static final ClassState BEING_INITIALIZED      = new ClassState("beingInitialized");
 161      public static final ClassState FULLY_INITIALIZED    = new ClassState("fullyInitialized");
 162      public static final ClassState INITIALIZATION_ERROR = new ClassState("initializationError");
 163 


 244   public static long getHeaderSize() { return headerSize; }
 245 
 246   // Accessors for declared fields
 247   public Klass     getArrayKlasses()        { return (Klass)        arrayKlasses.getValue(this); }
 248   public ObjArray  getMethods()             { return (ObjArray)     methods.getValue(this); }
 249   public TypeArray getMethodOrdering()      { return (TypeArray)    methodOrdering.getValue(this); }
 250   public ObjArray  getLocalInterfaces()     { return (ObjArray)     localInterfaces.getValue(this); }
 251   public ObjArray  getTransitiveInterfaces() { return (ObjArray)     transitiveInterfaces.getValue(this); }
 252   public long      nofImplementors()        { return                nofImplementors.getValue(this); }
 253   public Klass     getImplementor()         { return (Klass)        implementors[0].getValue(this); }
 254   public Klass     getImplementor(int i)    { return (Klass)        implementors[i].getValue(this); }
 255   public TypeArray getFields()              { return (TypeArray)    fields.getValue(this); }
 256   public ConstantPool getConstants()        { return (ConstantPool) constants.getValue(this); }
 257   public Oop       getClassLoader()         { return                classLoader.getValue(this); }
 258   public Oop       getProtectionDomain()    { return                protectionDomain.getValue(this); }
 259   public ObjArray  getSigners()             { return (ObjArray)     signers.getValue(this); }
 260   public Symbol    getSourceFileName()      { return getSymbol(sourceFileName); }
 261   public Symbol    getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); }
 262   public TypeArray getInnerClasses()        { return (TypeArray)    innerClasses.getValue(this); }
 263   public long      getNonstaticFieldSize()  { return                nonstaticFieldSize.getValue(this); }
 264   public long      getStaticFieldSize()     { return                staticFieldSize.getValue(this); }
 265   public long      getStaticOopFieldSize()  { return                staticOopFieldSize.getValue(this); }
 266   public long      getNonstaticOopMapSize() { return                nonstaticOopMapSize.getValue(this); }
 267   public boolean   getIsMarkedDependent()   { return                isMarkedDependent.getValue(this) != 0; }
 268   public long      getVtableLen()           { return                vtableLen.getValue(this); }
 269   public long      getItableLen()           { return                itableLen.getValue(this); }
 270   public Symbol    getGenericSignature()    { return getSymbol(genericSignature); }
 271   public long      majorVersion()           { return                majorVersion.getValue(this); }
 272   public long      minorVersion()           { return                minorVersion.getValue(this); }
 273 
 274   // "size helper" == instance size in words
 275   public long getSizeHelper() {
 276     int lh = getLayoutHelper();
 277     if (Assert.ASSERTS_ENABLED) {
 278       Assert.that(lh > 0, "layout helper initialized for instance class");
 279     }
 280     return lh / VM.getVM().getAddressSize();
 281   }
 282 
 283   // same as enum InnerClassAttributeOffset in VM code.
 284   public static interface InnerClassAttributeOffset {
 285     // from JVM spec. "InnerClasses" attribute


 436 
 437   public void iterateFields(OopVisitor visitor, boolean doVMFields) {
 438     super.iterateFields(visitor, doVMFields);
 439     if (doVMFields) {
 440       visitor.doOop(arrayKlasses, true);
 441       visitor.doOop(methods, true);
 442       visitor.doOop(methodOrdering, true);
 443       visitor.doOop(localInterfaces, true);
 444       visitor.doOop(transitiveInterfaces, true);
 445       visitor.doCInt(nofImplementors, true);
 446       for (int i = 0; i < IMPLEMENTORS_LIMIT; i++)
 447         visitor.doOop(implementors[i], true);
 448       visitor.doOop(fields, true);
 449       visitor.doOop(constants, true);
 450       visitor.doOop(classLoader, true);
 451       visitor.doOop(protectionDomain, true);
 452       visitor.doOop(signers, true);
 453       visitor.doOop(innerClasses, true);
 454       visitor.doCInt(nonstaticFieldSize, true);
 455       visitor.doCInt(staticFieldSize, true);
 456       visitor.doCInt(staticOopFieldSize, true);
 457       visitor.doCInt(nonstaticOopMapSize, true);
 458       visitor.doCInt(isMarkedDependent, true);
 459       visitor.doCInt(initState, true);
 460       visitor.doCInt(vtableLen, true);
 461       visitor.doCInt(itableLen, true);
 462     }
 463 
 464     TypeArray fields = getFields();
 465     int length = (int) fields.getLength();
 466     for (int index = 0; index < length; index += NEXT_OFFSET) {
 467       short accessFlags    = fields.getShortAt(index + ACCESS_FLAGS_OFFSET);
 468       short signatureIndex = fields.getShortAt(index + SIGNATURE_INDEX_OFFSET);
 469       FieldType   type   = new FieldType(getConstants().getSymbolAt(signatureIndex));
 470       AccessFlags access = new AccessFlags(accessFlags);
 471       if (access.isStatic()) {
 472         visitField(visitor, type, index);
 473       }
 474     }
 475   }
 476 


 675     */
 676     public List getDirectImplementedInterfaces() {
 677         // Contains an InstanceKlass for each interface in this classes
 678         // 'implements' clause.
 679 
 680         ObjArray interfaces = getLocalInterfaces();
 681         int length = (int) interfaces.getLength();
 682         List directImplementedInterfaces = new ArrayList(length);
 683 
 684         for (int index = 0; index < length; index ++) {
 685             directImplementedInterfaces.add(interfaces.getObjAt(index));
 686         }
 687 
 688         return directImplementedInterfaces;
 689     }
 690 
 691 
 692   public long getObjectSize() {
 693     long bodySize =    alignObjectOffset(getVtableLen() * getHeap().getOopSize())
 694                      + alignObjectOffset(getItableLen() * getHeap().getOopSize())
 695                      + (getStaticFieldSize() + getNonstaticOopMapSize()) * getHeap().getOopSize();
 696     return alignObjectSize(headerSize + bodySize);
 697   }
 698 
 699   public Klass arrayKlassImpl(boolean orNull, int n) {
 700     // FIXME: in reflective system this would need to change to
 701     // actually allocate
 702     if (getArrayKlasses() == null) { return null; }
 703     ObjArrayKlass oak = (ObjArrayKlass) getArrayKlasses();
 704     if (orNull) {
 705       return oak.arrayKlassOrNull(n);
 706     }
 707     return oak.arrayKlass(n);
 708   }
 709 
 710   public Klass arrayKlassImpl(boolean orNull) {
 711     return arrayKlassImpl(orNull, 1);
 712   }
 713 
 714   public String signature() {
 715      return "L" + super.signature() + ";";


   1 /*
   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.
   4  *
   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
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


  70     methodOrdering       = new OopField(type.getOopField("_method_ordering"), Oop.getHeaderSize());
  71     localInterfaces      = new OopField(type.getOopField("_local_interfaces"), Oop.getHeaderSize());
  72     transitiveInterfaces = new OopField(type.getOopField("_transitive_interfaces"), Oop.getHeaderSize());
  73     nofImplementors      = new CIntField(type.getCIntegerField("_nof_implementors"), Oop.getHeaderSize());
  74     IMPLEMENTORS_LIMIT   = db.lookupIntConstant("instanceKlass::implementors_limit").intValue();
  75     implementors         = new OopField[IMPLEMENTORS_LIMIT];
  76     for (int i = 0; i < IMPLEMENTORS_LIMIT; i++) {
  77       long arrayOffset = Oop.getHeaderSize() + (i * db.getAddressSize());
  78       implementors[i]    = new OopField(type.getOopField("_implementors[0]"), arrayOffset);
  79     }
  80     fields               = new OopField(type.getOopField("_fields"), Oop.getHeaderSize());
  81     constants            = new OopField(type.getOopField("_constants"), Oop.getHeaderSize());
  82     classLoader          = new OopField(type.getOopField("_class_loader"), Oop.getHeaderSize());
  83     protectionDomain     = new OopField(type.getOopField("_protection_domain"), Oop.getHeaderSize());
  84     signers              = new OopField(type.getOopField("_signers"), Oop.getHeaderSize());
  85     sourceFileName       = type.getAddressField("_source_file_name");
  86     sourceDebugExtension = type.getAddressField("_source_debug_extension");
  87     innerClasses         = new OopField(type.getOopField("_inner_classes"), Oop.getHeaderSize());
  88     nonstaticFieldSize   = new CIntField(type.getCIntegerField("_nonstatic_field_size"), Oop.getHeaderSize());
  89     staticFieldSize      = new CIntField(type.getCIntegerField("_static_field_size"), Oop.getHeaderSize());
  90     staticOopFieldCount   = new CIntField(type.getCIntegerField("_static_oop_field_count"), Oop.getHeaderSize());
  91     nonstaticOopMapSize  = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), Oop.getHeaderSize());
  92     isMarkedDependent    = new CIntField(type.getCIntegerField("_is_marked_dependent"), Oop.getHeaderSize());
  93     initState            = new CIntField(type.getCIntegerField("_init_state"), Oop.getHeaderSize());
  94     vtableLen            = new CIntField(type.getCIntegerField("_vtable_len"), Oop.getHeaderSize());
  95     itableLen            = new CIntField(type.getCIntegerField("_itable_len"), Oop.getHeaderSize());
  96     breakpoints          = type.getAddressField("_breakpoints");
  97     genericSignature     = type.getAddressField("_generic_signature");
  98     majorVersion         = new CIntField(type.getCIntegerField("_major_version"), Oop.getHeaderSize());
  99     minorVersion         = new CIntField(type.getCIntegerField("_minor_version"), Oop.getHeaderSize());
 100     headerSize           = alignObjectOffset(Oop.getHeaderSize() + type.getSize());
 101 
 102     // read field offset constants
 103     ACCESS_FLAGS_OFFSET = db.lookupIntConstant("instanceKlass::access_flags_offset").intValue();
 104     NAME_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::name_index_offset").intValue();
 105     SIGNATURE_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::signature_index_offset").intValue();
 106     INITVAL_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::initval_index_offset").intValue();
 107     LOW_OFFSET = db.lookupIntConstant("instanceKlass::low_offset").intValue();
 108     HIGH_OFFSET = db.lookupIntConstant("instanceKlass::high_offset").intValue();
 109     GENERIC_SIGNATURE_INDEX_OFFSET = db.lookupIntConstant("instanceKlass::generic_signature_offset").intValue();
 110     NEXT_OFFSET = db.lookupIntConstant("instanceKlass::next_offset").intValue();


 123     super(handle, heap);
 124   }
 125 
 126   private static OopField  arrayKlasses;
 127   private static OopField  methods;
 128   private static OopField  methodOrdering;
 129   private static OopField  localInterfaces;
 130   private static OopField  transitiveInterfaces;
 131   private static CIntField nofImplementors;
 132   private static OopField[] implementors;
 133   private static OopField  fields;
 134   private static OopField  constants;
 135   private static OopField  classLoader;
 136   private static OopField  protectionDomain;
 137   private static OopField  signers;
 138   private static AddressField  sourceFileName;
 139   private static AddressField  sourceDebugExtension;
 140   private static OopField  innerClasses;
 141   private static CIntField nonstaticFieldSize;
 142   private static CIntField staticFieldSize;
 143   private static CIntField staticOopFieldCount;
 144   private static CIntField nonstaticOopMapSize;
 145   private static CIntField isMarkedDependent;
 146   private static CIntField initState;
 147   private static CIntField vtableLen;
 148   private static CIntField itableLen;
 149   private static AddressField breakpoints;
 150   private static AddressField  genericSignature;
 151   private static CIntField majorVersion;
 152   private static CIntField minorVersion;
 153 
 154   // type safe enum for ClassState from instanceKlass.hpp
 155   public static class ClassState {
 156      public static final ClassState UNPARSABLE_BY_GC = new ClassState("unparsable_by_gc");
 157      public static final ClassState ALLOCATED    = new ClassState("allocated");
 158      public static final ClassState LOADED       = new ClassState("loaded");
 159      public static final ClassState LINKED       = new ClassState("linked");
 160      public static final ClassState BEING_INITIALIZED      = new ClassState("beingInitialized");
 161      public static final ClassState FULLY_INITIALIZED    = new ClassState("fullyInitialized");
 162      public static final ClassState INITIALIZATION_ERROR = new ClassState("initializationError");
 163 


 244   public static long getHeaderSize() { return headerSize; }
 245 
 246   // Accessors for declared fields
 247   public Klass     getArrayKlasses()        { return (Klass)        arrayKlasses.getValue(this); }
 248   public ObjArray  getMethods()             { return (ObjArray)     methods.getValue(this); }
 249   public TypeArray getMethodOrdering()      { return (TypeArray)    methodOrdering.getValue(this); }
 250   public ObjArray  getLocalInterfaces()     { return (ObjArray)     localInterfaces.getValue(this); }
 251   public ObjArray  getTransitiveInterfaces() { return (ObjArray)     transitiveInterfaces.getValue(this); }
 252   public long      nofImplementors()        { return                nofImplementors.getValue(this); }
 253   public Klass     getImplementor()         { return (Klass)        implementors[0].getValue(this); }
 254   public Klass     getImplementor(int i)    { return (Klass)        implementors[i].getValue(this); }
 255   public TypeArray getFields()              { return (TypeArray)    fields.getValue(this); }
 256   public ConstantPool getConstants()        { return (ConstantPool) constants.getValue(this); }
 257   public Oop       getClassLoader()         { return                classLoader.getValue(this); }
 258   public Oop       getProtectionDomain()    { return                protectionDomain.getValue(this); }
 259   public ObjArray  getSigners()             { return (ObjArray)     signers.getValue(this); }
 260   public Symbol    getSourceFileName()      { return getSymbol(sourceFileName); }
 261   public Symbol    getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); }
 262   public TypeArray getInnerClasses()        { return (TypeArray)    innerClasses.getValue(this); }
 263   public long      getNonstaticFieldSize()  { return                nonstaticFieldSize.getValue(this); }
 264   public long      getStaticOopFieldCount() { return                staticOopFieldCount.getValue(this); }

 265   public long      getNonstaticOopMapSize() { return                nonstaticOopMapSize.getValue(this); }
 266   public boolean   getIsMarkedDependent()   { return                isMarkedDependent.getValue(this) != 0; }
 267   public long      getVtableLen()           { return                vtableLen.getValue(this); }
 268   public long      getItableLen()           { return                itableLen.getValue(this); }
 269   public Symbol    getGenericSignature()    { return getSymbol(genericSignature); }
 270   public long      majorVersion()           { return                majorVersion.getValue(this); }
 271   public long      minorVersion()           { return                minorVersion.getValue(this); }
 272 
 273   // "size helper" == instance size in words
 274   public long getSizeHelper() {
 275     int lh = getLayoutHelper();
 276     if (Assert.ASSERTS_ENABLED) {
 277       Assert.that(lh > 0, "layout helper initialized for instance class");
 278     }
 279     return lh / VM.getVM().getAddressSize();
 280   }
 281 
 282   // same as enum InnerClassAttributeOffset in VM code.
 283   public static interface InnerClassAttributeOffset {
 284     // from JVM spec. "InnerClasses" attribute


 435 
 436   public void iterateFields(OopVisitor visitor, boolean doVMFields) {
 437     super.iterateFields(visitor, doVMFields);
 438     if (doVMFields) {
 439       visitor.doOop(arrayKlasses, true);
 440       visitor.doOop(methods, true);
 441       visitor.doOop(methodOrdering, true);
 442       visitor.doOop(localInterfaces, true);
 443       visitor.doOop(transitiveInterfaces, true);
 444       visitor.doCInt(nofImplementors, true);
 445       for (int i = 0; i < IMPLEMENTORS_LIMIT; i++)
 446         visitor.doOop(implementors[i], true);
 447       visitor.doOop(fields, true);
 448       visitor.doOop(constants, true);
 449       visitor.doOop(classLoader, true);
 450       visitor.doOop(protectionDomain, true);
 451       visitor.doOop(signers, true);
 452       visitor.doOop(innerClasses, true);
 453       visitor.doCInt(nonstaticFieldSize, true);
 454       visitor.doCInt(staticFieldSize, true);
 455       visitor.doCInt(staticOopFieldCount, true);
 456       visitor.doCInt(nonstaticOopMapSize, true);
 457       visitor.doCInt(isMarkedDependent, true);
 458       visitor.doCInt(initState, true);
 459       visitor.doCInt(vtableLen, true);
 460       visitor.doCInt(itableLen, true);
 461     }
 462 
 463     TypeArray fields = getFields();
 464     int length = (int) fields.getLength();
 465     for (int index = 0; index < length; index += NEXT_OFFSET) {
 466       short accessFlags    = fields.getShortAt(index + ACCESS_FLAGS_OFFSET);
 467       short signatureIndex = fields.getShortAt(index + SIGNATURE_INDEX_OFFSET);
 468       FieldType   type   = new FieldType(getConstants().getSymbolAt(signatureIndex));
 469       AccessFlags access = new AccessFlags(accessFlags);
 470       if (access.isStatic()) {
 471         visitField(visitor, type, index);
 472       }
 473     }
 474   }
 475 


 674     */
 675     public List getDirectImplementedInterfaces() {
 676         // Contains an InstanceKlass for each interface in this classes
 677         // 'implements' clause.
 678 
 679         ObjArray interfaces = getLocalInterfaces();
 680         int length = (int) interfaces.getLength();
 681         List directImplementedInterfaces = new ArrayList(length);
 682 
 683         for (int index = 0; index < length; index ++) {
 684             directImplementedInterfaces.add(interfaces.getObjAt(index));
 685         }
 686 
 687         return directImplementedInterfaces;
 688     }
 689 
 690 
 691   public long getObjectSize() {
 692     long bodySize =    alignObjectOffset(getVtableLen() * getHeap().getOopSize())
 693                      + alignObjectOffset(getItableLen() * getHeap().getOopSize())
 694                      + (getNonstaticOopMapSize()) * getHeap().getOopSize();
 695     return alignObjectSize(headerSize + bodySize);
 696   }
 697 
 698   public Klass arrayKlassImpl(boolean orNull, int n) {
 699     // FIXME: in reflective system this would need to change to
 700     // actually allocate
 701     if (getArrayKlasses() == null) { return null; }
 702     ObjArrayKlass oak = (ObjArrayKlass) getArrayKlasses();
 703     if (orNull) {
 704       return oak.arrayKlassOrNull(n);
 705     }
 706     return oak.arrayKlass(n);
 707   }
 708 
 709   public Klass arrayKlassImpl(boolean orNull) {
 710     return arrayKlassImpl(orNull, 1);
 711   }
 712 
 713   public String signature() {
 714      return "L" + super.signature() + ";";


agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File