【问题标题】:Java method call optimization [duplicate]Java方法调用优化[重复]
【发布时间】:2015-02-18 08:11:55
【问题描述】:

如果你有 Java 例如:

void methodA(int i) { ... }

void wrapperMethodArg1() {  methodA(1); }

wrapperMethodArg1();

当你调用第二个方法时,JVM最终会做两个还是一个方法调用?

【问题讨论】:

  • 显然是 2 它的机器
  • 它最终会做两个或一个方法调用。
  • 编译器可以选择通过内联方法调用来优化你的代码。
  • 注意这不是优化
  • “方法调用”不是汇编代码中的东西。所以你可以说它会进行零次方法调用(因为它们不存在),或者你可以说它总是会进行两次方法调用(在源代码或字节码级别,因为那是你写的)

标签: java jvm


【解决方案1】:

你说的是方法wrapperMethodArg1的内联。

答案是:你不能提前知道。编译器可能不会内联它,因为这会阻止反射调用,但如果方法被调用得足够频繁以进行优化,JVM 可能会在运行时动态地这样做。

【讨论】:

  • 如果它曾经被优化过,它将在运行时 JIT 进行分析。我怀疑 Java 编译器会像 g++ 编译器一样将其取出。
猜你喜欢
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多