org.apache.lucene.util
Class RamUsageEstimator

java.lang.Object
  extended by org.apache.lucene.util.RamUsageEstimator

public final class RamUsageEstimator
extends Object

Estimates the size (memory representation) of Java objects.

NOTE: Starting with Lucene 3.6, creating instances of this class is deprecated. If you still do this, please note, that instances of RamUsageEstimator are not thread-safe! It is also deprecated to enable checking of String intern-ness, the new static method no longer allow to do this. Interned strings will be counted as any other object and count for memory usage.

In Lucene 3.6, custom MemoryModels were completely removed. The new implementation is now using Hotspot™ internals to get the correct scale factors and offsets for calculating memory usage.

See Also:
sizeOf(Object), shallowSizeOf(Object), shallowSizeOfInstance(Class)
NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

Nested Class Summary
static class RamUsageEstimator.JvmFeature
          JVM diagnostic features.
 
Field Summary
static String JVM_INFO_STRING
          JVM info string for debugging and reports.
static int NUM_BYTES_ARRAY_HEADER
          Number of bytes to represent an array header (no content, but with alignments).
static int NUM_BYTES_BOOLEAN
           
static int NUM_BYTES_BYTE
           
static int NUM_BYTES_CHAR
           
static int NUM_BYTES_DOUBLE
           
static int NUM_BYTES_FLOAT
           
static int NUM_BYTES_INT
           
static int NUM_BYTES_LONG
           
static int NUM_BYTES_OBJECT_ALIGNMENT
          A constant specifying the object alignment boundary inside the JVM.
static int NUM_BYTES_OBJECT_HEADER
          Number of bytes to represent an object header (no fields, no alignments).
static int NUM_BYTES_OBJECT_REF
          Number of bytes this jvm uses to represent an object reference.
static int NUM_BYTES_SHORT
           
static long ONE_GB
          One gigabyte bytes.
static long ONE_KB
          One kilobyte bytes.
static long ONE_MB
          One megabyte bytes.
 
Constructor Summary
RamUsageEstimator()
          Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method that has no intern checking, too.
RamUsageEstimator(boolean checkInterned)
          Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method.
 
Method Summary
static long alignObjectSize(long size)
          Aligns an object size to be the next multiple of NUM_BYTES_OBJECT_ALIGNMENT.
 long estimateRamUsage(Object obj)
          Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method.
static EnumSet<RamUsageEstimator.JvmFeature> getSupportedFeatures()
          Return the set of supported JVM features that improve the estimation.
static EnumSet<RamUsageEstimator.JvmFeature> getUnsupportedFeatures()
          Return the set of unsupported JVM features that improve the estimation.
static String humanReadableUnits(long bytes)
          Returns size in human-readable units (GB, MB, KB or bytes).
static String humanReadableUnits(long bytes, DecimalFormat df)
          Returns size in human-readable units (GB, MB, KB or bytes).
static String humanSizeOf(Object object)
          Return a human-readable size of a given object.
static boolean isSupportedJVM()
          Returns true, if the current JVM is fully supported by RamUsageEstimator.
static long shallowSizeOf(Object obj)
          Estimates a "shallow" memory usage of the given object.
static long shallowSizeOfInstance(Class<?> clazz)
          Returns the shallow instance size in bytes an instance of the given class would occupy.
static long sizeOf(boolean[] arr)
          Returns the size in bytes of the boolean[] object.
static long sizeOf(byte[] arr)
          Returns the size in bytes of the byte[] object.
static long sizeOf(char[] arr)
          Returns the size in bytes of the char[] object.
static long sizeOf(double[] arr)
          Returns the size in bytes of the double[] object.
static long sizeOf(float[] arr)
          Returns the size in bytes of the float[] object.
static long sizeOf(int[] arr)
          Returns the size in bytes of the int[] object.
static long sizeOf(long[] arr)
          Returns the size in bytes of the long[] object.
static long sizeOf(Object obj)
          Estimates the RAM usage by the given object.
static long sizeOf(short[] arr)
          Returns the size in bytes of the short[] object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

JVM_INFO_STRING

public static final String JVM_INFO_STRING
JVM info string for debugging and reports.


ONE_KB

public static final long ONE_KB
One kilobyte bytes.

See Also:
Constant Field Values

ONE_MB

public static final long ONE_MB
One megabyte bytes.

See Also:
Constant Field Values

ONE_GB

public static final long ONE_GB
One gigabyte bytes.

See Also:
Constant Field Values

NUM_BYTES_BOOLEAN

public static final int NUM_BYTES_BOOLEAN
See Also:
Constant Field Values

NUM_BYTES_BYTE

public static final int NUM_BYTES_BYTE
See Also:
Constant Field Values

NUM_BYTES_CHAR

public static final int NUM_BYTES_CHAR
See Also:
Constant Field Values

NUM_BYTES_SHORT

public static final int NUM_BYTES_SHORT
See Also:
Constant Field Values

NUM_BYTES_INT

public static final int NUM_BYTES_INT
See Also:
Constant Field Values

NUM_BYTES_FLOAT

