Java:过去、未来的互联网编程之王
Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java 一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍为什么 Java 是IoT(物联网)开发的最佳语言。
为嵌入式计算增强、为实时系统精简——为什么 Java 是最适合 IoT 的语言
自1969年至今,我们可以看到网络设备爆炸式的增长:从最初四个大学的计算机群构建成的ARPANET,直到现今互联网上有两亿活跃用户。而不久之后的将来这一数字将会呈指数级的增长,从几亿台设备到数十亿嵌入式处理设备。我们生活的方方面面都将通过网络设备接入互联网:家庭、工作场所、汽车、家电、工具、玩具——一切由你说了算。
(译者注:美国高等研究计划署网络 Advanced Research Projects Agency Network,美国国防高等研究计划署开发的世界上第一个运营的封包交换网络,它是全球互联网的始祖。最初由西海岸的四个节点, 加州大学洛杉矶分校(UCLA)、斯坦福研究院(SRI),加州大学圣巴巴拉分校(UCSB)和犹他大学(UTAH)构成)
为嵌入式系统打造的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 在即将到来的变革中将承担主力军的角色。
物联网是怎么工作的
2014年9月,Andrew C. Oliver撰写了这样一篇文掌,在实现层面讨论了网联网在团队协作中的重要性。在这种情况下,团队协作将同时凝结人类与计算机。
由于设备不只是和人类用户沟通,也需要和其他设备沟通,从根本上新的功能出现了——冰箱不仅能够知道你的番茄用完了,它还可以以你的名义订购更多。普适计算的成功之处在于,计算机将退居“幕后”,与其他连接的设备一起运算出实事与事件及解决方案。只有可执行级别的结果将会被提交给用户。互联网的成就将使我们不再考虑过多,因为物联网无缝地为我们解决了一切。
最平凡的例子往往是最有说服力。在最近的新闻当中,我们亲眼见证了一系列令人印象深刻的物联网应用方式,包括农业害虫处理、小型炸弹嗅探器以及医疗诊断技术的进步等。想想卑微的自动贩卖机的代替品——它适量地存储、被妥善地维护,永远默默地等待着你的命令。
当你将你的账单放进一台自动贩卖机并按下按钮执行你的购买时,会有几种交互机制以确认能满足你的饥饿。你不需要理解或是认同整个实现过程,你的胃会对结果非常满意。现在,我们有了具备物联网功能的自动贩卖机了。当你在启用物联网的自动贩卖上购买时,你的购买将会触发遍布全球的操作以保持库存的均衡、部件的妥善维护,这种新模式较前物联网模式降低了30%的总成本。
Java的嵌入式计算之旅
现在只有少数人意识到 Java 是为嵌入式计算打造的语言。它的早期版本用意明确地剑指诸如电视机顶盒接口一类的家用电器。James Gosling (Java 之父)关于最初的设想是以设备间通信为核心的,他设想 Java 不仅仅被用于设备到用户的通信,同时也被用于设备到设备的通信。二十年之后,这些初始设计优势已经准备好来支持物联网了。
Java 的普适性也使之非常好地适应物联网。来自世界各地的大量的资源倾注于将 Java 传输给新一代程序员,并确保它已经被维护——以支持所有依赖于之的产品系统。数以十万计的成功的应用程序和系统已经证明了 Java 的才能。
对于探索嵌入式编程的开发人员来讲区分Java平台的部分是很重要的。没必要为嵌入式开发做出编写或阅读程序的改变:好的 Java 程序员可以很容易地阅读嵌入式系统的源代码,像他们阅读典型的桌面企业应用一样。不过库和开发环境(特别是开发和测试的环境)是为嵌入式 Java 编程所定制的。确保你有正确的嵌入式开发环境。
Java 对嵌入式系统来说是否过于庞大?
因为嵌入式设备对于计算性能总是捉襟见肘,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实现方案,现在免费提供给教育或其他非商业用途使用。
实时系统的时间线
嵌入式尤其是实时标准发展的时间线普遍较典型消费软件长的多。一个成功的移动 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 月初将会有一个规范被认证,其中包含一套实现方式的参考。
嵌入式 Java 的未来前景
Java 在嵌入式编程中有诸多期许,而为使之能够满足即将到来的物联网大爆炸中的需求与契机,还有长远的路要走。未来几年中,数百亿美元的 Java 驱动的设备将作为物联网的一部分被投入使用。我下一篇相关话题的文章会分别以爱好者和商业环境为例,列举 Java 嵌入式编程的具体实例,并更加深入地解释为何 RTSJ 2.0 对 Java 实时编程的影响会远远超越传统领域。
转自:码农网
Java:过去、未来的互联网编程之王的更多相关文章
- Python/MOOC /翻Wall和互联网编程的那些事
Python MOOC 翻Wall和互联网编程的那些事 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系 ...
- 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)
url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ...
- Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径
Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径 (2015/07/08更新) JDK下载地址(JDK官网下载地址) 下载地址为:http://www.oracle.co ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Java中的图形界面编程
前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...
- 关于Java、Python、Go编程思想的不同
Go学习笔记 - 关于Java.Python.Go编程思想的不同 看了两周七牛团队翻译的<Go语言程序设计>,基本上领略到了Go语言的魅力.学习一个语言,语法什么的任何人都是很容易学会,难 ...
- 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ...
- 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...
随机推荐
- 谷歌大牛Jeff Dean是如何成为互联网战神的
“光在真空中的速度曾经是大约每小时35英里,然后Jeff Dean花了一个周末优化了基础物理学.”——出自“关于Jeff Dean的事实” 其实,“关于Jeff Dean的事实”这个G+帖中描述的并非 ...
- QQ登入(3)QQ空间分享-无需登入
public void myclick2(View v){ //QZone分享, SHARE_TO_QQ_TYPE_DEFAULT 图文,SHARE_TO_QQ_TYPE_IMAGE 纯图 ,SHAR ...
- 关于$.ajax中data字段的整理--包括json转换和spring注解
1.前端$.ajax 的data为json提交的时候,后台方法中必须使用@RequestBody 注解 @RequestMapping(value = "getCpuData/{int ...
- 最大化 AIX 上的 Java 性能,第 4 部分: 监视流量
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf4.html 最大化 AIX 上的 Java 性能,第 ...
- Spring3.1新属性管理API:PropertySource、Environment、Profile
Spring3.1提供了新的属性管理API,而且功能非常强大且很完善,对于一些属性配置信息都应该使用新的API来管理.虽然现在Spring已经到4版本了,这篇文章来的晚点. 新的属性管理API Pro ...
- HTML相对路径 当前目录、上级目录、根目录、下级目录表示法
文件引用时经常需要用到相对目录.如(js,css,图片等) "./" --------- 源代码所在的当前目录(可省略) "../" ----- ...
- AngularJS 的安全Apply
$scope.safeApply = function(fn) { var phase = this.$root.$$phase; if (phase == ‘$apply‘ || p ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列。开源啦!!!
自此系列博客开写以来,好多同学关心开源问题,之前由于网络问题,发布到Github上老是失败,今天终于在精简了好多无用的文件之后发布上去了. 注意:layim源代码并不开源,由于版权问题,请大家去官网了 ...
- 你了解System.out.println()的真正含义吗?
在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 其实System是jav ...
- Hibernate入门学习(二)
本文主要讲如何搭建Hibernate开发环境和简单实例. 一.搭建开发测试环境 1.1 下载Hibernate 从Hibernate官方网站上下载最新的Hibernate ORM,从Hibernate ...