CoherenceTM v3.4
Copyright© 2000-2008 by Oracle Corporation

com.tangosol.net.cache
Class SimpleMemoryCalculator

java.lang.Object
  extended by com.tangosol.util.Base
      extended by com.tangosol.net.cache.SimpleMemoryCalculator
All Implemented Interfaces:
OldCache.UnitCalculator
Direct Known Subclasses:
BinaryMemoryCalculator

public class SimpleMemoryCalculator
extends Base
implements OldCache.UnitCalculator

A UnitCalculator implementation that weighs a cache entry based upon the amount of physical memory (in bytes) required to store the entry.

This implementation can only determine an accurate entry size if both the entry key and value object types are one of the following classes (or an array thereof):

If either the key or value object is not one of these types, an exception will be thrown during the unit calculation.

Author:
jh 2005.12.20

Field Summary
static java.util.Map MAP_FIXED_SIZES
          An immutable map of fixed-sized classes to instance size (in bytes).
static int SIZE_BINARY
          The minimum size (in bytes) of a Binary object.
static int SIZE_BOOLEAN
          The size (in bytes) of a Boolean object.
static int SIZE_BYTE
          The size (in bytes) of a Byte object.
static int SIZE_CHARACTER
          The size (in bytes) of a Character object.
static int SIZE_DOUBLE
          The size (in bytes) of a Double object.
static int SIZE_ENTRY
          The minimum size (in bytes) of an LocalCache.Entry object.
static int SIZE_FLOAT
          The size (in bytes) of a Float object.
static int SIZE_INTEGER
          The size (in bytes) of a Integer object.
static int SIZE_LONG
          The size (in bytes) of a Long object.
static int SIZE_OBJECT
          The size (in bytes) of an Object.
static int SIZE_OBJECT_REF
          The size (in bytes) of an object reference.
static int SIZE_SHORT
          The size (in bytes) of a Short object.
static int SIZE_STRING
          The minimum size (in bytes) of a String object.
 
Constructor Summary
SimpleMemoryCalculator()
           
 
Method Summary
protected static int calculateShallowSize(java.lang.Class clz)
          Calculate the approximate number of bytes required to store an instance of the given class and its non-static fields in memory.
 int calculateUnits(java.lang.Object oKey, java.lang.Object oValue)
          Calculate a cache cost for the specified cache entry key and value.
static void main(java.lang.String[] asArg)
          Unit test.
protected  int padMemorySize(int cb)
          Round the given number of bytes to the next closest integer that is divisible by 8.
protected  int sizeOf(java.lang.Class clz)
          Determine the minimum number of bytes required to store an instance of the given fixed-sized class in memory.
protected  int sizeOf(java.lang.Object o)
          Estimate the number of bytes of memory consumed by the given object.
 

Field Detail

SIZE_OBJECT_REF

public static final int SIZE_OBJECT_REF
The size (in bytes) of an object reference.

On a 32 bit JVM, an object reference is 4 bytes. On a 64 bit JVM, an object reference is 8 bytes.


SIZE_OBJECT

public static final int SIZE_OBJECT
The size (in bytes) of an Object.


SIZE_BOOLEAN

public static final int SIZE_BOOLEAN
The size (in bytes) of a Boolean object.


SIZE_BYTE

public static final int SIZE_BYTE
The size (in bytes) of a Byte object.


SIZE_SHORT

public static final int SIZE_SHORT
The size (in bytes) of a Short object.


SIZE_CHARACTER

public static final int SIZE_CHARACTER
The size (in bytes) of a Character object.


SIZE_INTEGER

public static final int SIZE_INTEGER
The size (in bytes) of a Integer object.


SIZE_FLOAT

public static final int SIZE_FLOAT
The size (in bytes) of a Float object.


SIZE_LONG

public static final int SIZE_LONG
The size (in bytes) of a Long object.


SIZE_DOUBLE

