我有一个节拍器应用程序,每当gc启动它在我的Nexus4上延迟50ms,虽然这几乎不明显我想在旧设备上更糟糕,有些人甚至注意到50ms延迟。 我认为我已经很好地优化了代码,gc每5-10秒就会启动一次。 有人可以建议一种“修复”这种方法吗? 使用NDK编写的线程也会被gc暂停吗?
答案 0 :(得分:1)
如果可能,请删除剩余的分配。如果没有收集垃圾,您将无需停止收集垃圾。 DDMS / ADT Allocation Tracker功能可以帮助您跟踪它们。 (注意它现在在ADT Eclipse插件中 。)
GC不会暂停纯本机线程,尽管它们仍然可以与GC争用CPU。但是,如果线程回调到VM,它将在GC正在进行时暂停。
答案 1 :(得分:1)
如果你在一个单独的线程上处理声音(即使它是一个Java线程),其中0分配发生,那么在另一个线程上启动的GC不会延迟它。