写点什么

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

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

关注

评论

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

听GPT 讲Rust Tokio源代码(4)

fliter

TiDB 与MySQL优化器在特定语句下执行效果对比(二)

TiDB 社区干货传送门

性能调优 实践案例 版本测评 新版本/特性发布 6.x 实践

TiFlash亿级多表关联优化实践,从无法跑出结果优化到2.59秒

TiDB 社区干货传送门

性能调优 实践案例 OLAP 场景实践

【奖项公布】首届全球 TiDB 文档挑战赛圆满收官!来看看前五名花落谁家!

TiDB 社区干货传送门

TiDB 7.5.0 LTS 高性能数据批处理方案

TiDB 社区干货传送门

新版本/特性解读

TIKV 分布式事务--乐观事务 2PC 概览

TiDB 社区干货传送门

TiDB 底层架构 TiKV 源码解读

听GPT 讲Deno源代码(3)

fliter

听GPT 讲Rust Tokio源代码(7)

fliter

Optimism为 CQT提供价值 20 万美元的生态系统资助,以表彰其支持

股市老人

年青DBA应该学习的数据库之TiDB

TiDB 社区干货传送门

数据库架构设计 数据库前沿趋势

数据所在,计算随行:Databend 的 2023 年度总结

Databend

京东零售技术小哥带你揭秘:亿级流量高并发春晚互动前端技术

京东零售技术

前端 春晚

考研失败如何快速找到编程工作?

王磊

Java 考研

听GPT 讲Deno源代码(4)

fliter

跨越财务困境,聚道云软件连接器如何助力企业轻松实现数字化转型?

聚道云软件连接器

案例分享

TiDB 与MySQL优化器在特定语句下执行效果对比(一)

TiDB 社区干货传送门

性能调优 实践案例 版本测评

听GPT 讲Rust Tokio源代码(8)

fliter

听GPT 讲Deno源代码(2)

fliter

使用 TiKV 读改写 TiDB 数据

TiDB 社区干货传送门

TiDB 源码解读 TiKV 底层架构

根深叶茂,众行致远 | OpenHarmony项目群技术指导委员会迎新春,展未来

科技热闻

汽车零部件MES系统实施方案

万界星空科技

汽车 mes 万界星空科技 汽车零部件

php作业1

大肚皮狒狒

华为智慧屏游戏中心合家欢会员免费领!春节团聚畅玩《小小炸弹人》等合家欢游戏

最新动态

初识TiDB的增量数据同步工具TiCDC

TiDB 社区干货传送门

迁移 实践案例 7.x 实践

新年新岁,好运 long long

阿里云CloudImagine

云计算 视频云

萨尔瓦多「比特币总统」连任,Web3 的又一「胜地」?

TechubNews

听GPT 讲Rust Tokio源代码(6)

fliter

听GPT 讲Deno源代码(1)

fliter

华为音乐用AI送上新年佳曲,花式祝福迎龙年新春

最新动态

Java break、continue 详解与数组深入解析:单维数组和多维数组详细教程

小万哥

Java 程序人生 编程语言 软件工程 后端开发

文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题

福大大架构师每日一题

福大大架构师每日一题

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