1

我想知道 Java 编译器的哪些优化通常会因为不清晰或编写错误的代码而被阻止(或未被检测到),以及会犯什么样的常见错误来混淆编译器的代码

4

3 回答 3

3

请理解,现代运行时环境(实际的 Java 命令)并没有天真地一一执行 Java 字节码,而是进行了非常繁重的处理以编译为实际的机器代码。

这意味着没有特殊理由使字节码特别智能或优化,因为 JRE 无论如何都会给出相同的结果。对于解释器不太智能且存在内存限制的移动 Java 设备,ProGuard 系统允许进行相当多的优化转换。你可能会觉得这些很有趣。

于 2010-11-09T06:13:29.267 回答
1

JIT 编译器通常针对常见的编码模式和用例进行优化。最好的选择是遵守常见的约定、模式和习语。尝试“为编译器优化代码”可能会导致代码实际上更难优化。

我建议您尝试使您的代码清晰且富有表现力,并让编译器完成其工作。

于 2010-11-09T06:42:48.187 回答
0

...我想知道在编码时是否有一些非常常见的错误可以通过多加注意来避免。

对于 Sun 的 HotSpot JVM,您在一般意义上可能犯的唯一错误是(可能)尝试以棘手的方式做事,并相信这会使您的代码更快。最好只写简单的代码。我从 HotSpot 团队的一位资深人士那里看到了这个建议。

最佳实践是将优化留给 JIT 编译器,并且仅在探查器告诉您有问题时才尝试进行微优化。

(您应该避免一些众所周知的事情,例如使用异常进行流控制、在循环中进行字符串连接或尝试进行自己的内存管理。但这些可能比您感兴趣的级别更高。)

于 2010-11-09T06:43:47.157 回答