最近,我和我的团队领导讨论了使用临时变量与调用getter方法的问题。很长一段时间以来,我一直认为,如果我知道我将不得不多次调用一个简单的getter方法,我会将其放入一个temp变量中,然后使用该变量。我认为这在风格和性能方面都会更好。然而,我的lead指出,在Java4和更新版本中,这在某种程度上是不正确的。他相信使用较小的变量空间,所以他告诉我,与使用temp变量相比,调用getter方法的性能影响可以忽略不计,因此使用getter更好。然而,我并不完全相信他的论点。你们觉得怎么样?
发布于 2009-12-18 03:01:47
永远不要为了性能而编码,总是为了可读性而编码。让编译器来做这项工作。
它们可以改善编译器/运行时以更快地运行好的代码,而突然之间你的“快速”代码实际上减慢了系统的速度。
Java编译器和运行时优化似乎首先处理更常见/可读的代码,因此您的“优化”代码更有可能在以后被取消优化,而不是刚刚干净地编写的代码。
注意:
这个答案指的是像上面提到的问题一样的Java代码“技巧”,这不是一个糟糕的编程,它可能会将循环的级别从O(N)提高到O(N^2)。一般情况下,编写干净、干燥的代码,并在修复操作之前等待明显太长的时间。除非你是一名游戏设计师,否则你几乎永远不会达到这一点。
发布于 2009-12-18 02:55:44
你的线索是正确的。在VM的现代版本中,返回私有字段的简单getter是内联的,这意味着不存在方法调用的性能开销。
发布于 2009-12-18 04:30:20
不要忘记,通过将getSomething()的值赋给一个变量而不是调用它两次,您假定getSomething()会在您第二次调用它时返回相同的内容。在您正在讨论的场景中,这可能是一个有效的假设,但有时不是。
https://stackoverflow.com/questions/1923795
复制相似问题