例如:
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缓存局部性。