0

我有一个节拍器应用程序,每当 gc 启动时,它在我的 Nexus4 上都会延迟 50 毫秒,尽管这几乎不明显,我猜在旧设备上情况更糟,有些人甚至会注意到 50 毫秒的延迟。我认为我已经很好地优化了代码,gc 仅每 5-10 秒启动一次。有人可以建议一种“解决”这个问题的方法吗?用 NDK 编写的线程也会被 gc 暂停吗?

4

2 回答 2

1

如果可能,删除那些剩余的分配。如果没有可收集的垃圾,您不必停下来收集垃圾。DDMS/ADT Allocation Tracker功能可以帮助您追踪它们。(注意它现在在 ADT Eclipse 插件中可用。)

纯原生线程不会被 GC 暂停,尽管它们仍然可以与 GC 争夺 CPU。但是,如果线程回调到 VM 中,如果 GC 正在进行,它将暂停。

于 2013-07-30T23:12:12.817 回答
1

如果您在发生 0 分配的单独线程(即使它是 Java 线程)上处理声音,则在另一个线程上启动的 GC 不会延迟它。

于 2013-07-31T05:10:27.907 回答