Class RamUsageEstimator
- java.lang.Object
-
- 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
RamUsageEstimatorare 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
Nested Classes Modifier and Type Class Description static classRamUsageEstimator.JvmFeatureJVM diagnostic features.
-
Field Summary
Fields Modifier and Type Field Description static StringJVM_INFO_STRINGJVM info string for debugging and reports.static intNUM_BYTES_ARRAY_HEADERNumber of bytes to represent an array header (no content, but with alignments).static intNUM_BYTES_BOOLEANstatic intNUM_BYTES_BYTEstatic intNUM_BYTES_CHARstatic intNUM_BYTES_DOUBLEstatic intNUM_BYTES_FLOATstatic intNUM_BYTES_INTstatic intNUM_BYTES_LONGstatic intNUM_BYTES_OBJECT_ALIGNMENTA constant specifying the object alignment boundary inside the JVM.static intNUM_BYTES_OBJECT_HEADERNumber of bytes to represent an object header (no fields, no alignments).static intNUM_BYTES_OBJECT_REFNumber of bytes this jvm uses to represent an object reference.static intNUM_BYTES_SHORTstatic longONE_GBOne gigabyte bytes.static longONE_KBOne kilobyte bytes.static longONE_MBOne megabyte bytes.
-
Constructor Summary
Constructors Constructor Description RamUsageEstimator()Deprecated.Don't create instances of this class, instead use the staticsizeOf(Object)method that has no intern checking, too.RamUsageEstimator(boolean checkInterned)Deprecated.Don't create instances of this class, instead use the staticsizeOf(Object)method.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static longalignObjectSize(long size)Aligns an object size to be the next multiple ofNUM_BYTES_OBJECT_ALIGNMENT.longestimateRamUsage(Object obj)Deprecated.Don't create instances of this class, instead use the staticsizeOf(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 StringhumanReadableUnits(long bytes)Returnssizein human-readable units (GB, MB, KB or bytes).static StringhumanReadableUnits(long bytes, DecimalFormat df)Returnssizein human-readable units (GB, MB, KB or bytes).static StringhumanSizeOf(Object object)Return a human-readable size of a given object.static booleanisSupportedJVM()Returns true, if the current JVM is fully supported byRamUsageEstimator.static longshallowSizeOf(Object obj)Estimates a "shallow" memory usage of the given object.static longshallowSizeOfInstance(Class<?> clazz)Returns the shallow instance size in bytes an instance of the given class would occupy.static longsizeOf(boolean[] arr)Returns the size in bytes of the boolean[] object.static longsizeOf(byte[] arr)Returns the size in bytes of the byte[] object.static longsizeOf(char[] arr)Returns the size in bytes of the char[] object.static longsizeOf(double[] arr)Returns the size in bytes of the double[] object.static longsizeOf(float[] arr)Returns the size in bytes of the float[] object.static longsizeOf(int[] arr)Returns the size in bytes of the int[] object.static longsizeOf(long[] arr)Returns the size in bytes of the long[] object.static longsizeOf(short[] arr)Returns the size in bytes of the short[] object.static longsizeOf(Object obj)Estimates the RAM usage by the given object.
-
-
-
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 staticsizeOf(Object)method that has no intern checking, too.Creates a new instance ofRamUsageEstimatorwith 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 staticsizeOf(Object)method.Creates a new instance ofRamUsageEstimator.- 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 byRamUsageEstimator. If this method returnsfalseyou 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 ofNUM_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- ifclazzis 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)
Returnssizein human-readable units (GB, MB, KB or bytes).
-
humanReadableUnits
public static String humanReadableUnits(long bytes, DecimalFormat df)
Returnssizein 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 staticsizeOf(Object)method.Creates a new istance ofRamUsageEstimator.- See Also:
sizeOf(Object)
-
-