org.apache.lucene.util

## Class RamUsageEstimator

- java.lang.Object
- - org.apache.lucene.util.RamUsageEstimator

-     public final class RamUsageEstimator
      extends Object

  Estimates the size (memory representation) of Java objects.
  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 and Description
    --- | ---
    `static class` | `RamUsageEstimator.JvmFeature` JVM diagnostic features.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static long` | `alignObjectSize(long size)` Aligns an object size to be the next multiple of `NUM_BYTES_OBJECT_ALIGNMENT`.
    `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.

  - ### 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)`

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.