Top Description Inners Fields Constructors Methods
org.hsqldb.persist

public Class Cache

extends BaseHashMap
Class Inheritance
Imports
java.util.Comparator, java.util.concurrent.atomic.AtomicInteger, org.hsqldb.error.Error, .ErrorCode, org.hsqldb.lib.ArraySort, .IntIndex, .Iterator, .ObjectComparator, .StopWatch, org.hsqldb.map.BaseHashMap

New implementation of row caching for CACHED tables.

Manages memory for the cache map and its contents based on least recently used clearup.

Also provides services for selecting rows to be saved and passing them to DataFileCache.

Author
Fred Toussi (fredt@users dot sourceforge.net)
Since
1.8.0
Version
2.7.0

Nested and Inner Type Summary

Modifier and TypeClass and Description
pack-priv static class

Field Summary

Modifier and TypeField and Description
private long
private long
private int
pack-priv final DataFileCache
private final BaseHashMap.BaseHashIterator
private int
private final Cache.CachedObjectComparator
private CachedObject[]
pack-priv StopWatch
pack-priv int
pack-priv StopWatch
private final boolean
Inherited from org.hsqldb.map.BaseHashMap:
ACCESS_MAXaccessCountaccessMinaccessTablecomparatoremptyObjectArrayhashIndexhasZeroKeyinitialCapacityintKeyOrValueintKeyTableintValueTableisAccessCountisIntKeyisIntValueisLastAccessCountisListisLongKeyisLongValueisMultiValueisNoValueisObjectKeyisObjectValueloadFactorlongKeyOrValuelongKeyTablelongValueTablemaxCapacityminimizeOnEmptyNO_PURGEnoKeyOrValueobjectKeyOrValueobjectKeyTableobjectValueTableobjectValueTable2objectValueTable3PURGE_ALLPURGE_HALFpurgePolicythresholdzeroKeyIndexzeroOrNullValueCount

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
private void
cleanUp(boolean all)

Reduces the number of rows held in this Cache object.

public void
clear()

Overrides org.hsqldb.map.BaseHashMap.clear.

clears out the memory cache

pack-priv void
public CachedObject
get(long pos)

Returns a row if in memory cache.

protected AtomicInteger
public Iterator<CachedObject>
pack-priv long
pack-priv void
logSaveRowsEvent(int saveCount, long storageSize, long startTime)

pack-priv boolean
preparePut(int storageSize)

pack-priv void
put(CachedObject row)

Adds a row to the cache.

private void
pack-priv void
putUsingReserve(CachedObject row)

reserve slots may be used and storage size may exceed bytesCapacity

pack-priv CachedObject
release(long pos)

Removes an object from memory cache.

public void
releaseRange(IntIndex list, int fileBlockItemCount)

public void
releaseRange(long startPos, long limitPos)

pack-priv void
saveAll()

Writes out all modified cached Rows.

private void
saveRows(int count)

private void
private void
Inherited from org.hsqldb.map.BaseHashMap:
addMultiValaddOrRemoveObjectaddOrUpdatecapacityclonecontainsIntKeycontainsLongKeycontainsObjectKeycontainsValuecontainsValuecontainsValuegetAccessCountCeilinggetLookupgetLookupgetLookupgetLookupgetMultiValuesIteratorgetObjectLookupinsertRowisEmptymultiValueElementCountmultiValueKeyCountmultiValueKeysToArraynextLookuprehashremoveremoveMultiValremoveObjectremoveRowresetresetAccessCountsetAccessCountFloorsizetoArraytoArraytoIntArraytoLongArray

Field Detail

bytesCapacityback to summary
private long bytesCapacity
cacheBytesLengthback to summary
private long cacheBytesLength
capacityback to summary
private int capacity
dataFileCacheback to summary
pack-priv final DataFileCache dataFileCache
objectIteratorback to summary
private final BaseHashMap.BaseHashIterator objectIterator
reserveCountback to summary
private int reserveCount
rowComparatorback to summary
private final Cache.CachedObjectComparator rowComparator
rowTableback to summary
private CachedObject[] rowTable
saveAllTimerback to summary
pack-priv StopWatch saveAllTimer
saveRowCountback to summary
pack-priv int saveRowCount
shadowTimerback to summary
pack-priv StopWatch shadowTimer
updateAccessback to summary
private final boolean updateAccess

