How do you Force Garbage Collection from the Shell?
Since JDK 7 you can use the JDK command tool 'jcmd' such as:
jcmd <pid> GC.run
If you run jmap -histo:live <pid>
, that will force a full GC on the heap before it prints anything out.
You can do this via the free jmxterm program.
Fire it up like so:
java -jar jmxterm-1.0-alpha-4-uber.jar
From there, you can connect to a host and trigger GC:
$>open host:jmxport#Connection to host:jmxport is opened$>bean java.lang:type=Memory#bean is set to java.lang:type=Memory$>run gc#calling operation gc of mbean java.lang:type=Memory#operation returns: null$>quit#bye
Look at the docs on the jmxterm web site for information about embedding this in bash/perl/ruby/other scripts. I've used popen2 in Python or open3 in Perl to do this.
UPDATE: here's a one-liner using jmxterm:
echo run -b java.lang:type=Memory gc | java -jar jmxterm-1.0-alpha-4-uber.jar -n -l host:port