public static final int SIZE_DOUBLE
The size (in bytes) of a Double object.


SIZE_STRING

public static final int SIZE_STRING
The minimum size (in bytes) of a String object.


SIZE_BINARY

public static final int SIZE_BINARY
The minimum size (in bytes) of a Binary object.


SIZE_ENTRY

public static final int SIZE_ENTRY
The minimum size (in bytes) of an LocalCache.Entry object.


MAP_FIXED_SIZES

public static final java.util.Map MAP_FIXED_SIZES
An immutable map of fixed-sized classes to instance size (in bytes).

Constructor Detail

SimpleMemoryCalculator

public SimpleMemoryCalculator()
Method Detail

calculateUnits

public int calculateUnits(java.lang.Object oKey,
                          java.lang.Object oValue)
Calculate a cache cost for the specified cache entry key and value.

Specified by:
calculateUnits in interface OldCache.UnitCalculator
Parameters:
oKey - the cache key to evaluate for unit cost
oValue - the cache value to evaluate for unit cost
Returns:
an integer value 0 or greater, with a larger value signifying a higher cost

sizeOf

protected int sizeOf(java.lang.Object o)
Estimate the number of bytes of memory consumed by the given object.

The calculation is based on the class of the given object:

Class Size
boolean 1
byte 1
short 2
char 2
int 4
float 4
long 8
double 8
Object SIZE_OBJECT
Boolean SIZE_OBJECT + 1
Byte SIZE_OBJECT + 1
Short SIZE_OBJECT + 2
Character SIZE_OBJECT + 2
Integer SIZE_OBJECT + 4
Float SIZE_OBJECT + 4
Long SIZE_OBJECT + 8
Double SIZE_OBJECT + 8
String SIZE_STRING + 2*length()
Binary SIZE_BINARY + length()
isArray() 16 + [element size]*length()

Parameters:
o - the object to measure the size of
Returns:
an estimate of the number of bytes required to store the given object in memory
Throws:
java.lang.IllegalArgumentException - if the type of the object is not one of the classes listed above

sizeOf

protected int sizeOf(java.lang.Class clz)
Determine the minimum number of bytes required to store an instance of the given fixed-sized class in memory.

The calculation is based on the following table:

Class Size
boolean 1
byte 1
short 2
char 2
int 4
float 4
long 8
double 8
Object SIZE_OBJECT
Boolean SIZE_OBJECT + 1
Byte SIZE_OBJECT + 1
Short SIZE_OBJECT + 2
Character SIZE_OBJECT + 2
Integer SIZE_OBJECT + 4
Float SIZE_OBJECT + 4
Long SIZE_OBJECT + 8
Double SIZE_OBJECT + 8

Parameters:
clz - the target class
Returns:
the minimum number of bytes required to store an instance of the given class in memory
Throws:
java.lang.IllegalArgumentException - if the type of the object is not one of the classes listed above

padMemorySize

protected int padMemorySize(int cb)
Round the given number of bytes to the next closest integer that is divisible by 8.

This method is used to pad the result of a memory calculation assuming that fields are ordered to minimize padding and that allocation granularity is 8 bytes.

Parameters:
cb - the number of bytes to round
Returns:
the input, rounded up to the nearest multiple of 8

calculateShallowSize

protected static int calculateShallowSize(java.lang.Class clz)
Calculate the approximate number of bytes required to store an instance of the given class and its non-static fields in memory.

The size calculation is shallow, in that fields that are references to variable-sized classes are not included in the estimate.

Parameters:
clz - the target class
Returns:
the number of bytes required to store an instance of the given class, including its non-static members

main

public static void main(java.lang.String[] asArg)
Unit test.

Usage:

 java com.tangosol.net.cache.SimpleMemoryCalculator [class name]
 

Parameters:
asArg - command line arguments

CoherenceTM v3.4
Copyright© 2000-2008 by Oracle Corporation