我有一个调谐器应用程序,我在后台有大量的计算。 我注意到我在计算时经常有垃圾收集。我已经取代了:
float someBigArray = new float[bigNumber];
使用全局数组:
if (someBigArray == null) {
someBigArray = new float[bigNumber];
} else {
Arrays.fill(someBigArray , 0f);
}
在计算FFT时使用此数组,这称为每秒多次。 我已经摆脱了频繁的垃圾收集,但我不确定它是更有效的解决方案。也许有更好的主意。
答案 0 :(得分:0)
(可能 1 )比回收数组(并重新初始化)要快于分配新数组。
你能做得比重新初始化好吗?可能不是!
但是,如果每次只使用大数组的一小部分,那么重新初始化整个数组可能会浪费。 (可能值得记录每次使用的阵列数量。)
1在某些情况下涉及引用数组,GC对阵列的优化程度要高于GC的终结时间。例如,对tenured数组中的新空间对象的引用将导致新对象无法在新空间集合中收集。