在Java中,访问整数数组的值与访问单个整数变量的速度有多快



我有一个父类,它有一个ints数组,但1/3的子类只需要一个整数。

在这里,我想知道对这些类只使用intAry[0]是否同样快。

访问数组时,会涉及边界检查,而访问单个变量时不会发生这种情况。然而,考虑到JIT处理器缓存效应和其他类似的因素,它变得更加复杂,并且无法轻易得出可靠的结论。

你最好把注意力集中在实际热点上。

从概念上讲,在java中访问数组索引总是比访问普通字段慢。这是因为字段直接包含在对象内存中,而在数组索引的情况下,它需要首先读取字段,然后对索引进行额外读取。它还可能因检查索引是否在边界内而招致额外的惩罚,JIT可能无法对此进行优化(基本上这意味着另一次读取数组长度加上比较,并有望正确预测分支)。

另一方面,如果你的类以前碰巧是单态的,那么引入子类可能会增加实际调用方法的额外成本。

虽然的差异在紧循环中可能是显著的,但在更复杂的设计中并不显著,因为总执行时间的很大一部分花在了其他地方。

正如许多评论已经指出的那样,在编写代码之前就试图优化它,而没有任何提示大部分时间都花在了哪里,这是过早的优化,很可能会浪费时间和精力。

最新更新