Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Here's a quick steps to get your Groovy classes optimised using Soot framework.


When using Groovy, sometime we encounter the OutOfMemoryException because PermGen space ran out. Optimisation of class files could help saving memory usage of JVM.

Soot Framework

Soot Framework is a bytecode optimisation, and manipulation framework, developed at McGill University, for Java. It comes with a vast set of optimisation techniques. We can also develop our own optimisation using the framework provided.

Quick Optimisation

With Soot, you can just run

Code Block
> soot.Main -O my.package.MyGroovyClass

to obtain a optimised class.


A trivial class is used in this analysis. The class is illustrated in Jimple format, an intermediate representation supported by Soot to see what's done with Soot optimisation.

Here's a command to get a Jimple file:

Code Block
> soot.Main -f jimple org.codehaus.groovy.aop.tests.Target

and the following is a command for applying optimisation:

Code Block
> soot.Main -O -f jimple org.codehaus.groovy.aop.tests.Target

We've now got two Jimple files, and can use a text editor to compare them. You can get this two files from the attachment below to see their differences.

The result from the optmisation shows that Soot can reduce the file size by 8.5%. This number is expected to be large when we apply the optimisation to the whole program.

Second Experiment

This is an updated result when applying the more complex optimisation to two of Groovy packages, groovy.lang and groovy.xml.

Code Block
> soot.Main -O -via-shimple -process-dir groovy-1.1

Please note that not all Groovy classes were used in this experiment. Just two mentioned packages resides in the "groovy-1.1" folder. This experiment has done by performing optimisation package that requires Static Single Assignment (SSA) representation of Java classes. Soot supports this through Shimple format. The "-via-shimple" option shown in the command line is to enable this kind of optimisation. The result is better than using only Jimple optimsation. Size of Groovy classes in the two packages is reduced by 16.34%.