Home | History | Annotate | Download | only in manual
      1 <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      2 <html>
      3 <head>
      4 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
      5 <meta http-equiv="content-style-type" content="text/css">
      6 <link rel="stylesheet" type="text/css" href="style.css">
      7 <title>Optimizations</title>
      8 <script type="text/javascript" language="JavaScript">
      9 <!--
     10 if (window.self==window.top)
     11   window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
     12 else {
     13   var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
     14   if (window.top.location.hash!=hash)
     15     window.top.location.hash=hash;
     16 }
     17 //-->
     18 </script>
     19 </head>
     20 <body>
     21 
     22 <h2>Optimizations</h2>
     23 
     24 The optimization step of ProGuard can be switched off with the
     25 <a href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. For
     26 more fine-grained control over individual optimizations, experts can use the
     27 <a href="usage.html#optimizations"><code>-optimizations</code></a> option,
     28 with a filter based on the optimization names listed below. The filter works
     29 like any <a href="usage.html#filters">filter</a> in ProGuard.
     30 <p>
     31 
     32 The following wildcards are supported:
     33 
     34 <table cellspacing="10">
     35 <tr><td valign="top"><code><b>?</b></code></td>
     36     <td>matches any single character in an optimization name.</td></tr>
     37 <tr><td valign="top"><code><b>*</b></code></td>
     38     <td>matches any part of an optimization name.</td></tr>
     39 </table>
     40 
     41 An optimization that is preceded by an exclamation mark '<b>!</b>' is
     42 <i>excluded</i> from further attempts to match with <i>subsequent</i>
     43 optimization names in the filter. Make sure to specify filters correctly,
     44 since they are not checked for potential typos.
     45 <p>
     46 
     47 For example,
     48 "<code>code/simplification/variable,code/simplification/arithmetic</code>"
     49 only performs the two specified peephole optimizations.
     50 <p>
     51 
     52 For example, "<code>!method/propagation/*</code>" performs all optimizations,
     53 except the ones that propagate values between methods.
     54 <p>
     55 
     56 For example,
     57 "<code>!code/simplification/advanced,code/simplification/*</code>" only
     58 performs all peephole optimizations.
     59 <p>
     60 Some optimizations necessarily imply other optimizations. These are then
     61 indicated. Note that the list is likely to change over time, as optimizations
     62 are added and reorganized.
     63 <p>
     64 
     65 <dl>
     66 <dt><code><b>class/marking/final</b></code></dt>
     67 <dd>Marks classes as final, whenever possible.</dd>
     68 
     69 <dt><code><b>class/merging/vertical</b></code></dt>
     70 <dd>Merges classes vertically in the class hierarchy, whenever possible.</dd>
     71 
     72 <dt><code><b>class/merging/horizontal</b></code></dt>
     73 <dd>Merges classes horizontally in the class hierarchy, whenever possible.</dd>
     74 
     75 <dt><div>(&rArr; <code>code/removal/advanced</code>)</div>
     76     <code><b>field/removal/writeonly</b></code></dt>
     77 <dd>Removes write-only fields.</dd>
     78 
     79 <dt><code><b>field/marking/private</b></code></dt>
     80 <dd>Marks fields as private, whenever possible.</dd>
     81 
     82 <dt><div>(&rArr; <code>code/simplification/advanced</code>)</div>
     83     <code><b>field/propagation/value</b></code></dt>
     84 <dd>Propagates the values of fields across methods.</dd>
     85 
     86 <dt><code><b>method/marking/private</b></code></dt>
     87 <dd>Marks methods as private, whenever possible (<i>devirtualization</i>).</dd>
     88 
     89 <dt><div>(&rArr; <code>code/removal/advanced</code>)</div>
     90     <code><b>method/marking/static</b></code></dt>
     91 <dd>Marks methods as static, whenever possible (<i>devirtualization</i>).</dd>
     92 
     93 <dt><code><b>method/marking/final</b></code></dt>
     94 <dd>Marks methods as final, whenever possible.</dd>
     95 
     96 <dt><div>(&rArr; <code>code/removal/advanced</code>)</div>
     97     <code><b>method/removal/parameter</b></code></dt>
     98 <dd>Removes unused method parameters.</dd>
     99 
    100 <dt><div>(&rArr; <code>code/simplification/advanced</code>)</div>
    101     <code><b>method/propagation/parameter</b></code></dt>
    102 <dd>Propagates the values of method parameters from method invocations to
    103     the invoked methods.</dd>
    104 
    105 <dt><div>(&rArr; <code>code/simplification/advanced</code>)</div>
    106     <code><b>method/propagation/returnvalue</b></code></dt>
    107 <dd>Propagates the values of method return values from methods to their
    108     invocations.</dd>
    109 
    110 <dt><code><b>method/inlining/short</b></code></dt>
    111 <dd>Inlines short methods.</dd>
    112 
    113 <dt><code><b>method/inlining/unique</b></code></dt>
    114 <dd>Inlines methods that are only called once.</dd>
    115 
    116 <dt><code><b>method/inlining/tailrecursion</b></code></dt>
    117 <dd>Simplifies tail recursion calls, whenever possible.</dd>
    118 
    119 <dt><code><b>code/merging</b></code></dt>
    120 <dd>Merges identical blocks of code by modifying branch targets.</dd>
    121 
    122 <dt><code><b>code/simplification/variable</b></code></dt>
    123 <dd>Performs peephole optimizations for variable loading and storing.</dd>
    124 
    125 <dt><code><b>code/simplification/arithmetic</b></code></dt>
    126 <dd>Performs peephole optimizations for arithmetic instructions.</dd>
    127 
    128 <dt><code><b>code/simplification/cast</b></code></dt>
    129 <dd>Performs peephole optimizations for casting operations.</dd>
    130 
    131 <dt><code><b>code/simplification/field</b></code></dt>
    132 <dd>Performs peephole optimizations for field loading and storing.</dd>
    133 
    134 <dt><div>(&rArr; <code>code/removal/simple</code>)</div>
    135     <code><b>code/simplification/branch</b></code></dt>
    136 <dd>Performs peephole optimizations for branch instructions.</dd>
    137 
    138 <dt><code><b>code/simplification/string</b></code></dt>
    139 <dd>Performs peephole optimizations for constant strings.</dd>
    140 
    141 <dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div>
    142     <code><b>code/simplification/advanced</b></code></dt>
    143 <dd>Simplifies code based on control flow analysis and data flow
    144     analysis.</dd>
    145 
    146 <dt><div>(&rArr; <code>code/removal/exception</code>)</div>
    147     <code><b>code/removal/advanced</b></code></dt>
    148 <dd>Removes dead code based on control flow analysis and data flow
    149     analysis.</dd>
    150 
    151 <dt><div>(&rArr; <code>code/removal/exception</code>)</div>
    152     <code><b>code/removal/simple</b></code></dt>
    153 <dd>Removes dead code based on a simple control flow analysis.</dd>
    154 
    155 <dt><code><b>code/removal/variable</b></code></dt>
    156 <dd>Removes unused variables from the local variable frame.</dd>
    157 
    158 <dt><code><b>code/removal/exception</b></code></dt>
    159 <dd>Removes exceptions with empty try blocks.</dd>
    160 
    161 <dt><code><b>code/allocation/variable</b></code></dt>
    162 <dd>Optimizes variable allocation on the local variable frame.</dd>
    163 </dl>
    164 
    165 <hr />
    166 <noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
    167 <address>
    168 Copyright &copy; 2002-2011
    169 <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
    170 </address>
    171 </body>
    172 </html>
    173