You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/12/10 10:29:25 UTC
groovy git commit: Refine CommonCache
Repository: groovy
Updated Branches:
refs/heads/master 913454a0e -> 5a16022eb
Refine CommonCache
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/5a16022e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/5a16022e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/5a16022e
Branch: refs/heads/master
Commit: 5a16022eb356de9a9bc4971b2e8eb1f9a4b2baaa
Parents: 913454a
Author: sunlan <su...@apache.org>
Authored: Sun Dec 10 18:27:38 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Dec 10 18:27:38 2017 +0800
----------------------------------------------------------------------
.../org/codehaus/groovy/runtime/memoize/CommonCache.java | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/5a16022e/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java b/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
index ee6e0a9..ff521cd 100644
--- a/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
+++ b/src/main/org/codehaus/groovy/runtime/memoize/CommonCache.java
@@ -18,6 +18,8 @@
*/
package org.codehaus.groovy.runtime.memoize;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
@@ -177,8 +179,12 @@ public class CommonCache<K, V> implements EvictableCache<K, V> {
List<K> keys = new LinkedList<>();
for (Map.Entry<K, V> entry : map.entrySet()) {
- if (null == entry.getValue()) {
- keys.add(entry.getKey());
+ K key = entry.getKey();
+ V value = entry.getValue();
+ if (null == value
+ || (value instanceof SoftReference && null == ((SoftReference) value).get())
+ || (value instanceof WeakReference && null == ((WeakReference) value).get())) {
+ keys.add(key);
}
}