论文部分内容阅读
在实时系统中,每个任务都应在某种程度上满足时间约束的限制,任务的正确性不仅依赖于其计算结果,还依赖于这个结果产生的时间。此类系统中应用程序的执行时间应当是确定的,以此保证整个系统的可预测性。
如今,Java体系结构以其良好的网络移动性,广泛的跨平台能力,以及快速开发、快速上市的优势,在桌面及服务器领域取得了很大的成功。但是,Java虚拟机(JVM)中通常采用的垃圾收集(GC)技术,却严重妨碍了Java在实时嵌入式领域的应用。传统的垃圾收集器工作时,会要求系统暂停所有其它线程的执行,这种暂停发生的时刻和持续的时间都是不确定的,使得系统的可预测性受到了严重的破坏。
为解决这一问题,Java标准制定组织(JCP)发布了实时Java规范(RTSJ)。RTSJ规定了一套内存模型,可以让程序员写出无需垃圾收集的代码。然而,这套模型中的对象间引用规则过于复杂,为应用开发者增添了不必要的负担。因此,大多数商业实时Java虚拟机提供了自己的实时垃圾收集器(RTGC)。
以实时垃圾收集器为软实时应用提供支持,可以减轻软实时程序员手动管理内存的负担,发挥Java快速上市的优势。本文的主要工作是设计并实现了一个支持软实时约束的垃圾收集器。该收集器以双空间拷贝(Two-space copying)算法为基础,采用增量式的工作方式,分散的完成收集任务;该收集器采用了基于工作(work-based)的调度方式,将收集增量附加在了内存分配操作中,并通过读屏障(read barrier)保证了增量工作中不会有活对象丢失。
本文基于Apache Harmony开源JVM实现了该实时垃圾收集器。首先,本文介绍了Harmony虚拟机核心与其垃圾收集器交互的接口,分析了HarmonyGCv4.1的代码,理清了该收集器使用的主要数据结构。在此基础上,移除了Harmony虚拟机中现有的垃圾收集器,并将本文的收集器植入其中。经测试,新的实时垃圾收集器表现良好,收集暂停时间明显下降,运行单线程程序时对应用的干扰显著降低。不过,由于Harmony目前不支持线程的优先级抢占调度,多线程应用程序的测试结果尚不能使人十分满意。
目前,本文的实时垃圾收集器暂不支持终结化(Finalization)和弱引用(WeakReferences),进一步的性能提高、功能完善将在后续工作中进行。