是否有针对Java集合中size()方法的编译器优化?
考虑以下代码:
for(int i=0;i<list.size();i++)
...some operation.....
每次都会调用size()方法获取长度,是否考虑先获取长度并重复使用呢?(方法调用会有开销)
final int len = list.size()
for(int i=0;i<len;i++)
...some operation.....
然而,当我对这两段代码进行计时时,即使i的值高达10000000,也没有明显的时间差异。 我是否漏掉了什么?更新1:我知道除非集合发生更改,否则不会重新计算大小。 但是方法调用肯定存在一些开销吧。编译器是否总是内联这些方法(请参见Esko的答案)?
更新2:我的好奇心进一步被燃起。从给出的答案中,我看到良好的JIT编译器通常会内联此函数调用。但是,它们仍然必须确定集合是否已修改。我没有接受答案,希望有人可以给我关于编译器如何处理这个问题的指导。