首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法调用的编译器优化

方法调用的编译器优化
EN

Stack Overflow用户
提问于 2014-10-22 20:02:32
回答 1查看 207关注 0票数 0

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

具体而言,如果我们有以下示例:

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
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的javac )应用了它,还是它总是被推迟到JVM。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-22 20:11:23

这种类型的优化称为http://en.wikipedia.org/wiki/Constant_folding

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

然而,给定的编译器是否真正执行这些优化完全取决于实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26516091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档