第1章 概貌 1
1.1 Java技术和实时 1
1.1.1 实时编程需求 2
1.1.2 Java和嵌入式实时 3
1.2 实时的定义 3
1.2.1 测量的精度 4
1.2.2 一致性 5
1.2.3 效用函数曲线图 5
1.3 Java的问题 7
1.4 实时Java的问题 8
1.5 总结 9
第2章 Java虚拟机的体系结构 11
2.1 对“一经编写、随处运行”的理解 11
2.2 JVM组件 12
2.2.1 类加载 12
2.2.2 字节码解释器 13
2.2.3 安全管理器 17
2.2.4 垃圾收集器 19
2.2.5 线程管理 22
2.2.6 输入/输出 23
2.2.7 图形 23
2.3 解释器实现 25
2.3.1 标准解释器 25
2.3.2 优化的解释器 25
2.3.3 JIT 26
2.3.4 代码片段 27
2.3.5 编译成独立的进程 28
2.3.6 本机方法 28
2.3.7 编译成本机方法 28
2.3.8 编译成JIT接口 29
第3章 硬件体系结构 31
3.1 单条指令执行的最坏情形 32
3.1.1 最坏情形的场景 32
3.1.2 实用的度量标准 35
3.2 易错硬件的管理 35
3.2.1 管理请求换页 35
3.2.2 管理DMA 36
3.2.3 管理高速缓存 36
3.2.4 管理地址转换高速缓存 36
3.2.5 管理中断 36
3.3 对JVM的影响 37
第4章 垃圾收集 39
4.1 引用计数 39
4.2 基本的垃圾收集 40
4.2.1 标记清除 41
4.2.2 碎片整理 43
4.3 复制式收集器 43
4.4 递增式收集 45
4.5 再生式垃圾收集 48
4.5.1 代间引用 48
4.5.2 大对象存储 49
4.6 实时问题 49
第5章 优先级调度 51
5.1 调度术语 51
5.2 执行序列 52
5.3 抢占 52
5.4 固定优先级与动态优先级 54
5.5 优先级逆转 54
5.6 为什么要32个优先级 57
5.7 与优先级调度有关的问题 58
第6章 利用期限进行调度 61
6.1 底层机制 61
6.2 调度器的作用范围 62
6.3 一些系统实例 63
6.3.1 最早期限优先 63
6.3.2 最小松弛 64
6.3.3 周期调度 65
6.3.4 非周期性服务器 65
6.3.5 处理超负荷的情况 68
6.4 时间性通常是随机的 70
第7章 速率单调分析 71
7.1 原理 71
7.1.1 Liu and Layland原理 71
7.1.2 图形化方法 73
7.1.3 Lehoczky、Sha及Ding原理 74
7.2 限制 76
7.2.1 独立的任务 76
7.2.2 期限与周期相同 77
7.2.3 多处理器系统 78
第8章 实时Java平台介绍 79
8.1 实时Java简史 79
8.2 规范的主要特征 81
8.2.1 线程和调度 82
8.2.2 垃圾收集 83
8.2.3 异步事件处理器 83
8.2.4 异步控制传递 84
8.2.5 内存分配 84
8.2.6 内存访问 85
8.3 实现 86
8.4 RTSJ版的Hello World 86
第9章 闭包 89
9.1 语言结构 89
9.2 Java闭包 89
9.2.1 闭包结构 90
9.2.2 RTSJ中的闭包 91
9.3 闭包的局限性 91
9.3.1 可读性 92
9.3.2 局部变量 92
9.3.3 构造器 92
9.3.4 嵌套 92
第10章 高解析度时间 95
10.1 解析度 95
10.2 “时钟” 95
10.3 HighResolutionTime基类 96
10.4 绝对时间 97
10.5 相对时间 98
10.6 有理时间 98
第11章 异步事件 101
11.1 将事体绑定到事件 101
11.2 基本的异步事件操作 102
11.3 没有事体的异步事件 104
11.3.1 时间触发 104
11.3.2 故障触发 109
11.3.3 软件事件触发 110
11.4 关于实现的讨论 110
第12章 实时线程 113
12.1 创建 113
12.2 调度 117
12.2.1 逆转处理 118
12.2.2 固定优先级 119
12.2.3 可行性 120
12.3 无处理器的周期性线程 121
12.4 有处理器的周期性线程 127
12.5 与正常线程的交互 135
12.6 更改调度器 136
第13章 无堆内存 145
13.1 无堆内存的优点 145
13.2 分配制度 146
13.3 规则 147
13.4 不朽内存中的分配机制 147
13.5 领域内存中的分配机制 150
13.5.1 分配时间 150
13.5.2 创建领域内存 152
13.5.3 分配机制 154
13.5.4 终结器 156
13.6 使用嵌套的领域内存 157
13.6.1 领域堆栈(树) 157
13.6.2 DAG 158
13.6.3 嵌套领域的实际应用 159
13.6.4 每个嵌套领域都包含两个内存区域 161
13.6.5 缺陷 163
13.6.6 使用executeInArea 164
13.6.7 使用标准类 165
13.7 使用共享的领域内存 168
13.7.1 领域堆栈被再次访问 168
13.7.2 领域端埠 172
13.8 难懂的条文 178
13.9 例子 178
第14章 无堆访问 183
14.1 与调度器之间的交互 183
14.2 规则 185
14.3 范例 186
14.4 最终评述 189
第15章 其他异步事件 191
15.1 异步事件和调度器 191
15.2 createReleaseParameters方法 192
15.3 被绑定的异步事件处理器 192
15.4 异步事件处理器与无堆内存 193
15.5 无堆事件处理器与无堆线程 193
15.6 调度 193
15.7 异步事件处理器和线程 194
15.8 特殊的异步事件 195
第16章 复用不朽内存 197
16.1 使用固定对象分配器 197
16.1.1 载体对象 197
16.1.2 限制 199
16.2 回收RT线程 199
16.3 回收异步事件处理器 204
第17章 控制的异步传输 209
17.1 上下文环境中的线程中断 210
17.2 异步中断激发 212
17.2.1 Timed类 212
17.2.2 interrupt方法 214
17.2.3 fire方法 214
17.2.4 小结 216
17.2.5 置换规则 217
17.3 异步异常的传播规则 217
17.3.1 不自觉的捕捉 217
17.3.2 不匹配的doInterruptible 218
17.3.3 匹配的doInterruptible 219
17.3.4 内幕 219
17.3.5 应用程序对异步中断的处理 222
17.4 不可中断的代码 226
17.5 旧式代码 229
17.6 使用ATC来终止线程 229
第18章 物理内存 231
18.1 物理内存和虚拟内存 232
18.2 物理内存管理器 232
18.2.1 内存类型 233
18.2.2 可移动的内存 234
18.3 不朽物理内存 235
18.4 领域物理内存 235
第19章 原始内存访问 237
19.1 安全性 238
19.2 读写 238
19.3 Get/Set方法 239
19.4 映射 242
19.5 RawMemoryFloatAccess类 243
第20章 无锁同步 245
20.1 免等待队列的原理 246
20.1.1 构造器 247
20.1.2 通用的方法 247
20.2 免等待写队列 248
20.2.1 方法 248
20.2.2 共享免等待写队列 249
20.3 免等待读队列 250
20.3.1 附加的构造器 250
20.3.2 方法 251
20.4 免等待双端队列 251
20.5 免等待队列与内存 252
20.6 实现注意事项 253
第21章 建议实践 255
21.1 RTSJ中功能强大并且容易使用的功能特性 255
21.1.1 实时线程 255
21.1.2 周期性线程 255
21.1.3 异步事件处理器 256
21.1.4 高解析度时间 256
21.1.5 事体 256
21.2 RTSJ中功能很强但有危险性的功能特性 256
21.2.1 简单 257
21.2.2 易泄漏 257
21.2.3 不干净 257
21.3 RTSJ中功能很强但须加倍小心的功能特性 258
21.3.1 领域内存 258
21.3.2 无堆异步事件处理器 258
21.3.3 无堆实时线程 258
21.3.4 异步中断式异常 258
21.4 优先级的选择 258