常量折叠

常量折叠

常量折叠 #

这个例子的代码如下:

public static int test() {
    int b = 3;
    int c = 4;
    return b + c;
}

在这块代码中,由于第 2 行对 b 赋值一个常量后,后面的语句没有再改过 b 的值,我们就可以把后面所有出现 b 的地方都改为 3,同理所有出现 c 的地方都改为 4。经过这种优化,代码的第 4 行就可以改写成:

return 3 + 4;

接着,编译器再做一轮分析,将运算符两边都是常量的情况,直接进行计算,也就是把上面的代码再优化成:

return 7;

这种优化被称为常量折叠。(这里也请你思考一下,如果这行代码是 C 语言的,在最优化的情况下,gcc 会生成什么样的机器码?)

Viewpoint #

From #

11 | 即时编译:高性能JVM的核心秘密