Gur*_*lki 13 java premature-optimization
假设我有班级:
public class Age {
private int age;
public int getAge() {
return this.age;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Main课程中,我getAge()多次调用该方法.
所以我想知道调用这么多次或调用一次并将其分配给某个变量并使用该变量是明智的.
哪个最好,为什么?
unh*_*ler 10
这可能是您在知道需要之前进行优化的情况.该值只是一个整数,因此如果将值存储在多个位置,它不会占用大量内存.同时,这是一个非常简单的方法调用,不会花费太多时间来执行.以您认为最具可读性的方式编写它.然后,在拥有可靠的代码版本之后,您可以使用分析工具来查看是否存在明显的差异.
不要尝试对此进行微观优化,除非您在分析时发现它确实是一个瓶颈.我使用getAge()访问器方法,因为它最有可能是最易维护和最明显的解决方案.
话虽这么说,这两种方法可能完全相同.在运行时,JIT很可能完全优化掉getAge()调用,因此在两种情况下它都是单一的基本访问.
对于像这样的简单情况,我会选择代码看起来最好的一个。
有几种情况建议调用一次并读取保存的返回值,例如
for (int i = 0; i < list.size(); i++)
doSomethingThatDoesNotAffectSizeOfList();
Run Code Online (Sandbox Code Playgroud)
因为编译器可能无法确定循环体是否影响列表的大小。一个正确实现的列表应该总是能够轻松地知道它的大小,但在其他示例中(或在处理实现不佳的集合时),情况可能会更糟。
一般来说,如果一个方法计算量很大,您可以使用memoization,这基本上意味着您缓存已经计算的输入/输出值。
记忆函数“记住”与某些特定输入集相对应的结果。使用记住的输入进行的后续调用将返回记住的结果,而不是重新计算它,从而消除了除第一次调用具有这些参数的函数之外的所有调用中使用给定参数进行调用的主要成本。
这种技术将“节省返回值以提高效率”推入方法本身,从而简化了维护等等......
| 归档时间: |
|
| 查看次数: |
5926 次 |
| 最近记录: |