【发布时间】:2011-03-20 09:44:53
【问题描述】:
我的理解是,如果优化没有与 JLS 相矛盾的可观察效果,则优化是有效的。例如,JIT 编译器可以优化掉内部循环中“什么都不做”的代码。
但我不记得有明确的声明。
是否有人知道 Java 优化(例如由本机代码编译器执行)何时有效的明确声明(即在 JLS 或类似文件中)?
【问题讨论】:
-
通常单线程场景很简单。多线程很烦人,因为可以观察到一些优化,特别是内存读/写的重新排序。允许哪些重新排序取决于内存模型,但我不知道 java 标准指定了哪种内存模型。
-
可以,例如:
code_statement; // “valid” optimization. -
@CodeInChaos - 实际上,读/写的重新排序是明确规定规则的领域。
-
@CodeInChaos:优化器可以做每一个不会改变程序单线程执行的优化,所以我们可以做很多。
-
@Voo 很有趣。所以Java的内存比.net弱很多。
标签: java optimization specifications