Java:过去、未来的互联网编程之王

澳门新浦京娱乐游戏 2

Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java
一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍为什么
Java 是IoT(物联网)开发的最佳语言。

澳门新浦京娱乐游戏 1

作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,Java将成为物联网时代下的最佳开发选项。

为嵌入式计算增强、为实时系统精简——为什么 Java 是最适合 IoT 的语言

自1969年至今,我们可以看到网络设备爆炸式的增长:从最初四个大学的计算机群构建成的ARPANET,直到现今互联网上有两亿活跃用户。而不久之后的将来这一数字将会呈指数级的增长,从几亿台设备到数十亿嵌入式处理设备。我们生活的方方面面都将通过网络设备接入互联网:家庭、工作场所、汽车、家电、工具、玩具——一切由你说了算。

(译者注:美国高等研究计划署网络 Advanced Research Projects Agency
Network,美国国防高等研究计划署澳门新浦京娱乐游戏,开发的世界上第一个运营的封包交换网络,它是全球互联网的始祖。最初由西海岸的四个节点, 加州大学洛杉矶分校(UCLA)、斯坦福研究院(SRI),加州大学圣巴巴拉分校(UCSB)和犹他大学(UTAH)构成)

澳门新浦京娱乐游戏 2

为嵌入式系统打造的Java

十九年前,David L. Ripps 为
JavaWorld写了一篇介绍Java和嵌入式系统相关的文章。如果你想要明白嵌入式系统编程、移动互联设备、物联网三者之间的相互协作,Ripps
的文章依然是非常受用的。

虽然时下关于物联网(Internet of
Things)的闲谈有部分炒作之嫌,但本质上来说,下一刻在互联网中将要发生的改变,会使前几代信息处理技术黯然失色。物联网不只是流口常谈之物,而是改变世界的新技术。参考下面的时间线,这展示了如我们所知的那些互联网中的引爆点:

  • 1982年到1989年:TCP/IP网络诞生。
  • 1985年到1989年:互联网商业化开始出现。
  • 1990年到1991年:万维网正式建立。
  • 1990年到1998年:传统计算机真正意义上被重新设计为互联网设备。
  • 1996年至今:虽然缓慢但确信的是,我们步入了由移动互联网络设备(即物联网)“统治”的时代。

物联网的补充技术正在陆续上线。HTTP/2作为新版的关键网络协议,在一定程度上将适应机器到机器的通讯。Thingsee 则是物联网开发套件的先驱,它提供了物联网开发所需的硬件。

硅谷智者 Tim O’Reilly
作出强调说,物联网的成果远不只是将咖啡机、电冰箱这种无关紧要的设备接入网络。在充足的传感器和自动化设备的支撑下,物联网无疑将会是人类的巨大进步。Java
在即将到来的变革中将承担主力军的角色。

对于大家来说,Java到底意味着什么?在校园里头学习过的一款编程语言?企业IT领域的求职神油?抑或是将Java视为主宰互联网后爆发时代的统治性语言?作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,我们将在本文中论证Java在物联网时代下成为最佳开发选项的几大理由。

物联网是怎么工作的

2014年9月,Andrew C.
Oliver撰写了这样一篇文掌,在实现层面讨论了网联网在团队协作中的重要性。在这种情况下,团队协作将同时凝结人类与计算机。

由于设备不只是和人类用户沟通,也需要和其他设备沟通,从根本上新的功能出现了——冰箱不仅能够知道你的番茄用完了,它还可以以你的名义订购更多。普适计算的成功之处在于,计算机将退居“幕后”,与其他连接的设备一起运算出实事与事件及解决方案。只有可执行级别的结果将会被提交给用户。互联网的成就将使我们不再考虑过多,因为物联网无缝地为我们解决了一切。

最平凡的例子往往是最有说服力。在最近的新闻当中,我们亲眼见证了一系列令人印象深刻的物联网应用方式,包括农业害虫处理、小型炸弹嗅探器以及医疗诊断技术的进步等。想想卑微的自动贩卖机的代替品——它适量地存储、被妥善地维护,永远默默地等待着你的命令。

当你将你的账单放进一台自动贩卖机并按下按钮执行你的购买时,会有几种交互机制以确认能满足你的饥饿。你不需要理解或是认同整个实现过程,你的胃会对结果非常满意。现在,我们有了具备物联网功能的自动贩卖机了。当你在启用物联网的自动贩卖上购买时,你的购买将会触发遍布全球的操作以保持库存的均衡、部件的妥善维护,这种新模式较前物联网模式降低了30%的总成本。

