Java 爪哇:哪个更快?局部变量还是访问封装?

Java 爪哇:哪个更快?局部变量还是访问封装?,java,performance,variables,optimization,encapsulation,Java,Performance,Variables,Optimization,Encapsulation,我最近读到一篇文章指出,在访问变量时,使用堆栈比使用堆更快: void f() { int x = 123; // <- located in stack } int x; // <- located in heap void f() { x = 123 } 或 如果它们的效率差不多,我需要执行多少次.getValue()才能降低效率 提前谢谢 将在运行时更改(优化)代码,因此这在Java中并不重要。一个简单的JIT优化是 要进一步优化,请阅读并查看此问题如果

我最近读到一篇文章指出,在访问变量时,使用堆栈比使用堆更快:

void f() {
    int x = 123; // <- located in stack
}

int x; // <- located in heap
void f() {
    x = 123  
}

如果它们的效率差不多,我需要执行多少次
.getValue()
才能降低效率

提前谢谢

将在运行时更改(优化)代码,因此这在Java中并不重要。一个简单的JIT优化是


要进一步优化,请阅读并查看此问题

如果使用局部变量,可以告诉编译器值不会更改
final int x=,将其转换为某种局部常量

重新分配值(回收对象等)可能有助于减少垃圾收集(GC)


写一些极端压力测试,如果可能的话,也写一个视觉测试,让它运行很长时间,测量真实的表现,感知的表现。更好更快的时间并不总是更好的,有时它可能会稍微慢一点,但在整个执行过程中会稍微平滑一点。

请不要像这样尝试优化代码。首先让它工作。。。一般来说,这些微观优化是毫无意义的。您需要对实际代码中的更改进行基准测试,以确定它们是否对您的用例有影响。为什么会有所不同?请谷歌搜索“早熟优化”。如果你想知道效率的转折点在哪里,你需要自己进行适当的微基准测试。答案因您的硬件和软件而异。我相信我不是唯一一个不知道基准测试存在的人。我的代码确实有效,所以我只是问它是否真的有区别,如果有人知道,区别是什么。我不会相信你的帖子链接。如果测量得当,你肯定会发现没有什么不同。。。
void f() {
    doSomething(foo.getValue() + bar.getValue()); 
    doSomethingElse(foo.getValue(), bar.getValue());
    doAnotherThing(foo.getValue(), bar.getValue());
    // ... <- lot's of accessing (something.getValue());
}
void g() {
    int firstInt = foo.getValue();
    int secondInt = bar.getValue();

    doSomething(firstInt + secondInt);
    doSomethingElse(firstInt, secondInt);
    doAnotherThing(firstInt, secondInt);
    // ... <- lot's of accessing firstInt and secondInt
}
public class MyObject {
    int x = 1;
    public int getValue() {
        return x;
    }
}