Java getter是否会导致性能下降

时间:2010-04-06 04:39:06

标签: java

如果我有代码

int getA(){
 return a;
}

然后执行类似

的操作
int b = obj.getA();

而不是

int b = obj.a;

这是否意味着必须推送和弹出堆栈最终会减慢我的代码?

3 个答案:

答案 0 :(得分:4)

JIT编译器将内联该方法。

代码看起来应该是

int b = obj.GetA();

答案 1 :(得分:3)

我有两个答案:

  1. 我不认为使用getter直接访问变量会有显着的性能损失。我会更担心代码的可理解性和可读性,而不是这种决策的性能。
  2. 根据面向对象的设计原则,您可能会隐藏数据并提供访问它的getter方法 - 这个方法的优点是here

答案 2 :(得分:1)

理论上,由于正在进行方法调用,因此存在一些运行时惩罚。实际上,由于两个原因,这对整体表现影响很小:

  1. 除非obj.getA()发生在程序的最内层循环中,否则它对代码整体性能的影响可以忽略不计。当性能成为问题时,您应该考虑代码的瓶颈。优化不在这些热点的代码是没有意义的。为了识别这些位置,您需要通过profiler来分析代码的执行情况。
  2. 正如@Michael所说,JVM使用“Just In Time”编译器/优化器,它根据实际执行内联代码。它只执行这种优化(请参阅此talk