Java 对嵌入式系统来说是否过于庞大?

添加时间:15-10-28   添加人:  点击:

因为嵌入式设备对于计算性能总是捉襟见肘,Java 往往不是嵌入式开发的第一选择。汇编、C 甚至是 Python 都能在局限的内存、低功率的 CPU 或是有其他硬件限制的系统上更能吃得开。然而,随着嵌入式环境平均水平的增长,近些年来这种妨碍已经逐渐在消失。嵌入式环境下新的 Java 编译技术的采用也使资源需求也有所缩减。

2015年 Java 嵌入式开发的展望

Java 早在 1996 年就有了进行嵌入式编程的资质,然而缺乏势头。今天这种趋势发展迅速,一套为嵌入式打造的生态系统——包含 Java 标准和工具——已经蓄势以待。

在 2000 年到 2010 年间,基于 Java 的嵌入式或“微”计算集中在 J2ME (Jave 2 Platform, Micro Edition)是一个普遍事实。现在, Java 平台,微型版本或者说 Java ME已经是标准的嵌入式应用运行环境了。尽管Java ME和它的概念——特别是profiles和configurations ——依然非常关键,但移动 Java 开发者往往更专注于Android和HTML5的用户界面。移动电话是最常见的嵌入式计算机,现在销售的手机大约有五分之四基于安卓系统。(虽然 Android 支持 Java ME,但这两个有不同的产品生命周期,而且尚不清楚谁将决定什么会是下一代实际嵌入式设备的应用程序环境)。

译者注: profiles 常译作简表,是某个行业或某个领域内的特性概括,每套简表专门针对某一类设备;configurations 常译作配置,Java ME引入了配置的概念,屏蔽了不同硬件设备的物理特性

简表(profiles)和配置(configurations)在嵌入式编程中是非常关键的概念。一个像MIDP(Mobile Information Device Profile,移动信息设备配置文件)这样的嵌入式简表是一套 API 的集合,用于支持相关的设备。而配置则是一套框架规范。不严谨地将配置看作是简表的所属,也许有助于理解简表这一概念,包括最显著的 CLDC (Connected Limited Device Configuration)或称之为有线连接设备配置也符合这一所想。(见 “Jim Connors’ Weblog” 以了解更多有关应用于物联网的简表和配置)。

除了 Java ME 的简表和配置之外,一小撮企业级 Java 技术持有嵌入式开发的潜力。用于分布式资源管理与监测的Java 管理扩展 (即JMX  Java Management Extensions)可以在有朝一日完整地补足嵌入式的定义。Real-time Java (实时 Java)在物联网嵌入式编程中也占据着重要地位。

Java 的实时模型与工具

在医疗、运输、制造和其他行业中,连接传感器与效应器的嵌入式应用程序对于实时要求非常高。可预测的、准确的结果对于心脏起搏器、 发动机控制器,管道阀门等等都关乎生死,而不只是恼人的堆栈回溯。

虽然 James Gosling 想让 Java 去完成普遍的实时要求,但在早年间实时并不是 Java 的强项。尤其是很多 Java 运行时(Java Runtimes)声名狼藉,全因为它们并不可靠或者至少也在处理垃圾回收的时候不协调。RTSJ(Real-Time Specification for Java,即 Java 实时规范)以及相关标准用以处理这些事件的时间不确定性——定期或零星的任务调度、任务期限和 CPU 时间预算、垃圾收集线程、启用某些任务以避免垃圾收集延迟的定量供给。RTSJ 被批准于2002年,已经被许多Java虚拟机实现。

虽然RTSJ在2015年2月之前一直被Java社区进程(Java Community Process)列为搁置项目,但过去十年中专家们一直积极地对其进行改善与更新。举例而言,JamaicaVM 就是一套由 aicas GmbH 支持的RTSJ实现方案,现在免费提供给教育或其他非商业用途使用。