在Java中,将内部局部数组提取到外部是内存效率高还是速度快?



例如:

while (some_condition) {
  byte[] myArray = new byte[65536];
  ...do some array manipulate...
  ...
}

byte[] myArray = new byte[65536];
while (some_condition) {
  ...clear / system.arraycopy the myArray with 0
  ...then, do some array manipulate...
  ...
}

在Java JVM中哪个内存效率更高或速度更快?

当循环较深时,将最内层的局部数组提取到最外层是很难看的,很难理解。

在这两种情况下,数组都将归零,要么由您显式地归零(第二种情况),要么由分配后的JVM归零(第一种情况)。但是,在第一种情况下,由于每次迭代都要分配内存,因此总体内存压力会更大,这可能会导致垃圾收集(具体取决于您有多少次迭代、您在程序中执行的其他操作以及许多其他因素)。与第二种情况相比,这可能会减慢您的速度。

所以第二个例子应该更节省内存。总体运行时间将取决于其他因素,例如是否导致GC。

在您创建的垃圾数量方面有一个明确的优势。数组被取出后,它是0,数组被放入循环后,它是0 (n)这一事实是否会对整体环境产生影响,取决于环境。在某些情况下,最好选择简单性,但是在的情况下,消除垃圾可以带来重要的速度优势。重用数组的另一个优点是CPU缓存局部性。

最新更新