Java 编译器优化

标签 java compiler-optimization

在下面的情况下,我是否需要担心性能并保存昂贵调用的结果,或者编译器是否认识到它可以执行一次昂贵的调用?

String name;
if (object.expensiveCall() != null) {
  name = object.expensiveCall().getName();
}

最佳答案

编译器不会(通常)只执行一次调用,因为它可能有副作用,或者其结果可能不稳定——它不可能知道你什么时候想让它忽略第二次调用,什么时候你想要它实际上再次调用电话。您需要保存结果:

final ExpensiveCallResult nullableResult = object.expensiveCall();
String name;
if (nullableResult != null) {
  name = nullableResult.getName();
}

关于Java 编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469537/

相关文章:

java - 滚动到/设置自定义列表首选项的位置

算术加法和字符串连接之间的Java '+'运算符?

java - 将 jfree 条形图添加到滚动 Pane 中

c++ - static constexpr 的编译器优化

java - 为什么我的 JVM 会进行一些运行时循环优化并使我的代码出现错误?

java - Optaplanner 供应已损坏,因为无法撤回 sourceVariable 的实体 : the entity was never inserted for that value

java - 为什么类路径默认为 WEB-INF/classes/而不是 JBoss 5.1 中的 WEB-INF/?

C++ 在 VS 中为 'better' Release模式构建定义

c++ - 按值返回是否调用复制构造函数或复制赋值运算符?

swift - Swift 类型推断如何影响编译和运行时?