Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Forcing Java virtual machine to run garbage collector [duplicate]

I have a complex java application running on a large dataset. The application performs reasonably fast but as time goes it seems to eat lots of memory and slow down. Is there a way to run the JVM garbage collector without re-starting the application?

like image 797
DotNet Avatar asked Nov 30 '22 13:11

DotNet


1 Answers

No, You cant force garbage collection.
Even using

System.gc();  

You can just make a request for garbage collection but it depends on JVM to do it or not.

Also Garbage collector are smart enough to collect unused memory when required so instead of forcing garbage collection you should check if you are handling objects in a wrong way.
If you are handling objects in a wrong way (like keeping reference to unnecessary objects) there is hardly anything JVM can do to free the memory.

From Doc

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.

Open Bug regarding System.gc() documentation

The documentation for System.gc() is extremely misleading and fails to make reference to the recommended practise of never calling System.gc().

The choice of language leaves it unclear what the behaviour would be when System.gc() is called and what external factors will influence the behaviour.

Few useful link to visit when you think you should force JVM to free up some memory
1. How does garbage collection work
2. When does System.gc() do anything
3. Why is it bad practice to call System.gc()?

All says
1. You dont have control over GC in Java even System.gc() dont guarantee it.
2. Also its bad practise as forcing it may have adverse effect on performance.
3. Revisit your design and let JVM do his work :)

like image 60
Ajinkya Avatar answered Dec 04 '22 16:12

Ajinkya