【发布时间】:2012-12-01 08:54:06
【问题描述】:
我的 Android 应用程序无法及时执行软实时任务,因为调用垃圾收集器需要几毫秒。给 GC 的几毫秒时间不足以错过从 IO 设备读取数据的小任务的一些重要截止日期。
我正在考虑引入另一个线程并赋予它轮询重要数据的任务。但是我不确定 GC 是挂起所有线程还是只挂起占用内存的线程?
【问题讨论】:
我的 Android 应用程序无法及时执行软实时任务,因为调用垃圾收集器需要几毫秒。给 GC 的几毫秒时间不足以错过从 IO 设备读取数据的小任务的一些重要截止日期。
我正在考虑引入另一个线程并赋予它轮询重要数据的任务。但是我不确定 GC 是挂起所有线程还是只挂起占用内存的线程?
【问题讨论】:
在Memory Management for Android Apps by Patrick Dubroy 我发现了以下内容(幻灯片 16,强调我的):
预姜饼GC:
停止世界
完整堆收集
暂停时间经常> 100ms
姜饼及其他:
并发(大部分)
部分集合
暂停时间通常
一般来说,垃圾收集必须停止整个 VM,尽管现在这个时间大大减少了。然而,VM 和 Android 平台作为一个整体都不是实时操作系统,所以不要指望如此严格的保证。
为什么需要单毫秒精度?
【讨论】: