jakarta-bcel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dave Brosius" <dbros...@qis.net>
Subject [PATCH] make the JavaClass repository cache memory sensitive
Date Wed, 05 Jan 2005 04:54:05 GMT
I'd like to wrap the repository cache (map values) in SoftReferences. 
Applications can load quite a few JavaClass'es that are stored in the 
repository, and it can become easy to start failing due to out of memory 
conditions. Using the softreferences keeps BCEL humming, even under heavy 
usage. Here's a patch against the latest, that accomplishes this. BTW, if 
anyone would like to give me the secret handshake, i'd be interested in 
committer status to help support BCEL in the future.




Index: src/java/org/apache/bcel/util/SyntheticRepository.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-bcel/src/java/org/apache/bcel/util/SyntheticRepository.java,v
retrieving revision 1.9
diff -u -r1.9 SyntheticRepository.java
--- src/java/org/apache/bcel/util/SyntheticRepository.java 15 Dec 2004 
08:28:50 -0000 1.9
+++ src/java/org/apache/bcel/util/SyntheticRepository.java 5 Jan 2005 
04:40:26 -0000
@@ -19,6 +19,7 @@

 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.ref.SoftReference;
 import java.util.HashMap;

 import org.apache.bcel.classfile.ClassParser;
@@ -76,7 +77,7 @@
    * Store a new JavaClass instance into this Repository.
    */
   public void storeClass(JavaClass clazz) {
-    _loadedClasses.put(clazz.getClassName(), clazz);
+    _loadedClasses.put(clazz.getClassName(), new SoftReference(clazz));
     clazz.setRepository(this);
   }

@@ -91,7 +92,10 @@
    * Find an already defined (cached) JavaClass object by name.
    */
   public JavaClass findClass(String className) {
-    return (JavaClass)_loadedClasses.get(className);
+    SoftReference ref = (SoftReference)_loadedClasses.get(className);
+    if (ref == null)
+      return null;
+    return (JavaClass)ref.get();
   }

   /**



---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org


Mime
View raw message