[英]Java: getter method vs. public instance variable: performance and memory
[英]Performance of repeated getter calls vs. saving value in a local variable
以下选项之一是否比另一个更好? 性能方面的考虑是什么?
class HelloWorld {
String text = "Hello World";
public String getText() {
return this.text;
}
}
HelloWorld helloWorld = new HelloWorld();
// option A:
for (int i = 0; i < HUGE_NUMBER; i++) System.out.println(helloWorld.getText());
// option B:
String text = helloWorld.getText();
for (int i = 0; i < HUGE_NUMBER; i++) System.out.println(text);
我要特别询问的情况是:(1)getter函数仅返回一个属性而无需执行额外的计算,(2)该属性从未更改(无需获取它的“当前”版本)。
编译器可能足够聪明,无论如何将选项A优化为类似于选项B的东西,因此在此我假定编译器并不乐观。
选项A涉及对getText
许多调用以及对text
字段的许多访问。 选项B调用一次getText
并多次访问text
变量。 因此,选项A将花费更长的时间,因为调用方法不是立即的。 该方法必须添加到调用堆栈中,并在返回时从堆栈中弹出。
但是这种速度差异重要吗? 您必须使用分析器进行检查。 如有疑问,请使用探查器。 如果这实际上不是造成性能瓶颈的原因,那么从选项A更改为B将无济于事。
如果您现在甚至没有性能问题,请不要再为此担心。 等待直到您看到代码运行缓慢,然后与分析器一起检查。
在您遇到这种情况时,我愿意建议您在这里多加考虑,
选项A-在执行System.out.println()
getText()
时直接调用函数getText()
,有人说System.out.println()
这是一种不好的做法,除非您需要执行简单的任务。 有人说它会迅速停止生产线并做其他事情,然后再回到这里。
另一方面,选项B-它在内存中创建一个新变量并存储数据,这在时间和内存方面几乎是消耗的,但是当您打印数据时,它是非常快的。
我真的不能说当人们在不同级别的任务上有不同的优选方案时,哪种方法表现良好。
相反,我可以为您提供一些信息,这些信息将在您将来使用时为您提供帮助: 一些数据加载概念
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.