Package org.h2.util

# Class MemoryEstimator

java.lang.Object
org.h2.util.MemoryEstimator

public final class MemoryEstimator extends Object
Class MemoryEstimator. Calculation of the amount of memory occupied by keys, values and pages of the MVTable may become expensive operation for complex data types like Row. On the other hand, result of the calculation is used by page cache to limit it's size and determine when eviction is needed. Another usage is to trigger auto commit, based on amount of unsaved changes. In both cases reasonable (lets say ~30%) approximation would be good enough and will do the job. This class replaces exact calculation with an estimate based on a sliding window average of last 256 values. If estimation gets close to the exact value, then next N calculations are skipped and replaced with the estimate, where N depends on the estimation error.

## Method Summary

Modifier and Type
Method
Description
`static <T> int`
`estimateMemory(AtomicLong stats, DataType<T> dataType, T data)`
Estimates memory size of the data based on previous values.
`static <T> int`
`estimateMemory(AtomicLong stats, DataType<T> dataType, T[] storage, int count)`
Estimates memory size of the data set based on previous values.
`static int`
`samplingPct(AtomicLong stats)`
Calculates percentage of how many times actual calculation happened (vs.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### estimateMemory

public static <T> int estimateMemory(AtomicLong stats, DataType<T> dataType, T data)
Estimates memory size of the data based on previous values.

Type Parameters:
  `T` - type of the data
Parameters:
  `stats` - AtomicLong holding statistical data about the estimated sequence
  `dataType` - used for calculation of the next sequence value, if necessary
  `data` - which size is to be calculated as the next sequence value, if necessary
Returns:
  next estimated or calculated value of the sequence

### estimateMemory

public static <T> int estimateMemory(AtomicLong stats, DataType<T> dataType, T[] storage, int count)
Estimates memory size of the data set based on previous values.

Type Parameters:
  `T` - type of the data in the storage
Parameters:
  `stats` - AtomicLong holding statistical data about the estimated sequence
  `dataType` - used for calculation of the next sequence value, if necessary
  `storage` - of the data set, which size is to be calculated
  `count` - number of data items in the storage
Returns:
  next estimated or calculated size of the storage

### samplingPct

public static int samplingPct(AtomicLong stats)
Calculates percentage of how many times actual calculation happened (vs. estimation)

Parameters:
  `stats` - AtomicLong holding statistical data about the estimated sequence
Returns:
  sampling percentage in range 0 - 100