summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-07-16 08:11:04 -0400
committerRich Hickey <richhickey@gmail.com>2010-07-16 08:45:29 -0400
commit85e99ee9c00e0f39cb8a960ba8e66d81e23ff49d (patch)
treebc2a1d6edd54c79333bdd9d98f7d5d5e2ee897e5
parentd184ed95817c5ddfd5874ea75e83e0df7e753c24 (diff)
switch to soft refs in DynamicClassLoader
-rw-r--r--src/jvm/clojure/lang/DynamicClassLoader.java13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/jvm/clojure/lang/DynamicClassLoader.java b/src/jvm/clojure/lang/DynamicClassLoader.java
index d27e9c86..fd2824ac 100644
--- a/src/jvm/clojure/lang/DynamicClassLoader.java
+++ b/src/jvm/clojure/lang/DynamicClassLoader.java
@@ -14,17 +14,16 @@ package clojure.lang;
import java.util.HashMap;
import java.util.Map;
-import java.util.Arrays;
import java.util.concurrent.ConcurrentHashMap;
import java.net.URLClassLoader;
import java.net.URL;
-import java.lang.ref.WeakReference;
import java.lang.ref.ReferenceQueue;
+import java.lang.ref.SoftReference;
public class DynamicClassLoader extends URLClassLoader{
HashMap<Integer, Object[]> constantVals = new HashMap<Integer, Object[]>();
-static ConcurrentHashMap<String, WeakReference<Class> >classCache =
- new ConcurrentHashMap<String, WeakReference<Class> >();
+static ConcurrentHashMap<String, SoftReference<Class>>classCache =
+ new ConcurrentHashMap<String, SoftReference<Class> >();
static final URL[] EMPTY_URLS = new URL[]{};
@@ -43,13 +42,13 @@ public DynamicClassLoader(ClassLoader parent){
public Class defineClass(String name, byte[] bytes, Object srcForm){
Class c = defineClass(name, bytes, 0, bytes.length);
- classCache.put(name, new WeakReference(c,rq));
+ classCache.put(name, new SoftReference(c,rq));
//cleanup any dead entries
if(rq.poll() != null)
{
while(rq.poll() != null)
;
- for(Map.Entry<String,WeakReference<Class>> e : classCache.entrySet())
+ for(Map.Entry<String,SoftReference<Class>> e : classCache.entrySet())
{
if(e.getValue().get() == null)
classCache.remove(e.getKey(), e.getValue());
@@ -59,7 +58,7 @@ public Class defineClass(String name, byte[] bytes, Object srcForm){
}
protected Class<?> findClass(String name) throws ClassNotFoundException{
- WeakReference<Class> cr = classCache.get(name);
+ SoftReference<Class> cr = classCache.get(name);
if(cr != null)
{
Class c = cr.get();