gpt4 book ai didi

java - 方法调用的编译器优化

转载 作者:行者123 更新时间:2023-12-01 12:23:15 27 4
gpt4 key购买 nike

Java 编译器是否应用一些转换来优化方法调用?或者它是否总是通过简单的优化(例如删除死代码)生成源代码的忠实表示?

具体来说,如果我们有以下示例:

public static void main(String[] args) {
System.out.println(foo());
System.out.println(foo());
System.out.println(foo());
System.out.println(bar());
System.out.println(bar());
System.out.println(bar());
}

public static int foo() {
int[] arr = {1, 2, 3, 4};
return arr[0];
}

public static int bar() {
return 10;
}

编译器是否尝试用打印整数 10 的调用来替换对 bar(甚至可能是 foo)的调用?

public static void main(String[] args) {
System.out.println(1);
System.out.println(1);
System.out.println(1);
System.out.println(10);
System.out.println(10);
System.out.println(10);
}

我知道一种名为内联的方法可以导致这种转换,但我想知道Java编译器(至少是Oracle JDK的javac)是否适用它,或者是否始终推迟到 JVM。

最佳答案

这种类型的优化称为 constant folding

Java 规范允许这些(和其他优化)不影响程序的可观察结果。

但是,给定的编译器是否实际执行这些优化完全取决于实现。

关于java - 方法调用的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com