summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/DynamicClassLoader.java7
-rw-r--r--src/jvm/clojure/lang/Keyword.java8
-rw-r--r--src/jvm/clojure/lang/Util.java5
3 files changed, 12 insertions, 8 deletions
diff --git a/src/jvm/clojure/lang/DynamicClassLoader.java b/src/jvm/clojure/lang/DynamicClassLoader.java
index e85071a0..17fa5a10 100644
--- a/src/jvm/clojure/lang/DynamicClassLoader.java
+++ b/src/jvm/clojure/lang/DynamicClassLoader.java
@@ -12,6 +12,7 @@
package clojure.lang;
+import java.lang.ref.Reference;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -22,8 +23,8 @@ import java.lang.ref.SoftReference;
public class DynamicClassLoader extends URLClassLoader{
HashMap<Integer, Object[]> constantVals = new HashMap<Integer, Object[]>();
-static ConcurrentHashMap<String, SoftReference<Class>>classCache =
- new ConcurrentHashMap<String, SoftReference<Class> >();
+static ConcurrentHashMap<String, Reference<Class>>classCache =
+ new ConcurrentHashMap<String, Reference<Class> >();
static final URL[] EMPTY_URLS = new URL[]{};
@@ -48,7 +49,7 @@ public Class defineClass(String name, byte[] bytes, Object srcForm){
}
protected Class<?> findClass(String name) throws ClassNotFoundException{
- SoftReference<Class> cr = classCache.get(name);
+ Reference<Class> cr = classCache.get(name);
if(cr != null)
{
Class c = cr.get();
diff --git a/src/jvm/clojure/lang/Keyword.java b/src/jvm/clojure/lang/Keyword.java
index 4ed8bc1a..377ee67c 100644
--- a/src/jvm/clojure/lang/Keyword.java
+++ b/src/jvm/clojure/lang/Keyword.java
@@ -14,6 +14,8 @@ package clojure.lang;
import java.io.ObjectStreamException;
import java.io.Serializable;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
import java.util.concurrent.ConcurrentHashMap;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
@@ -21,7 +23,7 @@ import java.lang.ref.SoftReference;
public final class Keyword implements IFn, Comparable, Named, Serializable {
-private static ConcurrentHashMap<Symbol, SoftReference<Keyword>> table = new ConcurrentHashMap();
+private static ConcurrentHashMap<Symbol, Reference<Keyword>> table = new ConcurrentHashMap();
static final ReferenceQueue rq = new ReferenceQueue();
public final Symbol sym;
final int hash;
@@ -31,7 +33,7 @@ public static Keyword intern(Symbol sym){
sym = (Symbol) sym.withMeta(null);
Util.clearCache(rq, table);
Keyword k = new Keyword(sym);
- SoftReference<Keyword> existingRef = table.putIfAbsent(sym, new SoftReference<Keyword>(k,rq));
+ Reference<Keyword> existingRef = table.putIfAbsent(sym, new WeakReference<Keyword>(k,rq));
if(existingRef == null)
return k;
Keyword existingk = existingRef.get();
@@ -56,7 +58,7 @@ private Keyword(Symbol sym){
}
public static Keyword find(Symbol sym){
- SoftReference<Keyword> ref = table.get(sym);
+ Reference<Keyword> ref = table.get(sym);
if (ref != null)
return ref.get();
else
diff --git a/src/jvm/clojure/lang/Util.java b/src/jvm/clojure/lang/Util.java
index 5b5ee4ec..c2a37f75 100644
--- a/src/jvm/clojure/lang/Util.java
+++ b/src/jvm/clojure/lang/Util.java
@@ -12,6 +12,7 @@
package clojure.lang;
+import java.lang.ref.Reference;
import java.math.BigInteger;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -124,13 +125,13 @@ static public ISeq ret1(ISeq ret, Object nil){
return ret;
}
-static public <K,V> void clearCache(ReferenceQueue rq, ConcurrentHashMap<K, SoftReference<V>> cache){
+static public <K,V> void clearCache(ReferenceQueue rq, ConcurrentHashMap<K, Reference<V>> cache){
//cleanup any dead entries
if(rq.poll() != null)
{
while(rq.poll() != null)
;
- for(Map.Entry<K, SoftReference<V>> e : cache.entrySet())
+ for(Map.Entry<K, Reference<V>> e : cache.entrySet())
{
if(e.getValue().get() == null)
cache.remove(e.getKey(), e.getValue());