DalvikVM 垃圾收集器是否会停止整个 VM



我遇到一种情况,我的Android应用程序无法及时执行软实时任务,因为调用垃圾收集器需要几毫秒。给予GC的几毫秒时间不足以错过从IO设备读取数据的小任务的一些重要截止日期。

我正在考虑引入另一个线程并赋予它轮询重要数据的任务。但是我不确定 GC 是挂起所有线程还是仅挂起占用内存的线程?

在 Patrick Dubroy 的 Android Apps 内存管理中,我发现了以下内容(幻灯片 16,强调我的):

  • 姜饼前GC:

    • 停止世界

    • 完整堆集合

    • 暂停时间通常> 100 毫秒

  • 姜饼及其他:

    • 并发(大部分)

    • 部分集合

    • 暂停时间通常<5ms>

通常,垃圾回收必须停止整个虚拟机,尽管现在这个时间大大减少了。然而,虚拟机和Android平台作为一个整体都不是实时操作系统,所以不要指望如此严格的保证。

为什么需要单毫秒级精度?

最新更新