0

假设您有以下代码..

for(Element elm : elements)
   if(elm instanceof Foobar)
      Session.getSomething().getListOfSomething().add((Foobar)elm);

做以下事情不是更好吗?

List<Foobar> list = Session.getSomething().getListOfSomething();

for(Element elm : elements)
   if(elm instanceof Foobar)
      list.add((Foobar)elm);

假设 Something 和 listOfSomething 在循环执行期间没有改变。我认为由于减少了方法调用,这可以大大减少调用堆栈推送/弹出的数量。

这种优化是不是太挑剔了?我不认为 java 编译器会假设他们可以这样优化。

编辑:未简化代码以排除 AddAll 的使用

4

2 回答 2

1

在大多数情况下会更好。原因是 Java 对调用约定非常严格,每次迭代都必须进行 4 次额外的虚拟调用。有一些例外(即通过 JIT 内联),但这是一个异国情调。

尽管使用默认功能可能会更好:

Session.getSomething().getListOfSomething().addAll(elements)
于 2013-04-18T18:42:27.637 回答
0

这将取决于做什么getSomething()getListOfSomething()做什么。它可能没有被优化的原因是编译器不知道调用是否每次都会返回相同的东西,或者调用这些方法是否有其他副作用。如果它每次都返回相同的东西,没有副作用,那么是的,它是一种优化,如果不是,那么它甚至不再是同一个程序。

于 2013-04-18T18:45:57.080 回答