我有一个调谐器应用程序,并且在后台进行大量计算。 我注意到我在计算时经常进行垃圾收集。我已经替换:
float someBigArray = new float[bigNumber];
使用全局数组:
if (someBigArray == null) {
someBigArray = new float[bigNumber];
} else {
Arrays.fill(someBigArray , 0f);
}
该数组在计算 FFT 时使用,这称为每秒多次。 我已经摆脱了频繁的垃圾收集,但我不确定这是更有效的解决方案。也许有更好的主意。
最佳答案
它比回收数组(并重新初始化它)比分配新数组要快(可能1)。
除了重新初始化之外,你还能做得更好吗?可能不会!
但是,如果每次只使用大数组的一小部分,那么重新初始化整个数组可能会造成浪费。 (跟踪您每次使用的数组量可能是值得的。)
<小时/>1 在某些涉及引用数组的情况下,对数组进行 GC 比让 GC 保留该数组更好。例如,对长期数组中的新空间对象的引用将导致新对象不会被收集在新空间集合中。
关于java - Arrays.fill() 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49188510/