Delete unused variable's memory in java

I know that Java have its own garbage collection, but sometimes I want to delete the garbage manually. Is there any way to do the work like that? And considering that I have a long or very long function which declares many variables, is this a good idea to delete the unused memory immediately after using instead of auto collection at the end of the function? If I delete garbage manually, does it affect the speed of my application? Thanks for helping!


Solution 1:

There is no direct and immediate way to free memory in java. You might try to persuade the garbage collector to take away some object using the well known:

Object obj = new Object();
// use obj
obj = null;
System.gc();

but there is no guarantee that this will actually free memory immediately.

While this applies to heap memory, stack allocated items can only be freed when the function returns.

Solution 2:

Why do you want to delete the garbage "manually"? If it's because you're out of memory, recall that Java is going to run garbage collection before actually throwing OutOfMemoryError. And if you are really out of memory, then there is no garbage for even you to manually remove.

Declaring a variable does not allocate memory on the heap. Making an object with new does. JVMs can do escape analysis to even GC object references that have not gone out of scope but are not used anymore before the end of the method.

If you mean you proactively want to free up memory at a certain point where system resources are not critical, then use better JVM tuning like using the parallel GC algorithms.

"Manually" garbage collecting by setting things to null likely slows things down if only because you pay the cost of nulling references pointlessly, or, invoking GC more times than is needed.