向方法添加局部变量会使它们变慢吗?

ama*_*ara 5 java performance micro-optimization

这个问题共收到了几段答案.这是唯一能够告诉我我在找什么的句子:

您的示例几乎没有什么区别,因为中间计算需要临时存储在堆栈上,以便以后可以使用它们.

事实上,它完美地回答了我的问题=)

不像所有的告诉我"不要问这个问题".> _ <


就像你有一个方法,并且你通过增加局部变量的数量但不做其他更改来改变它,它是否会使方法变慢?这是一个例子:

void makeWindow() {
    Display
        .getContext()
        .windowBuilder()
        .setSize(800, 600)
        .setBalloonAnimal(BalloonAnimal.ELDER_GOD.withColor(PUCE))
        .build();
}
Run Code Online (Sandbox Code Playgroud)

要么

void makeWindow() {
    DisplayContext dc = Display.getContext();
    WindowBuilder wb = db.windowBuilder();
    BalloonAnimal god = BalloonAnimal.ELDER_GOD;
    BalloonAnimal puceGod = god.withColor(PUCE);
    wb.setSize(800, 600).setBalloonAnimal(puceGod).build();
}
Run Code Online (Sandbox Code Playgroud)

另一个例子:

int beAnExample(int quiche) {
    return areGlobalsEvil?
        quiche * TAU/5:
        highway(quiche, Globals.frenchFrenchRevolution);
}
Run Code Online (Sandbox Code Playgroud)

要么

int beAnExample(int quiche) {
    if (areGlobalsEvil) {
        int to5 = TAU/5;
        int result = quiche * to5;
        return result;
    } else {
        Game french = Globals.frenchFrenchRevolution;
        int result = highway(quiche, french);
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

真的,我要问的是:在将方法编译为字节码时,这种局部变量的数量是否相关?如果是这样,一旦Hotspot开始工作呢?

这个问题与我正在研究的代码生成器有关.

小智 5

简单的答案是否定的.局部变量消耗运行时堆栈空间.为它们分配空间只会略微增加指令的数量.您的示例几乎没有什么区别,因为中间计算需要临时存储在堆栈上,以便以后可以使用它们.更多地关注程序的可读性而不是不必要的微优化.

如果您对查看类的实际字节码感兴趣,请调查该javap程序.