实时Java,第4部分

实时系统和垃圾收集

实时(RT)应用程序开发与通用应用程序开发的差异在于前者对部分运行时行为强加了时间限制。此类限制通常是对应用程序的某些部分实施的,比如中断处理程序,其响应中断的代码必须在给定的时间范围内完成工作。对于硬 RT 系统,比如心脏监测器或国防系统,如果这类系统的运行超出时限,可以看作是整个系统的灾难性失败。而对于软 RT 系统,超出时限可能会有些不利影响 —— 比如 GUI 不能显示其监控流的所有结果 —— 但是不会导致系统失败。

在 Java 应用程序中,Java 虚拟机(JVM)负责优化运行时行为、管理对象堆以及接合操作系统和硬件。虽然语言和平台之间的这个管理层简化了软件开发,但同时也给程序带来了一定数量的开销。GC 就是一个这样的例子,它通常会导致应用程序中的不确定性暂停。暂停的频率和时长都不可预测,使得 Java 语言在传统上并不适合开发 RT 应用程序。一些基于 Java 实时规范(RTSJ)的现有解决方案使开发人员能够避开 Java 技术的不确定性方面,但是需要对现有的编程模型做些更改。

Metronome 是一种确定性的垃圾收集器,为标准的 Java 应用程序提供有限制的低暂停时间和指定的应用程序利用率。有限制的暂停时间的减少源于收集方法的增加和细致的工程决断,包括对 VM 的基本更改。利用率是指应用程序所能够运行的特定时间窗中的时间百分比,剩余时间则用于 GC。Metronome 让用户能够指定应用程序的利用率级别。通过与 RTSJ 结合使用,Metronome 使开发人员能够在时间窗很小的情况下构建具有确定的低暂停时间和无暂停的软件。本文解释了 RT 应用程序的传统 GC 的限制,详述了 Metronome 的方法,并且为使用 Metronome 开发硬 RT 应用程序提供了一些工具和指导。

传统 GC

传统 GC 实现使用 stop-the-world (STW) 方法来恢复堆内存。应用程序一直运行,直至耗尽堆的可用内存,此时 GC 停止所有的应用程序代码、执行垃圾收集,然后让应用程序继续运行。

图 1 演示了用于 GC 活动的传统的 STW 暂停,这些暂停在频率和持续时间方面通常都不可预测。传统的 GC 是不确定的,因为恢复内存所需执行工作的数量取决于应用程序所使用对象的总的数量和大小、这些对象之间的相互连接,以及为释放足够的堆内存以满足未来分配所需完成的工作的多少。

图 1. 传统 GC 暂停

时间: 2024-12-31 19:18:16

实时Java,第4部分的相关文章

使用实时Java进行开发,第2部分 改善服务质量

Java 应用程序中的易变性(通常是由暂停或延迟导致的,其发生时间无法预测)可能在整个软件栈中发生.延迟可由以下因素引起: 硬件(缓存期间) 固件(处理 CPU 温度数据等系统管理中断的过程中) 操作系统(响应一个中断或执行定期调度的后台活动) 在相同系统上运行的其他程序 JVM(垃圾收集.即时编译和类加载) Java 应用程序本身 很难在较高级别上补偿较低级别上的延迟,所以,如果您试图仅在应用程序级别解决易变性,您可能只是转移了 JVM 或 OS 延迟,并没有解决实际问题.幸运的是,较低级别的

使用实时Java进行开发,第1部分 探索实时Java的独特功能

实时 Java 是对 Java 语言的一组增强,为应用程序提供了一定程度的实时性能,这些实时性能是标准 Java 技术所不能提供的.传统的吞吐量性能通常是对可在固定时间量内完成的指令.任务或工作的总数的衡量.与传统的吞吐量性能不同,实时性能专注于应用程序(在不超出给定时间约束的情况下)响应外部刺激因素所需的时间.在硬 实时系统中,决不能超出这类约束:软 实时系统对违规具有更高的容忍度.实时性能要求应用程序本身控制处理器,以便它能够响应刺激因素,并且在响应刺激因素的同时,虚拟机内的竞争进程不会阻止

