实时Java,第4部分 - 实时垃圾收集 - 编程入门网
的存储,将其放回堆的自由存储中,使那些存储可用于分配。与标志阶段类似,将死对象清理回自由内存池的耗费也不能完全预测。虽然系统中活对象的数目和大小可从标记阶段获得,但是对它们在堆中的位置及其对于自由内存池的适宜性进行分析所需的工作却不可预测。
传统 GC 对于 RT 应用程序的适宜性 RT 应用程序必须能够响应具有确定时间间隔的实际刺激。传统 GC 无法满足这个需求,因为应用程序必须暂停以便 GC 可以回收所有未使用的内存。回收所花费的时间没有限制并受波动的影响。此外,GC 中断应用程序的时机在传统上不可预测。应用程序暂停的持续时间被称作暂停时间,因为这段时间暂停了应用程序进程使 GC 可以回收自由空间。RT 应用程序要求低暂停时间,因为那通常表示应用程序响应具有较高的计时限制。 Metronome GC Metronome 的方法用于将执行 GC 循环的时间划分为一系列的增量,称作量子。为此,每个阶段通过一系列不连续的步骤来完成其全部工作,允许收集器执行以下操作: 抢占应用程序一小段确定的时间。 执行收集操作。 让应用程序恢复运行。 这个顺序与传统模型形成了很好的对比,在传统模型中,应用程序在某个不可预测的时间暂停,GC 运行一段没有限制的时间后完成,然后 GC 停止,让应用程序恢复运行。 虽然将 STW GC 循环分解为短暂的有限制的暂停有助于减少 GC 的影响,但这对 RT 应用程序来说还不够。为了使 RT 应用程序满足其时限要求,任何特定时间段中都必须有足够的部分可供应用程序使用;否则,就会发生需求冲突,应用程序也会失败。例如,可假定一个 GC 暂停被限制为 1 毫秒的场景:在每 1 毫秒的 GC 暂停之间,应用程序只能运行 0.1 毫秒,则程序执行几乎没有进展,甚至不太复杂的 RT 系统也可能失败,因为它们缺少时间执行处理。实际上,足够接近的短暂停时间与完整的 STW GC 并无二致。 图 2 演示了 GC 运行多数时间但仍然保留 1 毫秒的暂停时间: 图 2. 暂停时间短但是应用程序时间更短 实时Java,第4部分 - 实时垃圾收集(3)时间:2011-06-22 Benjamin Biron Rya利用率 除了有限制的暂停时间外,还需要另外一种测量方法来确定分配给应用程序和 GC 的时间百分比。我们将应用程序利用率定义为:分配给特定时间窗内的应用程序的时间百分比,在这段时间内应用程序连续地执行完整个运行过程。Metronome 保证应用程序可以获得一定百分比的处理时间。剩余时间的使用由 GC 决定:可以分配给应用程序也可以由 GC 使用。短暂停时间可以保证比传统收集器分解得更细的利用率。因为用于测量利用率的时间间隔趋近于零,所以应用程序的预期利用率是 0% 或 100%,原因是这个时间间隔低于 GC 量的大小。对滑动窗口大小的度量必须严格保证利用率。Metronome 在 10 毫秒的时间窗内使用 500 微秒的时间量,默认的利用率目标为 70%。 图 3 演示一个划分为多个 500 微秒时间片的 GC 循环,该循环在 10 毫秒的时间窗内具有 70% 的利用率: 图 3. 滑动窗口利用率 在图 3 中,每个时间片表示运行 GC 或应用程序的一个时间量。时间片下面的各栏表示滑动窗口。每个滑动窗口具有最多 6 个 GC 时间量和至少 14 个应用程序时间量。每个 GC 时间量后接至少 1 个应用程序时间量,即使通过连续的 GC 时间量来保持目标利用率也是如此。这就保证了将应用程序暂停时间限制为 1 个时间量长度。但是,如果指定的目标利用率低于 50%,则会产生一些连续的 GC 时间量使 GC 能够满足分配。 图 4 和图 5 演示了一个典型的应用程序利用率场景。在图 4 中,利用率降为 70% 的区域表示正在进行 GC 循环的区域。注意,如果 GC 是不活动的,则应用程序的利用率为 100%。 图 4. 总利用率 图 5 演示了图 4 的一个 GC 循环片段: 图 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |