How do you Force Garbage Collection from the Shell? How do you Force Garbage Collection from the Shell? java java

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