Results

ProGuard can shrink jars significantly. The gains of removing dead code obviously depend on the original code. If you're using libraries, you'll really benefit from the shrinking phase. The further gains of removing debug code and obfuscating (typically replacing long names by short names), are on the order of 20%.

The table below presents some typical results:

Input Program Original size After shrinking After obfusc. Total reduction Time Memory usage
ProGuard itself 144 K 132 K 90 K 37 % 28 s 17 M
JDepend, a Java quality metrics tool 66 K 42 K 32 K 51 % 23 s 14 M
JavaNCSS, a Java source metrics tool 534 K 209 K 148 K 72 % 35 s 21 M
LuciadMap, a Java GIS library 3.2 M 2.9 M 2.4 M 25 % 2 min 48 M
A sample applet using LuciadMap 3.2 M 705 K 621 K 81 % 1.2 min 44 M
LuciadiCAD, a Java CAD Viewer 3.6 M 959 K 792 K 78 % 1.5 min 51 M

Results were measured with ProGuard 1.2 on a 500 MHz Pentium III, using Sun JDK 1.3.1 in Debian Linux. The program sizes include companion libraries.

Timings are mainly governed by reading and parsing library jars and program jars. Shrinking and obfuscation is practically instantaneous in comparison.

Memory usage (the total process size) is governed by the basic java virtual machine and the total size of the library jars and program jars.


Copyright © 2002 Eric Lafortune.