Example of kind of forcing garbage collection but using runtime: But i agree, using something like System.gc() is just a hint, and it does not guarantee immediate action, but actually it could slow your app down.
Code:
/*
* This Java program shows you how to force garbage collection
* Author: Megh Thakkar
*/
public class CollectGarbage {
int ASIZE = 1000000;
void useMemory() {
int[] intA = new int[ASIZE];
for (int i=0; i<ASIZE; i++) {
intA[i] = i*2;
}
}
public static void main (String[] args) {
CollectGarbage gct = new CollectGarbage();
// Get a Runtime object
Runtime r = Runtime.getRuntime();
// Collect garbage at the start of the program
r.gc();
// Let's see how much memory we have at the start
long availMem = r.freeMemory();
System.out.println("At program start we have : " + availMem + " bytes");
// Let's use some memory
gct.useMemory();
// Let's see how much memory is left
long availMem1 = r.freeMemory();
System.out.println("After running the program,
we have : " + availMem1 + " bytes");
// Collect garbage
r.gc();
//Let's see what we have now
long availMem2 = r.freeMemory();
System.out.println("After collecting garbage
we have : " + availMem2 + " bytes");
long freedMem = availMem2 - availMem1;
System.out.println("Garbage collection
freed : " + freedMem + " bytes");
}
}