从1969年至今的这段漫长时光当中,网络设备已经完成了完整的爆发式增长流程。从当初通过ARPANET实现对接的四台高校计算机,如今世界上已经有二十亿人频繁访问互联网内容。在不久的将来,联网设备数字还将迅速翻番甚至再次翻番,即由目前的数十亿台增长至嵌入式处理时代的成百上千亿台。我们生活中的方方面面都将与联网设备相结合:家庭环境、办公环境、车载环境、设备、工具以及玩具等等——大家完全可以根据实际经历进一步完善这份清单。

Java的嵌入式计算之旅

现在只有少数人意识到 Java
是为嵌入式计算打造的语言。它的早期版本用意明确地剑指诸如电视机顶盒接口一类的家用电器。James
Gosling (Java
之父)关于最初的设想是以设备间通信为核心的,他设想 Java
不仅仅被用于设备到用户的通信,同时也被用于设备到设备的通信。二十年之后,这些初始设计优势已经准备好来支持物联网了。

Java 的普适性也使之非常好地适应物联网。来自世界各地的大量的资源倾注于将
Java 传输给新一代程序员,并确保它已经被维护——以支持所有依赖于之的产品系统。数以十万计的成功的应用程序和系统已经证明了
Java 的才能。

对于探索嵌入式编程的开发人员来讲区分Java平台的部分是很重要的。没必要为嵌入式开发做出编写或阅读程序的改变:好的
Java
程序员可以很容易地阅读嵌入式系统的源代码,像他们阅读典型的桌面企业应用一样。不过库和开发环境(特别是开发和测试的环境)是为嵌入式
Java 编程所定制的。确保你有正确的嵌入式开发环境。

Java,面向嵌入式系统

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

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

十九年前,David L.
Ripps曾为JavaWorld编写了一份概述性资料,介绍了Java在嵌入式系统中的作用。Ripps的文章从今天的角度来看同样极具可读性,特别是对于那些希望了解嵌入式系统编程接口如何与联网移动设备及物联网机制协作的朋友而言。

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实现方案,现在免费提供给教育或其他非商业用途使用。

· 1982年到1989年: TCP/IP网络诞生。

实时系统的时间线

嵌入式尤其是实时标准发展的时间线普遍较典型消费软件长的多。一个成功的移动
App
可能在六个月间达到峰值并消失出视线,而在医疗设备,汽车和工厂的嵌入式软件往往需要几十年的可靠运行。而影响这些应用程序的已发布标准相应地需要更长时间来起草。

最近 Oracle 推出了Java SE
实时系统,暗示着Java
SE
已经被充分增强以满足“软”实时要求。“软”在这里至少有两个截然不同的含义。一是要求有软件有平均水平的性能表现,例如,一次普通的银行交易在
300 毫秒内被发送就足够好了。
“硬”实时要求是完全不同的,例如某个机动电磁阀,在应用程序接收警报的四分之一秒内关闭都是最坏情况。“硬”实时的最关键要求在这种意义上来讲,即是最坏情况能被预测。

对很多嵌入物联网的应用来讲,“软”实时是完全合格的。对于需要硬实时支持的应用程序,Java
开发人员很大程度上转向 JSR-302:安全关键型的 Java
技术。这个规范是 Java
实时规范的一个子集,它部分依赖于 CLDC。除了其他特性之外,安全关键型的
Java 定义了自己的并发模型和实时线程。The Open
Group 最初在 2003 年开始致力于安全关键型
Java 的工作。今春在被问及该规范的状况时,JSR 302 规范的主管 Doug
Locke估计在长期的酝酿后,在 2015 年 5
月初将会有一个规范被认证,其中包含一套实现方式的参考。

· 1985年到1989年: 互联网技术的商业化趋势开始出现。

嵌入式 Java 的未来前景

Java
在嵌入式编程中有诸多期许,而为使之能够满足即将到来的物联网大爆炸中的需求与契机,还有长远的路要走。未来几年中,数百亿美元的
Java
驱动的设备将作为物联网的一部分被投入使用。我下一篇相关话题的文章会分别以爱好者和商业环境为例,列举
Java 嵌入式编程的具体实例,并更加深入地解释为何 RTSJ
2.0 对 Java
实时编程的影响会远远超越传统领域。

· 1990年到1991年: 万维网正式建立。

· 1990年到1998年: 传统台式计算机被重新设计为实质层面上的联网设备。

·
1996年至今:虽然进展缓慢但却可以肯定的是,我们正逐步进入到移动联网设备(即物联网)主导一切的新时代当中。

目前作为物联网前提性条件各类补充性技术正在陆续上线。HTTP/2是一套关键性网络协议,它的出现在一定程度上实现了机器到机器之间的通信需求。Thingsee则是开发者工具领域的典型代表,也标志着物联网发展所需要的硬件基础正逐渐成型。

