除了在压缩操作删除的无用类,字段和方法外,ProGuard也能在字节码级提供性能优化,内部方法有:
常量表达式求值
删除不必要的字段存取
删除不必要的方法调用
删除不必要的分支
删除不必要的比较和instanceof验证
删除未使用的代码
删除只写字段
删除未使用的方法参数
像push/pop简化一样的各种各样的peephole优化
在可能的情况下为类添加static和final修饰符
在可能的情况下为方法添加private, static和final修饰符
在可能的情况下使get/set方法成为内联的
当接口只有一个实现类的时候,就取代它
选择性的删除日志代码
实际的优化效果是依赖于你的代码和执行代码的虚拟机的。简单的虚拟机比有复杂JIT编译器的高级虚拟机更有效。无论如何,你的字节码会变得更小。
仍有一些明显需要优化的技术不被支持:
使非final的常量字段成为内联,像get/set方法一样使其他方法成为内联,将常量表达式移到循环之外