我目前正在编写一个玩具编译器,目标是翻译中的java字节码。我想知道在编写.class文件之前,是否有一些目录,也许是一个摘要,可以在发出的字节码中进行各种简单的窥视孔优化。实际上,我知道有些库具有此功能,但我想自己实现它。
8hhllhi21#
你知道proguard吗?http://proguard.sourceforge.net/这是一个伟大的字节码优化器,它实现了很多优化。有关列表,请参见常见问题解答:http://proguard.sourceforge.net/faq.html计算常量表达式。删除不必要的字段访问和方法调用。移除不必要的分支。删除不必要的比较和测试示例。删除未使用的代码块。合并相同的代码块。减少变量分配。删除只写字段和未使用的方法参数。内联常量字段、方法参数和返回值。简短或只调用一次的内联方法。简化尾部递归调用。合并类和接口。尽可能使方法私有、静态和最终。尽可能使类成为静态的和最终的。替换具有单个实现的接口。执行200多个窥视孔优化,例如将…*2替换为…<<1。可以选择删除日志代码。我相信您可以进一步研究源代码以了解它们是如何实现的。
1条答案
按热度按时间8hhllhi21#
你知道proguard吗?http://proguard.sourceforge.net/
这是一个伟大的字节码优化器,它实现了很多优化。有关列表,请参见常见问题解答:http://proguard.sourceforge.net/faq.html
计算常量表达式。
删除不必要的字段访问和方法调用。
移除不必要的分支。
删除不必要的比较和测试示例。
删除未使用的代码块。
合并相同的代码块。
减少变量分配。
删除只写字段和未使用的方法参数。
内联常量字段、方法参数和返回值。
简短或只调用一次的内联方法。
简化尾部递归调用。
合并类和接口。
尽可能使方法私有、静态和最终。
尽可能使类成为静态的和最终的。
替换具有单个实现的接口。
执行200多个窥视孔优化,例如将…*2替换为…<<1。
可以选择删除日志代码。
我相信您可以进一步研究源代码以了解它们是如何实现的。