Someone said that Java doesn't free up memory to the OS during a program's execution, so this is a simple test of that assertion.
import java.util.ArrayList;
import java.util.List;
public final class Main
{
public static void main(final String[] args) throws InterruptedException
{
allocate();
System.out.println(Runtime.getRuntime().freeMemory());
System.gc();
System.out.println(Runtime.getRuntime().freeMemory());
System.out.println("Here");
Thread.sleep(60000);
}
private static void allocate() throws InterruptedException
{
List list=new ArrayList();
for (int a=0;a<5000000;a++)
list.add(new Object());
}
}
The output of running ps aux repeatedly on Linux while this is running shows that the garbage collection never has an external effect. The output of the program is simply :
6207736
66317488
Here
This demonstrates that the garbage collection is happening.