硅谷智囊Tim
O’Reilly已经作出强调,表示物联网的成果将不仅仅是将咖啡机或者电冰箱等无关紧要的设备接入网络那么单纯。在理想的传感器与自动化机制支撑之下,物联网将真正将人类文明提升到新高度。而Java将在将在这场颠覆性变革中扮演主力角色。

物联网的工作机制

2014年9月,Andrew C.
Oliver撰写了一篇关于物联网实现水平与团队协作间关系的文章。在这种情况下,团队协作体系将由人与计算机共同构成。

由于设备的通信对象不再局限于人、同时需要面对其它设备,因此将从根本层面带来一系列新功能。具体而言,我们的电冰箱不仅能够感知到用户的西红柿储量即将告罄,同时也能根据个人饮食习惯发出食品订单。普适计算的成功也恰恰体现在这里,其融入背景当中,并与其它设备共同完成任务、事件以及对接。只有执行级别的结果才会被交付至使用者面前。物联网的崛起将带来大量我们前所未见、甚至难以想象的创新型成果,并以无缝化方式将其奉至我们手中。

很多常见的实用性案例都极具说服力。在最近的新闻当中,我们亲眼见证了一系列令人印象深刻的应用方式,包括农业病虫害处理、小型炸弹探测器以及提高医疗诊断水平的方案等等。物联网不再是那种低调但完备的售货机——它需要进行过量储备并带来繁杂的日常维护任务,且一直默默等待着用户的召唤。

当我们把自己的账单放进这台售货机并按下按钮时,它会显示可供选择的购买项目,并通过简单的交互机制确保大家得到令自己满意的食品。我们用不着了解或者认同整个实现过程的全部细节;
我们的胃就是检验真理的最佳标准。现在,我们有了有了物联网式自动售货机。当我们从支持物联网功能的售货机处购买商品时,购买行为会融入到全球范围内的完整体系当中,保证供应商维持库存平衡并充分维护零件工作状态,这种新模式能够将整体成本较前物联网时代降低30%。

Java的嵌入式计算之旅

时至今日,大多数人都没有意识到,Java在诞生早期正是针对嵌入式计算而打造。其早期版本专门针对各类家用电器,如电视机顶盒接口。James
Goslin在打造Java初始版本时正是将设备间通信作为其关注重点,而他当时就想到其作用不仅要实现设备与人之间的通信、更要承担起设备与设备间的通信任务。二十年之后,这些初始设计优势终于迎来了自己的黄金时代,物联网的光辉岁月即将拉开序幕。

出色的普及水平也使其适合物联网时代的实际需求。全球范围内投入到Java领域的海量资源使这款编程语言成为新生代程序员们的最爱,同时也确保了其能够在全部以其为基础的生产系统中得到良好的维护与支持。数十万款成功的应用程序及系统方案已经充分证明了Java的强大实力。

对于希望在嵌入式编程领域一展身手的开发人员而言,最重要的是对Java平台中的不同组成部分加以区分。在嵌入式编程工作中,我们无需对自己的编码或者阅读方式做出任何变更:出色的Java程序员能够像查看典型桌面企业应用程序那样轻松阅读嵌入式源代码内容。不过库,特别是在开发(及测试)环境中,将专门面向嵌入式Java编程。请确保大家拥有适用于目标嵌入式环境的正确工作链。

Java对于嵌入式系统而言是否太过臃肿?

Java并不总是嵌入式系统领域的首选可行性编程语言,这主要是因为嵌入式设备通常在计算资源方面显得捉襟见肘。汇编、C甚至是Python都能在有限的内存、CPU性能以及其它硬件制约条件下提供更出色的表现。不过这种状况在过去几年当中已经得到了显著改善,这是因为嵌入式系统的资源规模已经得到长足提升。此外,面向嵌入式环境的新型Java编译技术方案也进一步降低了相关代码对于系统资源的需求。

2015年Java嵌入式编程趋势展望

早在1996年,Java就做好了实现嵌入式编程的全部准备,但当时缺乏一股足以推动业界在这方面作出探索的驱动力量。时至今日,这种势头开始迅速聚集,而面向嵌入式编程的Java标准及工具生态系统也准备好充分发挥这一技术潜能。

在2000年到2010年之间,基于Java的嵌入式或者“微”计算机制主要集中在J2ME(即Java
2平台Micro版本)身上。如今,Java平台Micro版本,或者称之为Java
ME,已经成为嵌入式应用程序中的标准运行时环境。尽管Java
ME及其概念——特别是配置文件与配置(即profile与configuration)——仍然非常关键,但移动Java开发人员更倾向于利用Android及HTML
5实现用户界面。目前移动手机设备是嵌入式计算领域中最突出的组成部分,而且目前所售出的移动设备中有五分之四采用Android系统。(虽然Android支持Java
ME,但二者在产品生命周期上存在显著差异,而且目前还不清楚由哪一方来决定特定嵌入式设备之上将采用哪一种下一代应用程序环境。)

