50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

关于实时 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:161554
用户头像

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

关注

评论

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

哈银消费金融七载风雨兼程,创新引领稳健前行

极客天地

开源无代码 / 低代码平台 NocoBase 1.0.0-alpha.15: 新增插件、改进「配置操作」交互

NocoBase

GitHub 开源 低代码 无代码开发 开源开发工具

面了一个程序员,因为6休1拒绝了我

伤感汤姆布利柏

预约直播丨ETLCloud训练营:ETL中多流数据合并与运算专题

谷云科技RestCloud

直播 ETL

LeetCode题解:112. 路径总和,BFS,JavaScript,详细注释

Lee Chen

DeepRec Extension 打造稳定高效的分布式训练

阿里云大数据AI技术

人工智能 阿里云 分布式

荒野之境:XMAGE的抵达与眺望

脑极体

影像

LeetCode题解:9. 回文数,翻转一半数字,JavaScript,详细注释

Lee Chen

微服务下认证授权框架的探讨

不在线第一只蜗牛

架构 微服务 框架

上海站丨飞天技术沙龙 Serverless + AI 专场开启报名!

阿里巴巴云原生

阿里云 Serverless 云原生

探索Solana链上DApp开发:高性能区块链生态的新机遇

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发

基于 Prometheus 的超算弹性计算场景下主机监控最佳实践

阿里巴巴云原生

阿里云 云原生 Prometheus

为你的程序精选的7个最佳天气API

幂简集成

API 天气api

自动生成流程图的软件!这3款值得推荐!

彭宏豪95

人工智能 流程图 在线白板 AIGC 效率软件

GeminiDB PITR,让游戏回档“进退自如”!

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GeminiDB 企业号2024年5月PK榜

SDK实战指南:从配置到管理,一步步创建阿里云ECS实例

极客天地

客户案例|博睿数据助力中泰证券App用户体验全面升级

博睿数据

8家券商综合评级上升,4月券商App终端业务体验评测报告发布

博睿数据

卓越开发管理之道

凌晞

团队管理 项目管理 技术管理 开发管理

LeetCode题解:112. 路径总和,递归,JavaScript,详细注释

Lee Chen

华为云受邀出席AICon2024 分享AI Agent在企业生产中的技术实践

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 AI Agent 企业号2024年5月PK榜

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