freemarker.cache

## Class MruCacheStorage

- java.lang.Object
- - freemarker.cache.MruCacheStorage

All Implemented Interfaces:
  CacheStorage, CacheStorageWithGetSize

    public class MruCacheStorage
    extends Object
    implements CacheStorageWithGetSize

A cache storage that implements a two-level Most Recently Used cache. In the first level, items are strongly referenced up to the specified maximum. When the maximum is exceeded, the least recently used item is moved into the second level cache, where they are softly referenced, up to another specified maximum. When the second level maximum is also exceeded, the least recently used item is discarded altogether. This cache storage is a generalization of both `StrongCacheStorage` and `SoftCacheStorage` - the effect of both of them can be achieved by setting one maximum to zero and the other to the largest positive integer. On the other hand, if you wish to use this storage in a strong-only mode, or in a soft-only mode, you might consider using `StrongCacheStorage` or `SoftCacheStorage` instead, as they can be used by `TemplateCache` concurrently without any synchronization on a 5.0 or later JRE.

This class is NOT thread-safe. If it's accessed from multiple threads concurrently, proper synchronization must be provided by the callers. Note that `TemplateCache`, the natural user of this class provides the necessary synchronizations when it uses the class. Also you might consider whether you need this sort of a mixed storage at all in your solution, as in most cases SoftCacheStorage can also be sufficient. SoftCacheStorage will use Java soft references, and they already use access timestamps internally to bias the garbage collector against clearing recently used references, so you can get reasonably good (and memory-sensitive) most-recently-used caching through `SoftCacheStorage` as well.

See Also:
  `Configuration.setCacheStorage(CacheStorage)`

### Constructor Summary

Constructors
Constructor and Description
`MruCacheStorage(int strongSizeLimit, int softSizeLimit)` Creates a new MRU cache storage with specified maximum cache sizes.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `clear()`
`Object` `get(Object key)`
`int` `getSize()` Returns a close approximation of the current number of cache entries.
`int` `getSoftSize()` Returns a close approximation of the current number of soft cache entries.
`int` `getSoftSizeLimit()` Returns the configured upper limit of the number of soft cache entries.
`int` `getStrongSize()` Returns the current number of strong cache entries.
`int` `getStrongSizeLimit()` Returns the configured upper limit of the number of strong cache entries.
`void` `put(Object key, Object value)`
`void` `remove(Object key)`

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

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

### Constructor Detail

#### MruCacheStorage

    public MruCacheStorage(int strongSizeLimit,
                           int softSizeLimit)

Creates a new MRU cache storage with specified maximum cache sizes. Each cache size can vary between 0 and `Integer.MAX_VALUE`.

Parameters:
  `strongSizeLimit` - the maximum number of strongly referenced templates; when exceeded, the entry used the least recently will be moved into the soft cache.
  `softSizeLimit` - the maximum number of softly referenced templates; when exceeded, the entry used the least recently will be discarded.

### Method Detail

#### get

    public Object get(Object key)

Specified by:
  `get` in interface `CacheStorage`

#### put

    public void put(Object key,
                    Object value)

Specified by:
  `put` in interface `CacheStorage`

#### remove

    public void remove(Object key)

Specified by:
  `remove` in interface `CacheStorage`

#### clear

    public void clear()

Specified by:
  `clear` in interface `CacheStorage`

#### getStrongSizeLimit

    public int getStrongSizeLimit()

Returns the configured upper limit of the number of strong cache entries.

Since:
  2.3.21

#### getSoftSizeLimit

    public int getSoftSizeLimit()

Returns the configured upper limit of the number of soft cache entries.

Since:
  2.3.21

#### getStrongSize

    public int getStrongSize()

Returns the current number of strong cache entries.

Since:
  2.3.21
See Also:
  `getStrongSizeLimit()`

#### getSoftSize

    public int getSoftSize()

Returns a close approximation of the current number of soft cache entries.

Since:
  2.3.21
See Also:
  `getSoftSizeLimit()`

#### getSize

    public int getSize()

Returns a close approximation of the current number of cache entries.

Specified by:
  `getSize` in interface `CacheStorageWithGetSize`
Since:
  2.3.21
See Also:
  `getStrongSize()`, `getSoftSize()`