写点什么

关于实时 Java 的系列文章

  • 2008-08-01
  • 本文字数:1634 字

    阅读完需:约 5 分钟

由 Sun 的 Brian Goetz 和 Robert Eckstein 合作撰写的有关 Java 和实时系统的文章最近登载在 Sun 开发者网络上,该系列文章由两部分组成。

该系列第一部分介绍了实时程序设计的概念,及其与 Java 的关系,并描述了应用标准 Java 运行时系统创建实时应用的障碍:

  • 操作系统问题:调度延迟、时钟精度较低。
  • 线程优先级问题:不可靠的线程优先级保证和优先级倒置。
  • 类加载延迟。
  • 垃圾回收延迟。
  • 应用程序代码不符合实时要求。
  • 系统中存在其它优先级较高的活动。

作者随后介绍了 RTSJ——Java 实时规范 (Real-Time Specification for Java)。RTSJ 与当初的 JSR 1 有所不同,从 2002 年最初的可用版本问世至今,已经过一系列维护版本。文章描述了实时规范对线程做出的改变: > 在一个真正的实时环境中,线程优先级是极其重要的,没有一个系统可以保证,所有的任务都能够准时完成。然而,一个实时系统能够确保的是,当有些任务即将超过最终时限时,可以先牺牲低优先级的任务来保障它的执行。 RTSJ 定义了至少 28 种优先权级别,并要求严格执行此规定。然而,正如本篇文章前面所说,RTSJ 的实现依赖于支持多种优先权的实时操作系统,和高优先级线程抢占低优先级线程的能力。

Goetz 和 Eckstein 接着提到 Java 实时系统规范的核心概念——实时线程: > 此外,RTSJ 可允许非实时和实时活动同时存在于一个 Java 应用中,对一个活动的时序保证程度依赖于活动所属线程类型: java.lang.Thread 或``javax.realtime.RealtimeThread 线程类型。- 标准 java.lang.Thread(JLT) 线程用来支持非实时的活动。JLT 线程可以应用 Thread 类定义的 10 种优先权级别,但是它们不适用于实时活动,因为不能够提供时序执行保证。

  • RTSJ 还定义了javax.realtime.RealtimeThread (RTT) 线程类型。RTTs 可以利用 RTSJ 提供的强大的线程优先权支持,它的调度遵循运行直至阻塞 (run-to-block) 原则,而非按时间片运行原则。这就意味着,当有另外具有较高优先权的 RTT 出现时,调度程序会抢占该 RTT。

第一部分讲到的最后一个概念是,支持内存管理所做的各种扩展。由于与垃圾回收及对象分配相关的延迟的存在,三个内存区域被划分出来: - 标准堆 (Standard heap)——与标准 Java 中的内存管理类似。

  • 永久内存 (Immortal memory)——必须由软件显式释放的内存。
  • 作用域内存 (Scoped memory)——具有不连续生命周期的内存,有固定大小。

引入 RealtimeThread 的扩展类——NoHeapRealtimeThread,以实时友好的方式辅助管理这些独特的内存区域:

RTSJ 提供一个 RTT 的子类,称为NoHeapRealtimeThread (NHRT)。该子类得实例可以避免由垃圾回收引起的不稳定情况。这个 NHRT 类是为硬实时 (hard-real-time) 活动所准备的。 为最大化可预测性,NHRTs 不能访问垃圾回收堆,也不能操纵堆变量。否则,线程会遭遇 GC 暂停,这将导致任务错过运行时限。与此相反的是,NHRT 可以更具预测性的方式使用 _ 作用域内存 _ 和 _ 永久内存 _ 特性分配内存。

然而,即使软件正在使用特定的内存区域,它的资源使用依然很容易受到内存其它非关键部分的 GC 的影响。由于这个原因,该系列文章的第二部分集中于和垃圾回收相关的问题,阐述了可用于实时Java 系统的不同GC 方法,然后介绍了Sun 的商业实时Java 系统: Java RTS 。在第二部分中描述了四种垃圾回收算法: - 基于工作的 GC(Work-Based GC)——回收由对象分配触发。

  • 基于时间的 GC(Time-Based GC)——回收通过标准的时间箱划定界限。
  • Henriksson’s GC——在关键和非关键线程之间有所区别的基于工作的 GC(Work-based GC)。
  • Java RTS Real-Time GC (RTGC)——可以用在 Java RTS 中,更加灵活 / 细粒度的 Henriksson’s GC 的扩展。

如今可用的实时系统有很多, Sun Java RTS IBM Websphere RT 都是遵从 RTSJ 的实时系统平台。可以选择的还有 Oracle Weblogic Real Time ,它是建立于标准 Java 的工具集,对 RTSJ 系统还不具备所有可靠性保证,但在固定时间边界内还是可以提供一个更具预测性的系统。 查看原文: Two-Part Series on Real-Time Java

2008-08-01 05:161481
用户头像

发布了 127 篇内容, 共 47.7 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

异步 API 设计之扇入扇出模式

宇宙之一粟

API 7月月更

Istio组件Mixer介绍

阿泽🧸

istio 7月月更

jQuery 的事件绑定

Jason199

jquery js 7月月更

【刷题记录】11. 盛最多水的容器

WangNing

7月月更

Codeforces Round #787 (Div. 3)

KEY.L

7月月更

谈Java Record类

ES_her0

7月月更

GNU/Linux知识库(4)- 用户 & 权限

冯亮

Linux DevOps 操作系统 GNU

玩转Liunx系统,看这篇文章就够了(三)

Java学术趴

7月月更

【愚公系列】2022年07月 Java教学课程 04-Java语言三种注释

愚公搬代码

7月月更

17张图带你深度剖析 ArrayDeque(JDK双端队列)源码

程序员小毕

Java 源码 程序员 jdk 队列

小程序媒体组件-1

小恺

7月月更

新书上市 | 图解、幽默、有趣、简单的 Java 书

图灵教育

Java 程序员 计算机

自动化生成Javascript调用后台代码v0.5.3版本

百家饭隐私计算平台创业者

JavaScript API

九联科技开发板正式合入OpenHarmony主干

科技汇

AWS Config

冯亮

云计算 DevOps 架构师 AWS 产品解决方案

金融行业开放平台

穿过生命散发芬芳

7月月更 开放平台

JSON 和JavaScript 介绍与区别

devpoint

JavaScript json 7月月更

Flutter 模拟火箭发射动画

岛上码农

flutter ios 移动端开发 安卓开发 7月月更

手动上传表单数据+图片文件功能

猪痞恶霸

前端 7月月更

电商平台数据可视化监控系统-Echarts-vue项目综合练习

武师叔

7月月更

【Docker 那些事儿】容器数据卷的妙手

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

SQL也能做AI ?没错!MLOps Meetup V3 回顾|OpenMLBD+SQLFlow+Byzer

星策开源社区

人工智能 机器学习 sql 特征平台

包装类型

7月月更

zookeeper-ACL权限相关

zarmnosaj

7月月更

行业首个「视频直播技术最佳实践图」发布!

阿里云CloudImagine

阿里云 音视频 直播

Python已有列表和字典,为什么还需要元组?

迷彩

Python Python基础知识 元组 7月月更

长安链中的加密算法

长安链

Docker(二)Docker-Compose、网络、数据卷

神农写代码

计算机组成原理之计算机最基本的工作原理

未见花闻

7月月更

关于实时Java的系列文章_Java_R.J. Lorimer_InfoQ精选文章