给定以下代码:
public class MainClass {
public static int f(){
int i=0;
i++;
return i;
}
}编译器javac生成以下代码:
Compiled from "MainClass.java"
public class latte_jvm.MainClass {
public static int f();
Code:
0: iconst_0
1: istore_0
2: iinc 0, 1
5: iload_0
6: ireturn
}函数f做了一件非常简单的事情--它只返回1。它被直接翻译了,以至于我很难相信java编译器会做任何优化。为什么java编译器创建者决定不在编译阶段做这样的优化?
发布于 2012-11-29 02:21:24
是如此直接地被翻译,以至于我很难相信java编译器会做任何优化。
确实如此。大多数Java优化都是在JIT时执行的。Java维护者很久以前就发现,在许多情况下,在编译时执行的优化实际上会阻碍在JIT时进行更重要的优化。
几年来,-O命令行参数什么也没有做--而且是故意这样做的。
发布于 2012-11-29 04:17:29
此外,通过将优化转移到JVM,所有基于JVM的语言都可以受益。编译器(不仅仅是javac)有一项相对容易的工作;语言发明者不必是优化专家。
https://stackoverflow.com/questions/13611829
复制相似问题