Could someone explain me (best would be to lead to documentation) what is the difference between the two:
jcmd ${jpid} GC.run_finalization
jcmd ${jpid} GC.run
As in the application (springboot + tomcat) after a test (using gatling) much memory stays allocated and not freed.
In the application life cycle:
- attack starts (gatling simulation), extra tomcat executor threads are started, attack ends
- after some time spring/tomcat session objects timeout (session.servlet.timeout)
- I would expect session objects to be released and extra tomcat executors to be released but it does NOT happen
- I waited a long time (let say days)... this is where the graph above starts
- If I execute GC.run_finalization - nothing happens (just faster "saw drop")
- If I execute GC.run - memory is released as shown on the image
The only documentation I found is https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#gc-- , but it confused me even more (I understood that GC.run_finalization would suggest finalization of objects for release while GC.run would suggest memory objects to be prepared for future reuse and not necessary freed).
Thanks in advance