[jdom-interest] memory question?
Guanming Wu
wugm at cshl.org
Tue Jan 9 15:26:03 PST 2001
Hi Jason,
Yes, I agree with you. I use both jdk1.2.2 and jdk1.3.0 under win32 and
linux.
Thanks.
Guanming
On Sun, 7 Jan 2001, Jason Hunter wrote:
> I'm seeing similar behavior. But watching in OptimizeIt I see the
> objects do get collected when memory maxes out. Seems GC just isn't
> eager to collect the objects until it's necessary. If I run the test on
> a large file (enough to get memory mostly consumed) and then a medium
> sized file (just enough to poke memory usage over the max) I see very
> little memory used afterward.
>
> I'm going to chalk it up to weird GC behavior unless someone has ideas.
>
> BTW, I'm using Sun's JDK 1.2.2 on Win2K. You too?
>
> -jh-
>
> > Guanming Wu wrote:
> >
> > It seems to me that it is very difficult for garbage collector (gc) to
> > collect jdom document and element objects. Here is a test program:
> >
> > import java.io.*;
> > import org.jdom.*;
> > import org.jdom.input.*;
> >
> > public class XMLMemoryTest extends Object {
> >
> > public XMLMemoryTest(String file) {
> > loadXML(file);
> > }
> >
> > private void loadXML(String file) {
> > try {
> > SAXBuilder builder = new SAXBuilder(false);
> > Document doc = builder.build(new File(file));
> > Element root = doc.getRootElement();
> > root = null;
> > doc = null;
> > file = null;
> > gc();
> > }
> > catch(Exception e) {
> > e.printStackTrace();
> > }
> > }
> > /** This method is from the book Java Platform Performace by
> > Wilson, S & Kesselman, J. */
> > private void gc() {
> > try {
> > System.gc();
> > Thread.currentThread().sleep(100);
> > System.runFinalization();
> > Thread.currentThread().sleep(100);
> > System.gc();
> > Thread.currentThread().sleep(100);
> > System.runFinalization();
> > Thread.currentThread().sleep(100);
> > }
> > catch(Exception e) {
> > e.printStackTrace();
> > }
> > }
> > }
> >
> > import java.io.*;
> >
> > public class XMLMemoryTestRunner extends Object {
> >
> > public static void main(String args[]) {
> > if (args.length < 1) {
> > System.out.println("Usage java test.XMLMemoryTest
> > xmlfile");
> > return;
> > }
> > memoryInfo("Before loading: ");
> > XMLMemoryTest test = new XMLMemoryTest(args[0]);
> > test = null;
> > memoryInfo("After loading: ");
> > try {
> > BufferedReader reader = new BufferedReader(new
> > InputStreamReader(System.in));
> > String line = null;
> > while (true) {
> > line = reader.readLine();
> > if (line.equalsIgnoreCase("quit")) break;
> > if (line.equalsIgnoreCase("check"))
> > memoryInfo("Memory: ");
> > }
> > }
> > catch(IOException e) {
> > e.printStackTrace();
> > }
> > }
> >
> > protected static void memoryInfo(String label) {
> > long total = Runtime.getRuntime().totalMemory();
> > long free = Runtime.getRuntime().freeMemory();
> > System.out.println(label + " total " + total + " usage " +
> > (total - free));
> > }
> > }
> >
> > Compile them and run XMLMemoryTestRunner.
> >
> > I tested with an 1M XML file, the memory about 8000M could not be
> > released. I am wondering if there are any problems with my codes?
> >
> > Thanks.
> >
> > Guanming
> >
>
>
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com
>
More information about the jdom-interest
mailing list