Class ClassSize

java.lang.Object
org.apache.derby.iapi.services.cache.ClassSize

public class ClassSize extends Object
  • Field Details

    • refSize

      public static final int refSize
    • objectOverhead

      private static final int objectOverhead
      See Also:
    • booleanSize

      private static final int booleanSize
      See Also:
    • charSize

      private static final int charSize
      See Also:
    • shortSize

      private static final int shortSize
      See Also:
    • intSize

      private static final int intSize
      See Also:
    • longSize

      private static final int longSize
      See Also:
    • floatSize

      private static final int floatSize
      See Also:
    • doubleSize

      private static final int doubleSize
      See Also:
    • minObjectSize

      private static final int minObjectSize
    • dummyCatalog

      private static boolean dummyCatalog
    • noGuess

      static boolean noGuess
    • unitTest

      static boolean unitTest
    • wildGuess

      private static final int[] wildGuess
  • Constructor Details

    • ClassSize

      public ClassSize()
  • Method Details

    • setDummyCatalog

      public static void setDummyCatalog()
      do not try to use the catalog.
    • getRefSize

      public static int getRefSize()
      Get the estimate of the size of an object reference.
      Returns:
      the estimate in bytes.
    • getIntSize

      public static int getIntSize()
      Returns:
      the estimate of the size of a primitive int
    • getSizeCoefficients

      public static int[] getSizeCoefficients(Class cl)
      The estimate of the size of a class instance depends on whether the JVM uses 32 or 64 bit addresses, that is it depends on the size of an object reference. It is a linear function of the size of a reference, e.g. 24 + 5*r where r is the size of a reference (usually 4 or 8 bytes). This method returns the coefficients of the linear function, e.g. {24, 5} in the above example.
      Parameters:
      cl - A class whose instance size is to be estimated
      Returns:
      an array of 2 integers. The first integer is the constant part of the function, the second is the reference size coefficient.
    • estimateBaseFromCoefficients

      public static int estimateBaseFromCoefficients(int[] coeff)
      Estimate the static space taken up by a class instance given the coefficients returned by getSizeCoefficients.
      Parameters:
      coeff - the coefficients
      Returns:
      the size estimate, in bytes
    • estimateBaseFromCatalog

      public static int estimateBaseFromCatalog(Class cls)
      Estimate the static space taken up by a class instance from cataloged coefficients.
      Parameters:
      cls - the class
      Returns:
      the size estimate, in bytes
      See Also:
    • estimateBaseFromCatalog

      private static int estimateBaseFromCatalog(Class<?> cls, boolean addToCatalog)
    • estimateAndCatalogBase

      public static int estimateAndCatalogBase(Class cls)
      Estimate the static space taken up by a class instance. Save the coefficients in a catalog.
      Parameters:
      cls - the class
      Returns:
      the size estimate, in bytes
      See Also:
    • estimateBase

      public static int estimateBase(Class cl)
      Estimate the static space taken up by the fields of a class. This includes the space taken up by by references (the pointer) but not by the referenced object. So the estimated size of an array field does not depend on the size of the array. Similarly the size of an object (reference) field does not depend on the object.
      Returns:
      the size estimate in bytes. Note that this method will throw a SecurityException if the SecurityManager does not let this class execute the method Class.getDeclaredFields(). If this is a concern try to compute the size coefficients at build time. see org.apache.derbyBuild.ClassSizeCrawler
      See Also:
    • estimateArrayOverhead

      public static int estimateArrayOverhead()
      Returns:
      the estimated overhead of an array. The estimated size of an x[n] array is estimateArrayOverhead() + n*sizeOf(x).
    • estimateHashEntrySize

      public static int estimateHashEntrySize()
      Estimate the size of a Hashtable entry. In Java 1.2 we can use Map.entry, but this is not available in earlier versions of Java.
      Returns:
      the estimate, in bytes
    • estimateMemoryUsage

      public static int estimateMemoryUsage(String str)
      Estimate the size of a string.
      Returns:
      the estimated size, in bytes
    • fetchRefSizeFromSystemProperties

      private static final int fetchRefSizeFromSystemProperties()
      Tries to determine the reference size in bytes by checking whether the VM we're running in is 32 or 64 bit by looking at the system properties.
      Returns:
      The reference size in bytes as specified or implied by the VM, or -1 if the reference size couldn't be determined.
    • getSystemProperty

      private static final String getSystemProperty(String propName)
      Attempts to read the specified system property.
      Parameters:
      propName - name of the system property to read
      Returns:
      The property value, or null if it doesn't exist or the required permission to read the property is missing.