<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.util;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.lang.ref.ReferenceQueue;</a>
<span class="sourceLineNo">022</span><a id="line.22">import java.lang.ref.SoftReference;</a>
<span class="sourceLineNo">023</span><a id="line.23">import java.util.*;</a>
<span class="sourceLineNo">024</span><a id="line.24">import java.util.concurrent.ConcurrentHashMap;</a>
<span class="sourceLineNo">025</span><a id="line.25">import java.util.concurrent.ConcurrentLinkedQueue;</a>
<span class="sourceLineNo">026</span><a id="line.26">import java.util.concurrent.locks.ReentrantLock;</a>
<span class="sourceLineNo">027</span><a id="line.27"></a>
<span class="sourceLineNo">028</span><a id="line.28"></a>
<span class="sourceLineNo">029</span><a id="line.29">/**</a>
<span class="sourceLineNo">030</span><a id="line.30"> * A &lt;code&gt;&lt;em&gt;Soft&lt;/em&gt;HashMap&lt;/code&gt; is a memory-constrained map that stores its &lt;em&gt;values&lt;/em&gt; in</a>
<span class="sourceLineNo">031</span><a id="line.31"> * {@link SoftReference SoftReference}s.  (Contrast this with the JDK's</a>
<span class="sourceLineNo">032</span><a id="line.32"> * {@link WeakHashMap WeakHashMap}, which uses weak references for its &lt;em&gt;keys&lt;/em&gt;, which is of little value if you</a>
<span class="sourceLineNo">033</span><a id="line.33"> * want the cache to auto-resize itself based on memory constraints).</a>
<span class="sourceLineNo">034</span><a id="line.34"> * &lt;p/&gt;</a>
<span class="sourceLineNo">035</span><a id="line.35"> * Having the values wrapped by soft references allows the cache to automatically reduce its size based on memory</a>
<span class="sourceLineNo">036</span><a id="line.36"> * limitations and garbage collection.  This ensures that the cache will not cause memory leaks by holding strong</a>
<span class="sourceLineNo">037</span><a id="line.37"> * references to all of its values.</a>
<span class="sourceLineNo">038</span><a id="line.38"> * &lt;p/&gt;</a>
<span class="sourceLineNo">039</span><a id="line.39"> * This class is a generics-enabled Map based on initial ideas from Heinz Kabutz's and Sydney Redelinghuys's</a>
<span class="sourceLineNo">040</span><a id="line.40"> * &lt;a href="http://www.javaspecialists.eu/archive/Issue015.html"&gt;publicly posted version (with their approval)&lt;/a&gt;, with</a>
<span class="sourceLineNo">041</span><a id="line.41"> * continued modifications.</a>
<span class="sourceLineNo">042</span><a id="line.42"> * &lt;p/&gt;</a>
<span class="sourceLineNo">043</span><a id="line.43"> * This implementation is thread-safe and usable in concurrent environments.</a>
<span class="sourceLineNo">044</span><a id="line.44"> *</a>
<span class="sourceLineNo">045</span><a id="line.45"> * @since 1.0</a>
<span class="sourceLineNo">046</span><a id="line.46"> */</a>
<span class="sourceLineNo">047</span><a id="line.47">public class SoftHashMap&lt;K, V&gt; implements Map&lt;K, V&gt; {</a>
<span class="sourceLineNo">048</span><a id="line.48"></a>
<span class="sourceLineNo">049</span><a id="line.49">    /**</a>
<span class="sourceLineNo">050</span><a id="line.50">     * The default value of the RETENTION_SIZE attribute, equal to 100.</a>
<span class="sourceLineNo">051</span><a id="line.51">     */</a>
<span class="sourceLineNo">052</span><a id="line.52">    private static final int DEFAULT_RETENTION_SIZE = 100;</a>
<span class="sourceLineNo">053</span><a id="line.53"></a>
<span class="sourceLineNo">054</span><a id="line.54">    /**</a>
<span class="sourceLineNo">055</span><a id="line.55">     * The internal HashMap that will hold the SoftReference.</a>
<span class="sourceLineNo">056</span><a id="line.56">     */</a>
<span class="sourceLineNo">057</span><a id="line.57">    private final Map&lt;K, SoftValue&lt;V, K&gt;&gt; map;</a>
<span class="sourceLineNo">058</span><a id="line.58"></a>
<span class="sourceLineNo">059</span><a id="line.59">    /**</a>
<span class="sourceLineNo">060</span><a id="line.60">     * The number of strong references to hold internally, that is, the number of instances to prevent</a>
<span class="sourceLineNo">061</span><a id="line.61">     * from being garbage collected automatically (unlike other soft references).</a>
<span class="sourceLineNo">062</span><a id="line.62">     */</a>
<span class="sourceLineNo">063</span><a id="line.63">    private final int RETENTION_SIZE;</a>
<span class="sourceLineNo">064</span><a id="line.64"></a>
<span class="sourceLineNo">065</span><a id="line.65">    /**</a>
<span class="sourceLineNo">066</span><a id="line.66">     * The FIFO list of strong references (not to be garbage collected), order of last access.</a>
<span class="sourceLineNo">067</span><a id="line.67">     */</a>
<span class="sourceLineNo">068</span><a id="line.68">    private final Queue&lt;V&gt; strongReferences; //guarded by 'strongReferencesLock'</a>
<span class="sourceLineNo">069</span><a id="line.69">    private final ReentrantLock strongReferencesLock;</a>
<span class="sourceLineNo">070</span><a id="line.70"></a>
<span class="sourceLineNo">071</span><a id="line.71">    /**</a>
<span class="sourceLineNo">072</span><a id="line.72">     * Reference queue for cleared SoftReference objects.</a>
<span class="sourceLineNo">073</span><a id="line.73">     */</a>
<span class="sourceLineNo">074</span><a id="line.74">    private final ReferenceQueue&lt;? super V&gt; queue;</a>
<span class="sourceLineNo">075</span><a id="line.75"></a>
<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
<span class="sourceLineNo">077</span><a id="line.77">     * Creates a new SoftHashMap with a default retention size size of</a>
<span class="sourceLineNo">078</span><a id="line.78">     * {@link #DEFAULT_RETENTION_SIZE DEFAULT_RETENTION_SIZE} (100 entries).</a>
<span class="sourceLineNo">079</span><a id="line.79">     *</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @see #SoftHashMap(int)</a>
<span class="sourceLineNo">081</span><a id="line.81">     */</a>
<span class="sourceLineNo">082</span><a id="line.82">    public SoftHashMap() {</a>
<span class="sourceLineNo">083</span><a id="line.83">        this(DEFAULT_RETENTION_SIZE);</a>
<span class="sourceLineNo">084</span><a id="line.84">    }</a>
<span class="sourceLineNo">085</span><a id="line.85"></a>
<span class="sourceLineNo">086</span><a id="line.86">    /**</a>
<span class="sourceLineNo">087</span><a id="line.87">     * Creates a new SoftHashMap with the specified retention size.</a>
<span class="sourceLineNo">088</span><a id="line.88">     * &lt;p/&gt;</a>
<span class="sourceLineNo">089</span><a id="line.89">     * The retention size (n) is the total number of most recent entries in the map that will be strongly referenced</a>
<span class="sourceLineNo">090</span><a id="line.90">     * (ie 'retained') to prevent them from being eagerly garbage collected.  That is, the point of a SoftHashMap is to</a>
<span class="sourceLineNo">091</span><a id="line.91">     * allow the garbage collector to remove as many entries from this map as it desires, but there will always be (n)</a>
<span class="sourceLineNo">092</span><a id="line.92">     * elements retained after a GC due to the strong references.</a>
<span class="sourceLineNo">093</span><a id="line.93">     * &lt;p/&gt;</a>
<span class="sourceLineNo">094</span><a id="line.94">     * Note that in a highly concurrent environments the exact total number of strong references may differ slightly</a>
<span class="sourceLineNo">095</span><a id="line.95">     * than the actual &lt;code&gt;retentionSize&lt;/code&gt; value.  This number is intended to be a best-effort retention low</a>
<span class="sourceLineNo">096</span><a id="line.96">     * water mark.</a>
<span class="sourceLineNo">097</span><a id="line.97">     *</a>
<span class="sourceLineNo">098</span><a id="line.98">     * @param retentionSize the total number of most recent entries in the map that will be strongly referenced</a>
<span class="sourceLineNo">099</span><a id="line.99">     *                      (retained), preventing them from being eagerly garbage collected by the JVM.</a>
<span class="sourceLineNo">100</span><a id="line.100">     */</a>
<span class="sourceLineNo">101</span><a id="line.101">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">102</span><a id="line.102">    public SoftHashMap(int retentionSize) {</a>
<span class="sourceLineNo">103</span><a id="line.103">        super();</a>
<span class="sourceLineNo">104</span><a id="line.104">        RETENTION_SIZE = Math.max(0, retentionSize);</a>
<span class="sourceLineNo">105</span><a id="line.105">        queue = new ReferenceQueue&lt;V&gt;();</a>
<span class="sourceLineNo">106</span><a id="line.106">        strongReferencesLock = new ReentrantLock();</a>
<span class="sourceLineNo">107</span><a id="line.107">        map = new ConcurrentHashMap&lt;K, SoftValue&lt;V, K&gt;&gt;();</a>
<span class="sourceLineNo">108</span><a id="line.108">        strongReferences = new ConcurrentLinkedQueue&lt;V&gt;();</a>
<span class="sourceLineNo">109</span><a id="line.109">    }</a>
<span class="sourceLineNo">110</span><a id="line.110"></a>
<span class="sourceLineNo">111</span><a id="line.111">    /**</a>
<span class="sourceLineNo">112</span><a id="line.112">     * Creates a {@code SoftHashMap} backed by the specified {@code source}, with a default retention</a>
<span class="sourceLineNo">113</span><a id="line.113">     * size of {@link #DEFAULT_RETENTION_SIZE DEFAULT_RETENTION_SIZE} (100 entries).</a>
<span class="sourceLineNo">114</span><a id="line.114">     *</a>
<span class="sourceLineNo">115</span><a id="line.115">     * @param source the backing map to populate this {@code SoftHashMap}</a>
<span class="sourceLineNo">116</span><a id="line.116">     * @see #SoftHashMap(Map,int)</a>
<span class="sourceLineNo">117</span><a id="line.117">     */</a>
<span class="sourceLineNo">118</span><a id="line.118">    public SoftHashMap(Map&lt;K, V&gt; source) {</a>
<span class="sourceLineNo">119</span><a id="line.119">        this(DEFAULT_RETENTION_SIZE);</a>
<span class="sourceLineNo">120</span><a id="line.120">        putAll(source);</a>
<span class="sourceLineNo">121</span><a id="line.121">    }</a>
<span class="sourceLineNo">122</span><a id="line.122"></a>
<span class="sourceLineNo">123</span><a id="line.123">    /**</a>
<span class="sourceLineNo">124</span><a id="line.124">     * Creates a {@code SoftHashMap} backed by the specified {@code source}, with the specified retention size.</a>
<span class="sourceLineNo">125</span><a id="line.125">     * &lt;p/&gt;</a>
<span class="sourceLineNo">126</span><a id="line.126">     * The retention size (n) is the total number of most recent entries in the map that will be strongly referenced</a>
<span class="sourceLineNo">127</span><a id="line.127">     * (ie 'retained') to prevent them from being eagerly garbage collected.  That is, the point of a SoftHashMap is to</a>
<span class="sourceLineNo">128</span><a id="line.128">     * allow the garbage collector to remove as many entries from this map as it desires, but there will always be (n)</a>
<span class="sourceLineNo">129</span><a id="line.129">     * elements retained after a GC due to the strong references.</a>
<span class="sourceLineNo">130</span><a id="line.130">     * &lt;p/&gt;</a>
<span class="sourceLineNo">131</span><a id="line.131">     * Note that in a highly concurrent environments the exact total number of strong references may differ slightly</a>
<span class="sourceLineNo">132</span><a id="line.132">     * than the actual &lt;code&gt;retentionSize&lt;/code&gt; value.  This number is intended to be a best-effort retention low</a>
<span class="sourceLineNo">133</span><a id="line.133">     * water mark.</a>
<span class="sourceLineNo">134</span><a id="line.134">     *</a>
<span class="sourceLineNo">135</span><a id="line.135">     * @param source        the backing map to populate this {@code SoftHashMap}</a>
<span class="sourceLineNo">136</span><a id="line.136">     * @param retentionSize the total number of most recent entries in the map that will be strongly referenced</a>
<span class="sourceLineNo">137</span><a id="line.137">     *                      (retained), preventing them from being eagerly garbage collected by the JVM.</a>
<span class="sourceLineNo">138</span><a id="line.138">     */</a>
<span class="sourceLineNo">139</span><a id="line.139">    public SoftHashMap(Map&lt;K, V&gt; source, int retentionSize) {</a>
<span class="sourceLineNo">140</span><a id="line.140">        this(retentionSize);</a>
<span class="sourceLineNo">141</span><a id="line.141">        putAll(source);</a>
<span class="sourceLineNo">142</span><a id="line.142">    }</a>
<span class="sourceLineNo">143</span><a id="line.143"></a>
<span class="sourceLineNo">144</span><a id="line.144">    public V get(Object key) {</a>
<span class="sourceLineNo">145</span><a id="line.145">        processQueue();</a>
<span class="sourceLineNo">146</span><a id="line.146"></a>
<span class="sourceLineNo">147</span><a id="line.147">        V result = null;</a>
<span class="sourceLineNo">148</span><a id="line.148">        SoftValue&lt;V, K&gt; value = map.get(key);</a>
<span class="sourceLineNo">149</span><a id="line.149"></a>
<span class="sourceLineNo">150</span><a id="line.150">        if (value != null) {</a>
<span class="sourceLineNo">151</span><a id="line.151">            //unwrap the 'real' value from the SoftReference</a>
<span class="sourceLineNo">152</span><a id="line.152">            result = value.get();</a>
<span class="sourceLineNo">153</span><a id="line.153">            if (result == null) {</a>
<span class="sourceLineNo">154</span><a id="line.154">                //The wrapped value was garbage collected, so remove this entry from the backing map:</a>
<span class="sourceLineNo">155</span><a id="line.155">                //noinspection SuspiciousMethodCalls</a>
<span class="sourceLineNo">156</span><a id="line.156">                map.remove(key);</a>
<span class="sourceLineNo">157</span><a id="line.157">            } else {</a>
<span class="sourceLineNo">158</span><a id="line.158">                //Add this value to the beginning of the strong reference queue (FIFO).</a>
<span class="sourceLineNo">159</span><a id="line.159">                addToStrongReferences(result);</a>
<span class="sourceLineNo">160</span><a id="line.160">            }</a>
<span class="sourceLineNo">161</span><a id="line.161">        }</a>
<span class="sourceLineNo">162</span><a id="line.162">        return result;</a>
<span class="sourceLineNo">163</span><a id="line.163">    }</a>
<span class="sourceLineNo">164</span><a id="line.164"></a>
<span class="sourceLineNo">165</span><a id="line.165">    private void addToStrongReferences(V result) {</a>
<span class="sourceLineNo">166</span><a id="line.166">        strongReferencesLock.lock();</a>
<span class="sourceLineNo">167</span><a id="line.167">        try {</a>
<span class="sourceLineNo">168</span><a id="line.168">            strongReferences.add(result);</a>
<span class="sourceLineNo">169</span><a id="line.169">            trimStrongReferencesIfNecessary();</a>
<span class="sourceLineNo">170</span><a id="line.170">        } finally {</a>
<span class="sourceLineNo">171</span><a id="line.171">            strongReferencesLock.unlock();</a>
<span class="sourceLineNo">172</span><a id="line.172">        }</a>
<span class="sourceLineNo">173</span><a id="line.173"></a>
<span class="sourceLineNo">174</span><a id="line.174">    }</a>
<span class="sourceLineNo">175</span><a id="line.175"></a>
<span class="sourceLineNo">176</span><a id="line.176">    //Guarded by the strongReferencesLock in the addToStrongReferences method</a>
<span class="sourceLineNo">177</span><a id="line.177"></a>
<span class="sourceLineNo">178</span><a id="line.178">    private void trimStrongReferencesIfNecessary() {</a>
<span class="sourceLineNo">179</span><a id="line.179">        //trim the strong ref queue if necessary:</a>
<span class="sourceLineNo">180</span><a id="line.180">        while (strongReferences.size() &gt; RETENTION_SIZE) {</a>
<span class="sourceLineNo">181</span><a id="line.181">            strongReferences.poll();</a>
<span class="sourceLineNo">182</span><a id="line.182">        }</a>
<span class="sourceLineNo">183</span><a id="line.183">    }</a>
<span class="sourceLineNo">184</span><a id="line.184"></a>
<span class="sourceLineNo">185</span><a id="line.185">    /**</a>
<span class="sourceLineNo">186</span><a id="line.186">     * Traverses the ReferenceQueue and removes garbage-collected SoftValue objects from the backing map</a>
<span class="sourceLineNo">187</span><a id="line.187">     * by looking them up using the SoftValue.key data member.</a>
<span class="sourceLineNo">188</span><a id="line.188">     */</a>
<span class="sourceLineNo">189</span><a id="line.189">    private void processQueue() {</a>
<span class="sourceLineNo">190</span><a id="line.190">        SoftValue sv;</a>
<span class="sourceLineNo">191</span><a id="line.191">        while ((sv = (SoftValue) queue.poll()) != null) {</a>
<span class="sourceLineNo">192</span><a id="line.192">            //noinspection SuspiciousMethodCalls</a>
<span class="sourceLineNo">193</span><a id="line.193">            map.remove(sv.key); // we can access private data!</a>
<span class="sourceLineNo">194</span><a id="line.194">        }</a>
<span class="sourceLineNo">195</span><a id="line.195">    }</a>
<span class="sourceLineNo">196</span><a id="line.196"></a>
<span class="sourceLineNo">197</span><a id="line.197">    public boolean isEmpty() {</a>
<span class="sourceLineNo">198</span><a id="line.198">        processQueue();</a>
<span class="sourceLineNo">199</span><a id="line.199">        return map.isEmpty();</a>
<span class="sourceLineNo">200</span><a id="line.200">    }</a>
<span class="sourceLineNo">201</span><a id="line.201"></a>
<span class="sourceLineNo">202</span><a id="line.202">    public boolean containsKey(Object key) {</a>
<span class="sourceLineNo">203</span><a id="line.203">        processQueue();</a>
<span class="sourceLineNo">204</span><a id="line.204">        return map.containsKey(key);</a>
<span class="sourceLineNo">205</span><a id="line.205">    }</a>
<span class="sourceLineNo">206</span><a id="line.206"></a>
<span class="sourceLineNo">207</span><a id="line.207">    public boolean containsValue(Object value) {</a>
<span class="sourceLineNo">208</span><a id="line.208">        processQueue();</a>
<span class="sourceLineNo">209</span><a id="line.209">        Collection values = values();</a>
<span class="sourceLineNo">210</span><a id="line.210">        return values != null &amp;&amp; values.contains(value);</a>
<span class="sourceLineNo">211</span><a id="line.211">    }</a>
<span class="sourceLineNo">212</span><a id="line.212"></a>
<span class="sourceLineNo">213</span><a id="line.213">    public void putAll(Map&lt;? extends K, ? extends V&gt; m) {</a>
<span class="sourceLineNo">214</span><a id="line.214">        if (m == null || m.isEmpty()) {</a>
<span class="sourceLineNo">215</span><a id="line.215">            processQueue();</a>
<span class="sourceLineNo">216</span><a id="line.216">            return;</a>
<span class="sourceLineNo">217</span><a id="line.217">        }</a>
<span class="sourceLineNo">218</span><a id="line.218">        for (Map.Entry&lt;? extends K, ? extends V&gt; entry : m.entrySet()) {</a>
<span class="sourceLineNo">219</span><a id="line.219">            put(entry.getKey(), entry.getValue());</a>
<span class="sourceLineNo">220</span><a id="line.220">        }</a>
<span class="sourceLineNo">221</span><a id="line.221">    }</a>
<span class="sourceLineNo">222</span><a id="line.222"></a>
<span class="sourceLineNo">223</span><a id="line.223">    public Set&lt;K&gt; keySet() {</a>
<span class="sourceLineNo">224</span><a id="line.224">        processQueue();</a>
<span class="sourceLineNo">225</span><a id="line.225">        return map.keySet();</a>
<span class="sourceLineNo">226</span><a id="line.226">    }</a>
<span class="sourceLineNo">227</span><a id="line.227"></a>
<span class="sourceLineNo">228</span><a id="line.228">    public Collection&lt;V&gt; values() {</a>
<span class="sourceLineNo">229</span><a id="line.229">        processQueue();</a>
<span class="sourceLineNo">230</span><a id="line.230">        Collection&lt;K&gt; keys = map.keySet();</a>
<span class="sourceLineNo">231</span><a id="line.231">        if (keys.isEmpty()) {</a>
<span class="sourceLineNo">232</span><a id="line.232">            //noinspection unchecked</a>
<span class="sourceLineNo">233</span><a id="line.233">            return Collections.EMPTY_SET;</a>
<span class="sourceLineNo">234</span><a id="line.234">        }</a>
<span class="sourceLineNo">235</span><a id="line.235">        Collection&lt;V&gt; values = new ArrayList&lt;V&gt;(keys.size());</a>
<span class="sourceLineNo">236</span><a id="line.236">        for (K key : keys) {</a>
<span class="sourceLineNo">237</span><a id="line.237">            V v = get(key);</a>
<span class="sourceLineNo">238</span><a id="line.238">            if (v != null) {</a>
<span class="sourceLineNo">239</span><a id="line.239">                values.add(v);</a>
<span class="sourceLineNo">240</span><a id="line.240">            }</a>
<span class="sourceLineNo">241</span><a id="line.241">        }</a>
<span class="sourceLineNo">242</span><a id="line.242">        return values;</a>
<span class="sourceLineNo">243</span><a id="line.243">    }</a>
<span class="sourceLineNo">244</span><a id="line.244"></a>
<span class="sourceLineNo">245</span><a id="line.245">    /**</a>
<span class="sourceLineNo">246</span><a id="line.246">     * Creates a new entry, but wraps the value in a SoftValue instance to enable auto garbage collection.</a>
<span class="sourceLineNo">247</span><a id="line.247">     */</a>
<span class="sourceLineNo">248</span><a id="line.248">    public V put(K key, V value) {</a>
<span class="sourceLineNo">249</span><a id="line.249">        processQueue(); // throw out garbage collected values first</a>
<span class="sourceLineNo">250</span><a id="line.250">        SoftValue&lt;V, K&gt; sv = new SoftValue&lt;V, K&gt;(value, key, queue);</a>
<span class="sourceLineNo">251</span><a id="line.251">        SoftValue&lt;V, K&gt; previous = map.put(key, sv);</a>
<span class="sourceLineNo">252</span><a id="line.252">        addToStrongReferences(value);</a>
<span class="sourceLineNo">253</span><a id="line.253">        return previous != null ? previous.get() : null;</a>
<span class="sourceLineNo">254</span><a id="line.254">    }</a>
<span class="sourceLineNo">255</span><a id="line.255"></a>
<span class="sourceLineNo">256</span><a id="line.256">    public V remove(Object key) {</a>
<span class="sourceLineNo">257</span><a id="line.257">        processQueue(); // throw out garbage collected values first</a>
<span class="sourceLineNo">258</span><a id="line.258">        SoftValue&lt;V, K&gt; raw = map.remove(key);</a>
<span class="sourceLineNo">259</span><a id="line.259">        return raw != null ? raw.get() : null;</a>
<span class="sourceLineNo">260</span><a id="line.260">    }</a>
<span class="sourceLineNo">261</span><a id="line.261"></a>
<span class="sourceLineNo">262</span><a id="line.262">    public void clear() {</a>
<span class="sourceLineNo">263</span><a id="line.263">        strongReferencesLock.lock();</a>
<span class="sourceLineNo">264</span><a id="line.264">        try {</a>
<span class="sourceLineNo">265</span><a id="line.265">            strongReferences.clear();</a>
<span class="sourceLineNo">266</span><a id="line.266">        } finally {</a>
<span class="sourceLineNo">267</span><a id="line.267">            strongReferencesLock.unlock();</a>
<span class="sourceLineNo">268</span><a id="line.268">        }</a>
<span class="sourceLineNo">269</span><a id="line.269">        processQueue(); // throw out garbage collected values</a>
<span class="sourceLineNo">270</span><a id="line.270">        map.clear();</a>
<span class="sourceLineNo">271</span><a id="line.271">    }</a>
<span class="sourceLineNo">272</span><a id="line.272"></a>
<span class="sourceLineNo">273</span><a id="line.273">    public int size() {</a>
<span class="sourceLineNo">274</span><a id="line.274">        processQueue(); // throw out garbage collected values first</a>
<span class="sourceLineNo">275</span><a id="line.275">        return map.size();</a>
<span class="sourceLineNo">276</span><a id="line.276">    }</a>
<span class="sourceLineNo">277</span><a id="line.277"></a>
<span class="sourceLineNo">278</span><a id="line.278">    public Set&lt;Map.Entry&lt;K, V&gt;&gt; entrySet() {</a>
<span class="sourceLineNo">279</span><a id="line.279">        processQueue(); // throw out garbage collected values first</a>
<span class="sourceLineNo">280</span><a id="line.280">        Collection&lt;K&gt; keys = map.keySet();</a>
<span class="sourceLineNo">281</span><a id="line.281">        if (keys.isEmpty()) {</a>
<span class="sourceLineNo">282</span><a id="line.282">            //noinspection unchecked</a>
<span class="sourceLineNo">283</span><a id="line.283">            return Collections.EMPTY_SET;</a>
<span class="sourceLineNo">284</span><a id="line.284">        }</a>
<span class="sourceLineNo">285</span><a id="line.285"></a>
<span class="sourceLineNo">286</span><a id="line.286">        Map&lt;K, V&gt; kvPairs = new HashMap&lt;K, V&gt;(keys.size());</a>
<span class="sourceLineNo">287</span><a id="line.287">        for (K key : keys) {</a>
<span class="sourceLineNo">288</span><a id="line.288">            V v = get(key);</a>
<span class="sourceLineNo">289</span><a id="line.289">            if (v != null) {</a>
<span class="sourceLineNo">290</span><a id="line.290">                kvPairs.put(key, v);</a>
<span class="sourceLineNo">291</span><a id="line.291">            }</a>
<span class="sourceLineNo">292</span><a id="line.292">        }</a>
<span class="sourceLineNo">293</span><a id="line.293">        return kvPairs.entrySet();</a>
<span class="sourceLineNo">294</span><a id="line.294">    }</a>
<span class="sourceLineNo">295</span><a id="line.295"></a>
<span class="sourceLineNo">296</span><a id="line.296">    /**</a>
<span class="sourceLineNo">297</span><a id="line.297">     * We define our own subclass of SoftReference which contains</a>
<span class="sourceLineNo">298</span><a id="line.298">     * not only the value but also the key to make it easier to find</a>
<span class="sourceLineNo">299</span><a id="line.299">     * the entry in the HashMap after it's been garbage collected.</a>
<span class="sourceLineNo">300</span><a id="line.300">     */</a>
<span class="sourceLineNo">301</span><a id="line.301">    private static class SoftValue&lt;V, K&gt; extends SoftReference&lt;V&gt; {</a>
<span class="sourceLineNo">302</span><a id="line.302"></a>
<span class="sourceLineNo">303</span><a id="line.303">        private final K key;</a>
<span class="sourceLineNo">304</span><a id="line.304"></a>
<span class="sourceLineNo">305</span><a id="line.305">        /**</a>
<span class="sourceLineNo">306</span><a id="line.306">         * Constructs a new instance, wrapping the value, key, and queue, as</a>
<span class="sourceLineNo">307</span><a id="line.307">         * required by the superclass.</a>
<span class="sourceLineNo">308</span><a id="line.308">         *</a>
<span class="sourceLineNo">309</span><a id="line.309">         * @param value the map value</a>
<span class="sourceLineNo">310</span><a id="line.310">         * @param key   the map key</a>
<span class="sourceLineNo">311</span><a id="line.311">         * @param queue the soft reference queue to poll to determine if the entry had been reaped by the GC.</a>
<span class="sourceLineNo">312</span><a id="line.312">         */</a>
<span class="sourceLineNo">313</span><a id="line.313">        private SoftValue(V value, K key, ReferenceQueue&lt;? super V&gt; queue) {</a>
<span class="sourceLineNo">314</span><a id="line.314">            super(value, queue);</a>
<span class="sourceLineNo">315</span><a id="line.315">            this.key = key;</a>
<span class="sourceLineNo">316</span><a id="line.316">        }</a>
<span class="sourceLineNo">317</span><a id="line.317"></a>
<span class="sourceLineNo">318</span><a id="line.318">    }</a>
<span class="sourceLineNo">319</span><a id="line.319">}</a>




























































</pre>
</div>
</main>
</body>
</html>
