2
我有這樣一段代碼在Android中,這是造成GC的海量日誌下面在android中導致大量垃圾收集的嵌套循環?
// When turning into frequency domain we'll need complex numbers:
byte audio[] = out.toByteArray(); //approx size 827392
int amountPossible = 200;
Complex[][] results = new Complex[amountPossible][];
// For all the chunks:
for (int times = 0; times < amountPossible; times++) {
Complex[] complex = new Complex[4096];
for (int i = 0; i < 4096; i++) {
// Put the time domain data into a complex number with imaginary
// part as 0:
complex[i] = new Complex(audio[(times * 4096) + i], 0);
}
// Perform FFT analysis on the chunk:
results[times] = FFT.fft(complex);
}
少日誌提前
D/dalvikvm(10602): GC_CONCURRENT freed 805K, 88% free 3911K/31075K, paused 2ms+5ms
D/dalvikvm(10602): GC_CONCURRENT freed 1796K, 88% free 3957K/31075K, paused 1ms+2ms
D/dalvikvm(10602): GC_CONCURRENT freed 1811K, 88% free 3970K/31075K, paused 1ms+3ms
D/dalvikvm(10602): GC_CONCURRENT freed 1711K, 87% free 4102K/31075K, paused 2ms+3ms
D/dalvikvm(10602): GC_CONCURRENT freed 1806K, 87% free 4138K/31075K, paused 1ms+3ms
D/dalvikvm(10602): GC_CONCURRENT freed 1755K, 87% free 4226K/31075K, paused 1ms+3ms
D/dalvikvm(10602): GC_CONCURRENT freed 1827K, 87% free 4242K/31075K, paused 1ms+3ms
D/dalvikvm(10602): GC_CONCURRENT freed 1732K, 87% free 4258K/31075K, paused 2ms+2ms
D/dalvikvm(10602): GC_CONCURRENT freed 1714K, 86% free 4387K/31075K, paused 1ms+3ms
感謝
您創建了'4096^2'對象 - 您真的在使用它們嗎?不要忘記你正在使用內存有限的手機! – alfasin
那麼你真正的問題是什麼?到目前爲止,唯一可能的答案是*「是 - 這是代碼的預期行爲」*。 –
當我註釋掉「results [times] = FFT.fft(complex);」 GC日誌已停止。 複數的FFT是一個非常繁重的操作? –