The JVM by design does not allow you to force the garbage collector to run.
Using functions like System.gc(); or Runtime.getRuntime().gc(); only suggest to the JVM that you want to run the garbage collector.
I found a way on the internet not to force the grabage collector but to wait until the garbage collector runs.
The idea is to use the
WeakReference object. This object holds a pointer to the object, but is not counted as a pointer by the garbage collector.
You then release the actual pointer but continue to check the object via the
WeakReference pointer until it is null.
/** * This method guarantees that garbage collection is * done unlike <code>{@link System#gc()}</code> */ public static void gc() { Object obj = new Object(); WeakReference ref = new WeakReference<Object>(obj); obj = null; while(ref.get() != null) { System.gc(); } }
For more information please see: http://jlibs.googlecode.com/svn/trunk/core/src/main/java/jlibs/core/lang/RuntimeUtil.java