Java方法调用优化

Java方法调用优化,java,jvm,Java,Jvm,例如,如果您在Java中有: void methodA(int i) { ... } void wrapperMethodArg1() { methodA(1); } wrapperMethodArg1(); 当您调用第二个方法时,JVM最终会执行两个或一个方法调用吗?您所说的是方法的内联wrapperMethodArg1 答案是:你不能提前告诉我。编译器可能不会内联它,因为这会阻止反射调用,但是,如果调用方法的频率足够高,JVM可能会在运行时动态执行此操作。2显然,它的机器最终会执行两

例如,如果您在Java中有:

void methodA(int i) { ... }

void wrapperMethodArg1() {  methodA(1); }

wrapperMethodArg1();

当您调用第二个方法时,JVM最终会执行两个或一个方法调用吗?

您所说的是方法的内联
wrapperMethodArg1


答案是:你不能提前告诉我。编译器可能不会内联它,因为这会阻止反射调用,但是,如果调用方法的频率足够高,JVM可能会在运行时动态执行此操作。

2显然,它的机器最终会执行两个或一个方法调用。编译器可以选择通过内联方法调用来优化代码。请注意,这不是优化。汇编代码中没有“方法调用”。因此,您可以说它将执行零方法调用(因为它们不存在),或者您可以说它将始终执行两个方法调用(在源代码或字节码级别,因为这是您编写的),如果它曾经进行过优化,它将在JIT进行分析的运行时进行。我怀疑Java编译器是否会像g++编译器那样将其删除。