我已经决定检查Java编译器的清晰性;因此,我编写了一个简单的类。
public class Foo {
public Foo(boolean a, int b) {
if (a == true && a != false) {
b = 1;
}
}
}我想知道编译器是否会优化条件,使其变得更简单,比如:
if (a == true) {}我编译了这个类,然后用javap工具对它进行了分解。当我查看输出时,我真的很困惑,因为编译器检查了这两种情况,如下所示。
Compiled from "Foo.java"
public class Foo {
public Foo(boolean, int);
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: iload_1
5: iconst_1
6: if_icmpne 15
9: iload_1
10: ifeq 15
13: iconst_1
14: istore_2
15: return
}我只是好奇,它为什么要执行多余的指令,而它可以被优化成更简单的东西呢?
发布于 2015-05-22 20:08:07
javac不进行或只进行很少的优化。优化是在字节码的JIT编译过程中进行的.这是有意义的,因为使用这种方法,您可以针对不同的目标平台进行不同的优化,并获得最大的优化结果。
https://stackoverflow.com/questions/30405045
复制相似问题