You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by Dave Brosius <db...@qis.net> on 2005/01/05 05:54:05 UTC
[PATCH] make the JavaClass repository cache memory sensitive
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