Package freemarker.cache
Class MruCacheStorage
java.lang.Object
freemarker.cache.MruCacheStorage
- All Implemented Interfaces:
CacheStorage
,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.
-
Constructor Summary
ConstructorDescriptionMruCacheStorage(int strongSizeLimit, int softSizeLimit)
Creates a new MRU cache storage with specified maximum cache sizes. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
int
getSize()
Returns a close approximation of the current number of cache entries.int
Returns a close approximation of the current number of soft cache entries.int
Returns the configured upper limit of the number of soft cache entries.int
Returns the current number of strong cache entries.int
Returns the configured upper limit of the number of strong cache entries.void
void
-
Constructor Details
-
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 andInteger.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 Details
-
get
- Specified by:
get
in interfaceCacheStorage
-
put
- Specified by:
put
in interfaceCacheStorage
-
remove
- Specified by:
remove
in interfaceCacheStorage
-
clear
public void clear()- Specified by:
clear
in interfaceCacheStorage
-
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 interfaceCacheStorageWithGetSize
- Since:
- 2.3.21
- See Also:
getStrongSize()
,getSoftSize()
-