我正在打败音序器/移动音乐工作室。花了整整两个星期后,我几乎决定去native / ndk因为java / android自己生成垃圾。但是在改造整个项目之前想到并没有受到伤害。
我需要尽可能快地从序列块生成音频缓冲区。现在GC进来并暂停我的程序为XXms,无法填充音频缓冲区,无法做任何事情。有没有办法避免这种情况?这不是我的代码在堆上生成垃圾(几乎可以肯定,因为我注释掉了整个处理代码,使项目模板保持程序干净)。
我正在使用一个线程来运行那个干净的android项目来监视堆空闲内存,这个内存不断下降,直到它达到GC暂停整个程序的程度。所有的线程都在这里:
while(!done){
Log.w("mem", ""+runtime.freeMemory());
sleep(100);
}
为什么呢?有意吗?这很重要,因为它让我觉得我无法阻止GC执行。我也不能用
System.gc()
开始处理后的任何地方,因为我正在进行中。
编辑:还有办法强制android给我更多的堆空间吗?它给了我10兆的9.2分享Android内容和0.8免费。