Class ClassImpl

All Implemented Interfaces:
Serializable, Comparable<ClassImpl>, IClass, IObject

public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<ClassImpl>
Implementation of a Java object representing a java.lang.Class object. As well as some standard object information it contains information about the class and summary details about instances of this class.
See Also:
No Extend:
  • Field Details

  • Constructor Details

    • ClassImpl

      public ClassImpl(long address, String name, long superAddress, long loaderAddress, Field[] staticFields, FieldDescriptor[] fields)
      Construct a class object based on name, address and fields.
      Parameters:
      address - the address of the class object
      name - the class name, using '.' as package separator
      superAddress - the address of the superclass, or 0 if none.
      loaderAddress - the address of the class loader
      staticFields - all the static fields, with values
      fields - all the instance fields as descriptors
  • Method Details

    • getCacheEntry

      public Serializable getCacheEntry()
      Gets the key for extra information about this class.
      Returns:
      the key
    • setCacheEntry

      public void setCacheEntry(Serializable cacheEntry)
      Sets the key for extra information about this class.
      Parameters:
      cacheEntry - the key
    • setSuperClassIndex

      public void setSuperClassIndex(int superClassIndex)
      Sets the superclass index. May need to be changed after reindexing of a snapshot.
      Parameters:
      superClassIndex - the new index
    • setClassLoaderIndex

      public void setClassLoaderIndex(int classLoaderIndex)
      Sets the class loader index. May need to be changed after reindexing of a snapshot.
      Parameters:
      classLoaderIndex - the new index
    • getObjectIds

      public int[] getObjectIds() throws UnsupportedOperationException, SnapshotException
      Description copied from interface: IClass
      Ids of all instances of this class (an empty array if there are no instances of the class)
      Specified by:
      getObjectIds in interface IClass
      Returns:
      an array of all the object IDs of instances of this class
      Throws:
      SnapshotException - if there is a problem retrieving the data
      UnsupportedOperationException
    • getRetainedHeapSizeOfObjects

      public long getRetainedHeapSizeOfObjects(boolean calculateIfNotAvailable, boolean approximation, IProgressListener listener) throws SnapshotException
      Description copied from interface: IClass
      Returns the retained size of all objects of this instance including the class instance.
      Specified by:
      getRetainedHeapSizeOfObjects in interface IClass
      Parameters:
      calculateIfNotAvailable - whether to calculate
      approximation - whether an approximate calculation is sufficient
      listener - for reporting progress or for the user to cancel the calculation
      Returns:
      the total retained size in bytes, negative if an approximation
      Throws:
      SnapshotException - if there is a problem
    • getUsedHeapSize

      public long getUsedHeapSize()
      Description copied from interface: IObject
      Get used heap size of just this object.
      Specified by:
      getUsedHeapSize in interface IObject
      Specified by:
      getUsedHeapSize in class AbstractObjectImpl
      Returns:
      used heap size of this object
    • getReferences

      public ArrayLong getReferences()
      Description copied from class: AbstractObjectImpl
      Gets the outbound references from this object, as addresses.
      Specified by:
      getReferences in class AbstractObjectImpl
      Returns:
      a list of outbound references
    • getOutboundReferences

      public List<NamedReference> getOutboundReferences()
      Description copied from interface: IObject
      Get list of snapshot objects referenced from this snapshot object with the name of the field over which it was referenced.
      Specified by:
      getOutboundReferences in interface IObject
      Returns:
      list of snapshot objects referenced from this snapshot object with the name of the field over which it was referenced
    • getClassLoaderAddress

      public long getClassLoaderAddress()
      Description copied from interface: IClass
      Returns the address of the class loader which loaded this class.
      Specified by:
      getClassLoaderAddress in interface IClass
      Returns:
      the address of the class loader
    • setClassLoaderAddress

      public void setClassLoaderAddress(long address)
      Sets the class loader for this class.
      Parameters:
      address - the address of the loader
    • getFieldDescriptors

      public List<FieldDescriptor> getFieldDescriptors()
      Description copied from interface: IClass
      Returns field descriptors for all member variables of instances of this class. If the snapshot data format does not contain field data then this will be an empty list.
      Specified by:
      getFieldDescriptors in interface IClass
      Returns:
      the field descriptors for this class
    • getNumberOfObjects

      public int getNumberOfObjects()
      Description copied from interface: IClass
      Returns the number of instances of this class present in the heap dump.
      Specified by:
      getNumberOfObjects in interface IClass
      Returns:
      the number of instances
    • getHeapSizePerInstance

      public long getHeapSizePerInstance()
      Description copied from interface: IClass
      Returns the heap size of one instance of this class. Not valid if this class represents an array.
      Specified by:
      getHeapSizePerInstance in interface IClass
      Returns:
      the size of an instance of this class in bytes
      Since:
      1.0
    • setHeapSizePerInstance

      public void setHeapSizePerInstance(long size)
      Sets the size per instance for the class
      Parameters:
      size - the size in bytes
      Since:
      1.0
    • getName

      public String getName()
      Description copied from interface: IClass
      Returns the fully qualified class name of this class. The package components are separated by dots '.'. Inner classes use $ to separate the parts.
      Specified by:
      getName in interface IClass
      Returns:
      the name of the class
    • setName

      public void setName(String name)
      Sets the class name.
      Parameters:
      name - the class name
    • getStaticFields

      public List<Field> getStaticFields()
      Description copied from interface: IClass
      Returns the static fields and it values. If the snapshot data format does not contain field data then this will be an empty list.
      Specified by:
      getStaticFields in interface IClass
      Returns:
      the static fields of this class
    • getSuperClassAddress

      public long getSuperClassAddress()
      Gets the address of the superclass.
      Returns:
      the superclass address
    • getSuperClassId

      public int getSuperClassId()
      Description copied from interface: IClass
      Returns the id of the super class. -1 if it has no super class, i.e. if it is java.lang.Object.
      Specified by:
      getSuperClassId in interface IClass
      Returns:
      the super class ID
    • getSuperClass

      public ClassImpl getSuperClass()
      Description copied from interface: IClass
      Returns the super class.
      Specified by:
      getSuperClass in interface IClass
      Returns:
      the super class
    • getTotalSize

      public long getTotalSize()
      The size of all the instances of this class.
      Returns:
      the size in bytes
    • hasSuperClass

      public boolean hasSuperClass()
      Description copied from interface: IClass
      Does the class have a super class?
      Specified by:
      hasSuperClass in interface IClass
      Returns:
      true if the class has a super class.
    • compareTo

      public int compareTo(ClassImpl other)
      Specified by:
      compareTo in interface Comparable<ClassImpl>
    • addInstance

      public void addInstance(long usedHeapSize)
      Note another instance to this class.
      Parameters:
      usedHeapSize - the size in bytes of this instance
      Since:
      1.0
    • removeInstance

      public void removeInstance(long heapSizePerInstance)
      Remove an instance of this class. Reverses the effect of addInstance(long)
      Parameters:
      heapSizePerInstance - the size in bytes of this instance
      Since:
      1.0
    • getSubclasses

      public List<IClass> getSubclasses()
      Description copied from interface: IClass
      Returns the direct sub-classes.
      Specified by:
      getSubclasses in interface IClass
      Returns:
      a list of the immediate subclasses
    • getAllSubclasses

      public List<IClass> getAllSubclasses()
      Description copied from interface: IClass
      Returns all sub-classes including sub-classes of its sub-classes.
      Specified by:
      getAllSubclasses in interface IClass
      Returns:
      a list of all the subclasses
    • isArrayType

      public boolean isArrayType()
      Description copied from interface: IClass
      Test if this class an array type.
      Specified by:
      isArrayType in interface IClass
      Returns:
      true if the class is an array class.
    • getTechnicalName

      public String getTechnicalName()
      Description copied from interface: IObject
      Get technical name of this object which is something like class@address.
      Specified by:
      getTechnicalName in interface IObject
      Overrides:
      getTechnicalName in class AbstractObjectImpl
      Returns:
      technical name of this object which is something like class@address
    • getClassLoaderId

      public int getClassLoaderId()
      Description copied from interface: IClass
      Returns the id of the class loader which loaded this class.
      Specified by:
      getClassLoaderId in interface IClass
      Returns:
      the object ID of the class loader
    • addSubClass

      public void addSubClass(ClassImpl clazz)
      Add a subclass of this class.
      Parameters:
      clazz - the subclass
    • removeSubClass

      public void removeSubClass(ClassImpl clazz)
      Remove a subclass of this class. Reverses the effect of addSubClass(ClassImpl)
      Parameters:
      clazz - the subclass
    • setUsedHeapSize

      public void setUsedHeapSize(long usedHeapSize)
      Sets the used heap size for this particular class. Does not include instances.
      Parameters:
      usedHeapSize - the size in bytes
      Since:
      1.0
    • doesExtend

      public boolean doesExtend(String className) throws SnapshotException
      Description copied from interface: IClass
      Does this class extend a class of the supplied name? With multiple class loaders the supplied name might not be the class you were intending to find.
      Specified by:
      doesExtend in interface IClass
      Parameters:
      className - the candidate class name
      Returns:
      true if it does extend
      Throws:
      SnapshotException - if there is a problem retrieving the information
    • setSnapshot

      public void setSnapshot(ISnapshot dump)
      Description copied from class: AbstractObjectImpl
      Set the snapshot for an object. Used once the entire snapshot has been built, or an object has been deserialized.
      Overrides:
      setSnapshot in class AbstractObjectImpl
      Parameters:
      dump - the actual current snapshot