blob: 23b7e976e4680a13ac3b8a1897b751e74c53f46c [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_281) on Sun Jan 15 15:58:33 CET 2023 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MruCacheStorage (FreeMarker 2.3.32 API)</title>
<meta name="date" content="2023-01-15">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="MruCacheStorage (FreeMarker 2.3.32 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/MruCacheStorage.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../freemarker/cache/MergingTemplateConfigurationFactory.html" title="class in freemarker.cache"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/cache/MultiTemplateLoader.html" title="class in freemarker.cache"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/cache/MruCacheStorage.html" target="_top">Frames</a></li>
<li><a href="MruCacheStorage.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">freemarker.cache</div>
<h2 title="Class MruCacheStorage" class="title">Class MruCacheStorage</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>freemarker.cache.MruCacheStorage</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../freemarker/cache/CacheStorage.html" title="interface in freemarker.cache">CacheStorage</a>, <a href="../../freemarker/cache/CacheStorageWithGetSize.html" title="interface in freemarker.cache">CacheStorageWithGetSize</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">MruCacheStorage</span>
extends java.lang.Object
implements <a href="../../freemarker/cache/CacheStorageWithGetSize.html" title="interface in freemarker.cache">CacheStorageWithGetSize</a></pre>
<div class="block">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 <a href="../../freemarker/cache/StrongCacheStorage.html" title="class in freemarker.cache"><code>StrongCacheStorage</code></a> and
<a href="../../freemarker/cache/SoftCacheStorage.html" title="class in freemarker.cache"><code>SoftCacheStorage</code></a> - 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 <a href="../../freemarker/cache/StrongCacheStorage.html" title="class in freemarker.cache"><code>StrongCacheStorage</code></a> or
<a href="../../freemarker/cache/SoftCacheStorage.html" title="class in freemarker.cache"><code>SoftCacheStorage</code></a> instead, as they can be used by
<a href="../../freemarker/cache/TemplateCache.html" title="class in freemarker.cache"><code>TemplateCache</code></a> concurrently without any synchronization on a 5.0 or
later JRE.
<p>This class is <em>NOT</em> thread-safe. If it's accessed from multiple
threads concurrently, proper synchronization must be provided by the callers.
Note that <a href="../../freemarker/cache/TemplateCache.html" title="class in freemarker.cache"><code>TemplateCache</code></a>, 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
<a href="../../freemarker/cache/SoftCacheStorage.html" title="class in freemarker.cache"><code>SoftCacheStorage</code></a> as well.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/template/Configuration.html#setCacheStorage-freemarker.cache.CacheStorage-"><code>Configuration.setCacheStorage(CacheStorage)</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#MruCacheStorage-int-int-">MruCacheStorage</a></span>(int&nbsp;strongSizeLimit,
int&nbsp;softSizeLimit)</code>
<div class="block">Creates a new MRU cache storage with specified maximum cache sizes.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#clear--">clear</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#get-java.lang.Object-">get</a></span>(java.lang.Object&nbsp;key)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#getSize--">getSize</a></span>()</code>
<div class="block">Returns a close approximation of the current number of cache entries.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#getSoftSize--">getSoftSize</a></span>()</code>
<div class="block">Returns a close approximation of the <em>current</em> number of soft cache entries.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#getSoftSizeLimit--">getSoftSizeLimit</a></span>()</code>
<div class="block">Returns the configured upper limit of the number of soft cache entries.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#getStrongSize--">getStrongSize</a></span>()</code>
<div class="block">Returns the <em>current</em> number of strong cache entries.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#getStrongSizeLimit--">getStrongSizeLimit</a></span>()</code>
<div class="block">Returns the configured upper limit of the number of strong cache entries.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#put-java.lang.Object-java.lang.Object-">put</a></span>(java.lang.Object&nbsp;key,
java.lang.Object&nbsp;value)</code>&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../freemarker/cache/MruCacheStorage.html#remove-java.lang.Object-">remove</a></span>(java.lang.Object&nbsp;key)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="MruCacheStorage-int-int-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>MruCacheStorage</h4>
<pre>public&nbsp;MruCacheStorage(int&nbsp;strongSizeLimit,
int&nbsp;softSizeLimit)</pre>
<div class="block">Creates a new MRU cache storage with specified maximum cache sizes. Each
cache size can vary between 0 and <code>Integer.MAX_VALUE</code>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>strongSizeLimit</code> - the maximum number of strongly referenced templates; when exceeded, the entry used
the least recently will be moved into the soft cache.</dd>
<dd><code>softSizeLimit</code> - the maximum number of softly referenced templates; when exceeded, the entry used
the least recently will be discarded.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="get-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>get</h4>
<pre>public&nbsp;java.lang.Object&nbsp;get(java.lang.Object&nbsp;key)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/cache/CacheStorage.html#get-java.lang.Object-">get</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/cache/CacheStorage.html" title="interface in freemarker.cache">CacheStorage</a></code></dd>
</dl>
</li>
</ul>
<a name="put-java.lang.Object-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>put</h4>
<pre>public&nbsp;void&nbsp;put(java.lang.Object&nbsp;key,
java.lang.Object&nbsp;value)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/cache/CacheStorage.html#put-java.lang.Object-java.lang.Object-">put</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/cache/CacheStorage.html" title="interface in freemarker.cache">CacheStorage</a></code></dd>
</dl>
</li>
</ul>
<a name="remove-java.lang.Object-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>remove</h4>
<pre>public&nbsp;void&nbsp;remove(java.lang.Object&nbsp;key)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/cache/CacheStorage.html#remove-java.lang.Object-">remove</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/cache/CacheStorage.html" title="interface in freemarker.cache">CacheStorage</a></code></dd>
</dl>
</li>
</ul>
<a name="clear--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre>public&nbsp;void&nbsp;clear()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/cache/CacheStorage.html#clear--">clear</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/cache/CacheStorage.html" title="interface in freemarker.cache">CacheStorage</a></code></dd>
</dl>
</li>
</ul>
<a name="getStrongSizeLimit--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getStrongSizeLimit</h4>
<pre>public&nbsp;int&nbsp;getStrongSizeLimit()</pre>
<div class="block">Returns the configured upper limit of the number of strong cache entries.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
</dl>
</li>
</ul>
<a name="getSoftSizeLimit--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSoftSizeLimit</h4>
<pre>public&nbsp;int&nbsp;getSoftSizeLimit()</pre>
<div class="block">Returns the configured upper limit of the number of soft cache entries.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
</dl>
</li>
</ul>
<a name="getStrongSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getStrongSize</h4>
<pre>public&nbsp;int&nbsp;getStrongSize()</pre>
<div class="block">Returns the <em>current</em> number of strong cache entries.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/cache/MruCacheStorage.html#getStrongSizeLimit--"><code>getStrongSizeLimit()</code></a></dd>
</dl>
</li>
</ul>
<a name="getSoftSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSoftSize</h4>
<pre>public&nbsp;int&nbsp;getSoftSize()</pre>
<div class="block">Returns a close approximation of the <em>current</em> number of soft cache entries.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/cache/MruCacheStorage.html#getSoftSizeLimit--"><code>getSoftSizeLimit()</code></a></dd>
</dl>
</li>
</ul>
<a name="getSize--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getSize</h4>
<pre>public&nbsp;int&nbsp;getSize()</pre>
<div class="block">Returns a close approximation of the current number of cache entries.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../freemarker/cache/CacheStorageWithGetSize.html#getSize--">getSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../freemarker/cache/CacheStorageWithGetSize.html" title="interface in freemarker.cache">CacheStorageWithGetSize</a></code></dd>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.3.21</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../freemarker/cache/MruCacheStorage.html#getStrongSize--"><code>getStrongSize()</code></a>,
<a href="../../freemarker/cache/MruCacheStorage.html#getSoftSize--"><code>getSoftSize()</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/MruCacheStorage.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../freemarker/cache/MergingTemplateConfigurationFactory.html" title="class in freemarker.cache"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../freemarker/cache/MultiTemplateLoader.html" title="class in freemarker.cache"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?freemarker/cache/MruCacheStorage.html" target="_top">Frames</a></li>
<li><a href="MruCacheStorage.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>