17

我目前正在编写一个玩具编译器,用于翻译中的 Java 字节码。

我想知道在编写 .class 文件之前是否可以在发出的字节码中进行各种简单的窥视孔优化的某种目录,也许是摘要。我实际上知道一些具有此功能的库,但我想自己实现它。

4

1 回答 1

23

你知道Proguard吗?http://proguard.sourceforge.net/

这是一个很棒的字节码优化器,它实现了很多优化。有关列表,请参阅常见问题解答:http: //proguard.sourceforge.net/FAQ.html

  • 评估常量表达式。
  • 删除不必要的字段访问和方法调用。
  • 删除不必要的分支。
  • 删除不必要的比较和 instanceof 测试。
  • 删除未使用的代码块。
  • 合并相同的代码块。
  • 减少变量分配。
  • 删除只写字段和未使用的方法参数。
  • 内联常量字段、方法参数和返回值。
  • 短的或只调用一次的内联方法。
  • 简化尾递归调用。
  • 合并类和接口。
  • 尽可能将方法设为私有、静态和最终的。
  • 尽可能将类设为静态和最终类。
  • 替换具有单一实现的接口。
  • 执行 200 多个窥视孔优化,例如将 ...*2 替换为 ...<<1。
  • (可选)删除日志记录代码。

我相信您可以进一步查看源代码以了解它们是如何实现的。

于 2009-11-05T12:21:53.637 回答