Constructor Detail

Cacheback to summary
pack-priv Cache(DataFileCache dfc)

Method Detail

cleanUpback to summary
private void cleanUp(boolean all)

Reduces the number of rows held in this Cache object.

Cleanup is done by checking the accessCount of the Rows and removing the rows with the lowest access count. Index operations require that some rows remain in the cache. This is ensured by prior calling keepInMemory().

clearback to summary
public void clear()

Overrides org.hsqldb.map.BaseHashMap.clear.

clears out the memory cache

clearUnchangedback to summary
pack-priv void clearUnchanged()
getback to summary
public CachedObject get(long pos)

Returns a row if in memory cache.

getAccessCountback to summary
protected AtomicInteger getAccessCount()
getIteratorback to summary
public Iterator<CachedObject> getIterator()
getTotalCachedBlockSizeback to summary
pack-priv long getTotalCachedBlockSize()
logSaveRowsEventback to summary
pack-priv void logSaveRowsEvent(int saveCount, long storageSize, long startTime)
preparePutback to summary
pack-priv boolean preparePut(int storageSize)
putback to summary
pack-priv void put(CachedObject row)

Adds a row to the cache.

putNoCheckback to summary
private void putNoCheck(CachedObject row)
putUsingReserveback to summary
pack-priv void putUsingReserve(CachedObject row)

reserve slots may be used and storage size may exceed bytesCapacity

releaseback to summary
pack-priv CachedObject release(long pos)

Removes an object from memory cache. Does not release the file storage.

releaseRangeback to summary
public void releaseRange(IntIndex list, int fileBlockItemCount)
releaseRangeback to summary
public void releaseRange(long startPos, long limitPos)
saveAllback to summary
pack-priv void saveAll()

Writes out all modified cached Rows.

saveRowsback to summary
private void saveRows(int count)
updateAccessCountsback to summary
private void updateAccessCounts()
updateObjectAccessCountsback to summary
private void updateObjectAccessCounts()
org.hsqldb.persist back to summary

pack-priv final Class Cache.CachedObjectComparator

extends Object
implements Comparator<CachedObject>, ObjectComparator<CachedObject>
Class Inheritance
All Implemented Interfaces
org.hsqldb.lib.ObjectComparator, java.util.Comparator

Field Summary

Modifier and TypeField and Description
pack-priv static final int
pack-priv static final int
pack-priv static final int
private long
private int

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public int
compare(CachedObject a, CachedObject b)

Implements java.util.Comparator.compare.

Compares its two arguments for order.

public boolean
public int
public long
pack-priv void
setType(int type)

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

COMPARE_LAST_ACCESSback to summary
pack-priv static final int COMPARE_LAST_ACCESS
COMPARE_POSITIONback to summary
pack-priv static final int COMPARE_POSITION
COMPARE_SIZEback to summary
pack-priv static final int COMPARE_SIZE
compareCountback to summary
private long compareCount
compareTypeback to summary
private int compareType

Constructor Detail

CachedObjectComparatorback to summary
pack-priv CachedObjectComparator()

Method Detail

compareback to summary
public int compare(CachedObject a, CachedObject b)

Implements java.util.Comparator.compare.

Doc from java.util.Comparator.compare.

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

The implementor must ensure that signum(compare(x, y)) == -signum(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)

The implementor must also ensure that the relation is transitive: ((compare(x, y)>0) && (compare(y, z)>0)) implies compare(x, z)>0.

Finally, the implementor must ensure that compare(x, y)==0 implies that signum(compare(x, z))==signum(compare(y, z)) for all z.

equalsback to summary
public boolean equals(CachedObject a, CachedObject b)

Implements org.hsqldb.lib.ObjectComparator.equals.

hashCodeback to summary
public int hashCode(CachedObject o)

Implements org.hsqldb.lib.ObjectComparator.hashCode.

longKeyback to summary
public long longKey(CachedObject o)

Implements org.hsqldb.lib.ObjectComparator.longKey.

setTypeback to summary
pack-priv void setType(int type)