配置文件与配置是嵌入式编程工作中的关键性概念。像MIDP这样的嵌入式配置文件是一套API集合,用于在设备之上获得支持。而配置则是一套框架规范。不过我们还找不到严格的理论依据来证明配置文件应当归属于配置范畴,其中包括CLDC与联网受限设备配置在内。(感兴趣的朋友也可以点击此处查看Jim
Connors的博客以了解更多配置文件与配置在物联网下应用的细节信息。)

除了Java
ME的配置文件与配置之外,另有一系列企业级Java技术具备在嵌入式领域大显身手的可观潜力。Java管理扩展(即Java
Management
Extensions,简称JMX)用于分布式资源管理与监控,并终将有一天能够作为嵌入式定义的有效补充。实时Java(即Real-time
Java)也在物联网嵌入式开发领域占据着重要地位。

Java的实时模型与工具

在医疗、交通、制造以及其它各行业领域,与传感器及效应器相对接的嵌入式应用程序往往需要满足多项实时性要求。可以预见,心脏起搏器、发动机控制器以及管道阀门等设备必须能够提供正确的实时结果,这甚至关乎到使用者的生命财产安全——而不仅仅是恼人的堆栈回溯问题。

尽管James
Gosling预计到了Java需要满足各类常见的实时性要求,但Java在早期发展阶段仍然不具备理想的实时计算能力。值得强调的是,大部分Java运行时环境都存在着可靠性低下、或者至少在处理垃圾回收时导致内容一致性冲突的问题。Java实时规范(即Real-Time
Specification for
Java,简称RTSJ)及其它相关标准支持定期与不定期任务调度、任务期限规划、CPU时间预算、垃圾收集线程等功能,并能够确保特定任务不会受到垃圾收集所导致之延后影响,这一切都显著解决了时态不确定性难题。RTSJ于2002年正式得到认证,并已经开始在一部分Java虚拟机上发挥作用。

虽然RTSJ在2015年2月之前一直被列入到Java社区进程的搁置项目清单当中,但专家们在过去十年当中一直积极工作对其进行改善与更新。举例而言,JamaicaVM就是一套由aicas
GmbH支持的RTSJ实现方案,且目前以免费方式供用户以教育及其它非商业性方式使用。

实时时间表

嵌入式特别是实时标准在漫长的时间周期内已经得到了长足发展,其改进速度远超过一般性消费级软件。尽管一款成功的移动应用唷
可能在六个月之内彻底淡出用户视野,但嵌入式医疗设备、汽车制造以及工业类软件往往需要以可靠方式运行数十年时间。而影响到这些应用程序的公开标准往往需要相对较长的起草及制订周期。

最近,甲骨文公司已经针对实时系统对Java SE进行了改进,并表示Java
SE较过去已经能够带来更理想软实时要求支持效果。这里所说的“软”,至少具备两种不同的相关意义。其一,这部分要求必须以较为平均的方式实现,例如良好的银行交易事务必须要在300毫秒之内完成。这里的软是相对于硬实时性要求而言,例如某台机车需要在1.25秒之内接收到应用程序发来的特殊警报,提醒其电磁阀已经关闭。在这一意义上,硬实时系统需要满足的首要要求就是必须以可预见的方式应对最糟糕的情况。

软实时对于大多数嵌入式及物联网应用程序而言已经完全足够。对于那些要求硬实时支持的应用程序,建议Java开发人员点击此处阅读JSR-302:Java关键性安全技术。这套规范属于Java实时规范中的一套子集,而且其中一部分依赖于CLDC。除了其它功能,安全关键性Java定义自己的并发模型及实时线程。Open
Group工业团队最初于2003年开始推进Java关键性安全技术。说到该规范的当前状态,JSR-302规范负责人Doug
Locke预计这套经过长期酝酿的项目将于今年春季得到认证,并可能在2015年5月提供参考实现方案。

Java在嵌入式领域的未来前景

Java对于嵌入式编程作出了多项承诺,而且其在满足即将全面爆发之物联网的需求及可能性方面还有很长的发展道路要走。数百亿由Java驱动的设备将在未来几年内成为物联网网络体系中的组成部分。我将在下一篇文章中就这一议题进行讨论,探索在爱好者与社区背景下嵌入式Java环境中的各类具体实例,同时更深入地解读RTSJ
2.0为何会在传统之外的实时编程领域中给Java带来显著影响。

原文标题:Java: The once and future king of Internet programming

【编辑推荐】

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图