public static final int NUM_BYTES_FLOAT
See Also:
Constant Field Values

NUM_BYTES_LONG

public static final int NUM_BYTES_LONG
See Also:
Constant Field Values

NUM_BYTES_DOUBLE

public static final int NUM_BYTES_DOUBLE
See Also:
Constant Field Values

NUM_BYTES_OBJECT_REF

public static final int NUM_BYTES_OBJECT_REF
Number of bytes this jvm uses to represent an object reference.


NUM_BYTES_OBJECT_HEADER

public static final int NUM_BYTES_OBJECT_HEADER
Number of bytes to represent an object header (no fields, no alignments).


NUM_BYTES_ARRAY_HEADER

public static final int NUM_BYTES_ARRAY_HEADER
Number of bytes to represent an array header (no content, but with alignments).


NUM_BYTES_OBJECT_ALIGNMENT

public static final int NUM_BYTES_OBJECT_ALIGNMENT
A constant specifying the object alignment boundary inside the JVM. Objects will always take a full multiple of this constant, possibly wasting some space.

Constructor Detail

RamUsageEstimator

@Deprecated
public RamUsageEstimator()
Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method that has no intern checking, too.

Creates a new instance of RamUsageEstimator with intern checking enabled. Don't ever use this method, as intern checking is deprecated, because it is not free of side-effects and strains the garbage collector additionally.


RamUsageEstimator

@Deprecated
public RamUsageEstimator(boolean checkInterned)
Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method.

Creates a new instance of RamUsageEstimator.

Parameters:
checkInterned - check if Strings are interned and don't add to size if they are. Defaults to true but if you know the objects you are checking won't likely contain many interned Strings, it will be faster to turn off intern checking. Intern checking is deprecated altogether, as it is not free of side-effects and strains the garbage collector additionally.
Method Detail

isSupportedJVM

public static boolean isSupportedJVM()
Returns true, if the current JVM is fully supported by RamUsageEstimator. If this method returns false you are maybe using a 3rd party Java VM that is not supporting Oracle/Sun private APIs. The memory estimates can be imprecise then (no way of detecting compressed references, alignments, etc.). Lucene still tries to use sensible defaults.


alignObjectSize

public static long alignObjectSize(long size)
Aligns an object size to be the next multiple of NUM_BYTES_OBJECT_ALIGNMENT.


sizeOf

public static long sizeOf(byte[] arr)
Returns the size in bytes of the byte[] object.


sizeOf

public static long sizeOf(boolean[] arr)
Returns the size in bytes of the boolean[] object.


sizeOf

public static long sizeOf(char[] arr)
Returns the size in bytes of the char[] object.


sizeOf

public static long sizeOf(short[] arr)
Returns the size in bytes of the short[] object.


sizeOf

public static long sizeOf(int[] arr)
Returns the size in bytes of the int[] object.


sizeOf

public static long sizeOf(float[] arr)
Returns the size in bytes of the float[] object.


sizeOf

public static long sizeOf(long[] arr)
Returns the size in bytes of the long[] object.


sizeOf

public static long sizeOf(double[] arr)
Returns the size in bytes of the double[] object.


sizeOf

public static long sizeOf(Object obj)
Estimates the RAM usage by the given object. It will walk the object tree and sum up all referenced objects.

Resource Usage: This method internally uses a set of every object seen during traversals so it does allocate memory (it isn't side-effect free). After the method exits, this memory should be GCed.


shallowSizeOf

public static long shallowSizeOf(Object obj)
Estimates a "shallow" memory usage of the given object. For arrays, this will be the memory taken by array storage (no subreferences will be followed). For objects, this will be the memory taken by the fields. JVM object alignments are also applied.


shallowSizeOfInstance

public static long shallowSizeOfInstance(Class<?> clazz)
Returns the shallow instance size in bytes an instance of the given class would occupy. This works with all conventional classes and primitive types, but not with arrays (the size then depends on the number of elements and varies from object to object).

Throws:
IllegalArgumentException - if clazz is an array class.
See Also:
shallowSizeOf(Object)

getUnsupportedFeatures

public static EnumSet<RamUsageEstimator.JvmFeature> getUnsupportedFeatures()
Return the set of unsupported JVM features that improve the estimation.


getSupportedFeatures

public static EnumSet<RamUsageEstimator.JvmFeature> getSupportedFeatures()
Return the set of supported JVM features that improve the estimation.


humanReadableUnits

public static String humanReadableUnits(long bytes)
Returns size in human-readable units (GB, MB, KB or bytes).


humanReadableUnits

public static String humanReadableUnits(long bytes,
                                        DecimalFormat df)
Returns size in human-readable units (GB, MB, KB or bytes).


humanSizeOf

public static String humanSizeOf(Object object)
Return a human-readable size of a given object.

See Also:
sizeOf(Object), humanReadableUnits(long)

estimateRamUsage

@Deprecated
public long estimateRamUsage(Object obj)
Deprecated. Don't create instances of this class, instead use the static sizeOf(Object) method.

Creates a new istance of RamUsageEstimator.

See Also:
sizeOf(Object)