Class ClassImpl

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<ClassImpl>, IClass, IObject

    public class ClassImpl
    extends AbstractObjectImpl
    implements IClass, java.lang.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:
    Serialized Form
    No Extend:
    • Field Detail

      • JAVA_LANG_CLASS

        public static final java.lang.String JAVA_LANG_CLASS
        Shortcut for java.lang.Class
        See Also:
        Constant Field Values
    • Constructor Detail

      • ClassImpl

        public ClassImpl​(long address,
                         java.lang.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 Detail

      • getCacheEntry

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

        public void setCacheEntry​(java.io.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 java.lang.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
        java.lang.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
      • getOutboundReferences

        public java.util.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 java.util.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 java.lang.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​(java.lang.String name)
        Sets the class name.
        Parameters:
        name - the class name
      • getStaticFields

        public java.util.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 java.lang.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 java.util.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 java.util.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 java.lang.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​(java.lang.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