How to force garbage collection in Java?
Your best option is to call System.gc()
which simply is a hint to the garbage collector that you want it to do a collection. There is no way to force and immediate collection though as the garbage collector is non-deterministic.
The jlibs library has a good utility class for garbage collection. You can force garbage collection using a nifty little trick with WeakReference objects.
RuntimeUtil.gc() from the jlibs:
/** * 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(); } }
The best (if not only) way to force a GC would be to write a custom JVM. I believe the Garbage collectors are pluggable so you could probably just pick one of the available implementations and tweak it.
Note: This is NOT an easy answer.