实时Java,第5部分

本系列 的前几篇文章讨论了 IBM WebSphere Real Time 如何解决了不确定性问题,从而获得极低的 timescale 值(延迟值).这种功能将 Java 平台的范围和收益扩展到原本仅适用于特定的实时(RT)编程语言(如 Ada)的领域之中.RT 硬件和操作系统往往是定制的,难以理解.与之不同,WebSphere Real Time 运行在兼容 IBM BladeCenter LS20(请参见 参考资料)和类似硬件的 Linux RT 版本之上.它支持典型 RT 应用程序的需求:

实时Java,第3部分

线程化和同步是 Java 编程语言的核心特性,Java 语言规范(JLS)中对二者作出了描述.RTSJ 用多种方式扩展了 JLS 的核心功能.(参见 参考资料 中关于 JLS 和 RTSJ 的链接.)例如,RTSJ 引入了一些新的实时(RT)线程类型,它们必须遵守比普通 Java 线程更加严格的调度策略.另一个例子是优先级继承,它是一种锁定策略,定义了锁竞争时如何管理锁同步. 理解对优先级和优先级序列的管理有助于理解 RTSJ 针对线程化和同步所作的更改.优先级也是 RT 应用程序使用的一种重要

实时Java,第2部分

Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管这些语言可以提供更高的性能,但是生成的代码只能在有限的几种系统上执行.在过去的十年中,Java 运行时供应商开发了一些复杂的动态编译器,通常称作即时(Just-in-time,JIT)编译器.程序运行时,JIT 编译器选择将最频繁执行的方法编译成本地代码.运行时才进行本地代码编译而不是在程序运行前进

实时Java,第1部分: 使用Java语言编写实时系统

由于很多重要原因,Java 语言在实时系统中的应用非常有限.这些原因包括 Java 语言设计中固有的不确定性性能影响,例如动态类加载,以及 Java 运行时环境(Java Runtime Environment,JRE)本身的不确定性性能影响,例如垃圾收集器和本地代码编译.Real-time Specification for Java (RTSJ) 是一种开放的规范,它进一步增强了 Java 语言的开放性,使它能够用来构建实时系统(参见 参考资料).要实现 RTSJ 规范,要求具备操作系统.J

Java如何设计、编码、验证和分析基本的实时应用程序

本文是 使用实时 Java 进行开发 系列的第三期文章,也是最后一期文章,它介绍了如何设计.编写.验证和分析基本的http://www.aliyun.com/zixun/aggregation/18208.html">实时应用程序.我们将阐述: 应用程序的时态和性能要求. 为什么传统的非实时 Java 不适合于应用场景. 哪些实时 Java 编程技术被选中. 实现确定性的考虑因素. 测试和验证应用程序的确定性. 调试实时确定性问题的工具和技术. 提高可预见性的选项.我们使应用程序的设计和代

JAVA编程思想 课程进展 一

编程 第1章 对象入门 "为什么面向对象的编程会在软件开发领域造成如此震憾的影响?" 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显得如此高雅和浅显.此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务.每个人都可从中获益,至少表面如此.如果说它有缺点,那就是掌握它需付出的代价.思考对象的时候,需要采用形象思维,而不是程序化的思维.与程序

Java:互联网编程领域的过去与未来之王

作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,Java将成为物联网时代下的最佳开发选项. 对于大家来说,Java到底意味着什么?在校园里头学习过的一款编程语言?企业IT领域的求职神油?抑或是将Java视为主宰互联网后爆发时代的统治性语言?作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,我们将在本文中论证Java在物联网时代下成为最佳开发选项的几大理由. 从1969年至今的这段漫长时光当中,网络设备已经完成了完整的爆发式增长流程.从当初通过ARPANET实现对接的四台高校