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;
}
}