艾瑞
艾瑞
新闻资讯
中心动态 学习技巧
你不知道的Java过去和未来发展的6大趋势!
2019-06-10

       Java一直位居编程语言的榜上首位,最近的排行榜显示的使用率又有大幅增长。这个20多年的语言在焕发第二春。

       回首Java过去的20年,首先是经历了微机时代的兴与衰,然后进入服务器领域及智能电话领域,继而在DHS的“不安全”定义下艰难前行,最后投入Oracle怀抱。

Java的诞生

       1991年,James Gosling带领着名为“Green Team”的团队着手研发一种新的语言以及专为下一代数字设备和计算机使用的网络系统。历时4年辛勤工作后,该项目发布,取名为Java。

     Java有着类似于C的语法并有“一次编译,随处运行”的灵便性。透过虚拟机机制,可以使代码在底层平台进行运行时编译。回首Java过去的20年,首先是经历了微机时代的兴与衰,然后进入服务器领域及智能电话领域,继而在DHS(美国土安全部)的“不安全”定义下艰难前行,最后投入甲骨文(Oracle)怀抱现正蓄势迸发第二春。

       Java推出后,Sun发现市场上存在着一个问题 —— 计算机领域与非计算机领域彼此是隔断的。Sun认为这是一个机遇,如果能把两者连接起来将会带来一场计算机革命。当时的市场,两个领域的厂家各自为政,没有形成统一的网络。因此很多时候不得不重复大量的实验,问题的所在是电子消费品制造者没有考虑使用网络,例如跨平台的公共APIs或者代码复用。所有软件都只能不断地被重复创建,Java提出的模块概念将改变这一局面。

成功非坦途

       Java面世的头五年,成为当之无愧的编译器高性能代言人。而过后五年,所有人都把重心转向了企业应用。在90年代,大多数开发者都把精力投入到桌面应用的编写之上。到了2000年,Pet.com的成功吸引了大批的跟风者。业界又把焦点从桌面转移到了HTML应用。随着智能电话和平板的到来,基于触摸屏的移动应用又站在了风口。

        Java 2 Micro Edition(J2ME)在1998年引入并把Java划分了三个平台:Java 2 Standard Edition(J2SE)、J2ME以及Java 2 Enterprise Edition(J2EE)。ME的意思是小型设备和嵌入系统。ME在翻盖手机上得到推广,成为当时的标配。Gosling说,“ME已经做得足够好了,在当时是最强大的智能电话开发平台。不过现在渐渐被遗忘,因为Android太耀眼了。”作为一个独立平台,Java  ME被边缘化了。

陷入低谷

        随着Sun在最近10年的低迷,Java也不能幸免地经历着蹉跎岁月。IBM报价65亿美元,Sun没答应,74亿美元,Oracle得到了Sun。在Oracle管理下,头几年Java表现良好,以0重大失误成为安全的代名词。

        在2013年1月情况开始变坏,美国土安全部(DHS)建议人们尽量不要使用Java。作为面向企业的软件公司,打补丁修复Bug的速度是Oracle的短板,根本无法与面向大众消费者的微软或Adobe相比。别人是以小时或天来计,而Oracle是以月为基本单位。

        Purdy认为Oracle已经尽了最大的努力去修补并清楚这个短板的重要性。问题的关键是如何打造一支能独当一面的团队。他说,“我们听到了不少质疑之声,但其实我们一直都在不断加入投入的力度并努力寻求解决的方案。”

浴火重生

       DHS的公开声明不啻是压垮Java的最后一根稻草,很多人都预言Java将风光不再。然而事情慢慢得到转机,不少Java粉丝开始出来捍卫Java的名声。

       在Oracle接管Java的头五年,Oracle重新打造了一支Java开发团队。花了大量时间来审视整个过程以确定如何进行Bug修复,从输入到发布机制,回顾了大量的代码。最后列出了一个长长的错误修复表。

       安全曾让Java蒙羞,安全也让Java重获新生。在2014 Pwn20wn黑客大会上,Java成为唯一没有被攻破的平台。而在2015的会议中,Pwn20wn甚至没有把Java列在攻击名单上。

未来趋势

       Java9的发布,形成更好复用性。Java 9将是自被Oracle收购后发布的首个重大版本。Java 9的最主要目标是最大限度实现模块化以帮助人们实现积木式的应用编写。

      目的是帮助人们从JAR的束缚中解脱出来。该特性将贯穿整个Java库,并以单依赖图的方式重新整理依赖。

       Java 9会把所有三个Java开发平台统一起来,模块化特性会使得Java ME的可复用性得到增强,这将是反击Android和iOS的有力武器。

新的APIs和性能特性

1、轻量级的JSON API

2、HTTP 2Client支持HTTP 2.0和WebSockets,替代传统的HttpURLConnection

3、Process API更新提升对操作系统进程的控制和管理

此外还有一些小的特性和性能提升:

1、Improvecontended locking,提升访问对象时的线程竞争处理

2、Segmentedcode cache更好的性能、更短的扫描时间,更少的碎片

3、Smart Java compiler,或者叫sjavac,用于更大项目的构建

Java的本地接口也被重新作为Java Native Runtimeproject的一部分,将支持多GB堆和一个自调整的JVM。

模块化的源码

如果你对上述特性不感兴趣,Oracle还承诺modular source code,目的是重新组织JDK的源码,使之模块化,以及项目Jigsaw的结构化实现。

未来趋势

       Java对物联网的支持越来越好

       为了进入物联网领域,Java升级了CLDC和Netbean,直接从J2ME升级到JavaME8。而在近期更是推出了一款非常精巧且可以运行Java语言的物联网模块:Cinterion EHS5,这款模块是专门为物联网而定制,运行功耗非常低,具备了完整的通讯模块与协议,不仅有着强大的云平台支持,而且可以用Eclipse编译并下载代码。作为Java向物联网进军的重要武器,Cinterion为开发者提供了大量强大的开发软件,让开发者能够方便迅速的把自己的想法变成实际的产品,其易用性令非计算机专业人士都可以轻松上手。

       虽然现在的Java技术还不能完全满足物联网发展的需求,但是物联网为Java带来了新的希望,让已经边缘化的J2ME再次看到了曙光,作为物联网中跨平台的解决方案,J2ME拥有着得天独厚的优势。Java的跨平台兼容性、为数众多的开发者群体、活跃的技术社区和“沙箱”模型等优点,都使得它成为了物联网应用开发平台的最佳选择。

       作为用户而言,大家都希望能将物联网应用采集到的大数据集成到企业的客户端系统,让这些数据变成企业的数据资源,输出到企业的ERP、CRM等管理系统之中,对此Oracle采取了端到端的战略,即Device to Datacenter,将采集到的大数据经过网关、云端存储,进入企业的大数据中心进行商业分析,生成事件并产生信号,再返回到终端上,改变终端的控制方式。

未来趋势 

      Spring框架在大量应用中升级到Spring 4

      Spring框架最初发布于2004年,距今已经过去10多年了。在过去的10年间,Spring随着Java的变迁也得到了长足的发展,从一开始的IoC与AOP框架到现在涵盖各个业务领域、各种技术场景的一站式服务平台。目前的Spring拥有众多子项目,如Spring Batch、Spring Data、Spring Mobile、Spring Boot、Spring Security等等,基本上针对各种业务场景都提供了相应的解决方案。

       有必要将系统升级到Spring 4的五个原因:

       使用Java 8进行更快的开发,Java 8发布于2014年,它是Java自1.5以来变化最大的一次升级。毫无疑问,你应该考虑将所用的JDK升级到Java 8。

       提升生产力,Spring的每一次发布都带来了大量的改进,这些改进可以简化我们的开发工作。

       与时俱进,Spring框架能与其他很多框架和第三方库共存,并且还可以将其集成进来。当使用了Spring 4后,其相应的依赖也会一并得到更新,这样就可以使用最新的库了。

      不再有JAR地狱的烦恼,由于升级依赖版本时可能会出现一些问题,这导致一些开发者不敢轻易尝试。不过,借助于Spring IO Platform,这些担忧都将烟消云散。

       做一个开心的程序员,很多开发者都喜欢使用最新的技术。将所用的框架升级到最新版会激发他们的生产力,他们也会因此学习到新的技术并改进自己的技能。

未来趋势
Java微框架逐步流行

       随着语言的成熟,每次发布都会增加一些库。时间一久,对于大部分项目而言,包含在这些库中的许多功能都不是它们真正需要的。微框架就是要解决这个问题,其思想是:创建一个专用而又灵活的解决方案,满足生产过程的基本需求。

       三种当前较为流行的Java微框架:

       Ninja是一个用于创建Web Service和应用程序的全栈Java微框架。它综合Play和Ruby on Rails的优点,并以纯Java格式提供。作为一个综合性软件栈,Ninja提供了大量开箱即用的功能,如JSON解析、HTML渲染,使得它简单易用。在扩展性方面,Ninja采用了无状态设计,只需要增加服务器就可以实现横向扩展。不过,内置大量功能和简单易用的代价是,用户选择减少,工具本身占用空间较大。总之,Ninja重新设计了Java框架,提供了简单、可扩展、易于使用的功能。

       Spark(注意不要同Apache Spark混淆)的设计初衷是,可以简单容易地创建REST API或Web应用程序。它是一个灵活、简洁的框架,大小只有1MB。Spark允许用户自己选择设计应用程序的模板引擎以及选择最适合他们项目的库,比如,HTML解析功能就有Freemarker、Mustaches、Velocity、Jade、Handlebars、Pebble或Water等选项可供选择,而且很少需要配置或样板文件。不过,灵活简单的代价是,用户可选的功能减少。总之,Spark剔除了许多Java的臃肿之物,提供了一个最小化的、灵活的Web框架。但由于精简程度较高,它缺少了一些功能,不适合用于大型Web应用程序的开发。

       Jodd是一个Java微框架、工具和公用程序的集合。所以,它同上面两个框架可能不具有直接可比性,比如,Spark可以作为Jodd的一个组件。Jodd的目标是减少许多Java工具和框架的空间占用,提高它们的速度,提供一个超级轻量级的框架和工具精选集合。Jodd中的每个库都是单独提供的,用户可以选择使用。这样一个提供若干功能的框架集合似乎与微框架背道而驰,但实际上,Jodd大小总共不过1.5MB。总之,Jodd是一个框架和工具的集合,用户可以对它们自由组合,形成自己的解决方案。但同时,这种灵活性也增加了使用的复杂度。

未来趋势

       Java促进大数据的大发展

       没有Java,甚至不会有大数据的大发展,Hadoop本身就是用Java编写的。当你需要在运行MapReduce的服务器集群上发布新功能时,你需要进行动态的部署,而这正是Java所擅长的。

大数据领域支持Java的主流开源工具:

1. HDFS

       HDFS是Hadoop应用程序中主要的分布式储存系统, HDFS集群包含了一个NameNode(主节点),这个节点负责管理所有文件系统的元数据及存储了真实数据的DataNode(数据节点,可以有很多)。HDFS针对海量数据所设计,所以相比传统文件系统在大批量小文件上的优化,HDFS优化的则是对小批量大型文件的访问和存储。

2. MapReduce

       Hadoop MapReduce是一个软件框架,用以轻松编写处理海量(TB级)数据的并行应用程序,以可靠和容错的方式连接大型集群中上万个节点(商用硬件)。

3. HBase

       Apache HBase是Hadoop数据库,一个分布式、可扩展的大数据存储。它提供了大数据集上随机和实时的读/写访问,并针对了商用服务器集群上的大型表格做出优化——上百亿行,上千万列。其核心是Google Bigtable论文的开源实现,分布式列式存储。就像Bigtable利用GFS(Google File System)提供的分布式数据存储一样,它是Apache Hadoop在HDFS基础上提供的一个类Bigatable。

4. Cassandra

       Apache Cassandra是一个高性能、可线性扩展、高有效性数据库,可以运行在商用硬件或云基础设施上打造完美的任务关键性数据平台。在横跨数据中心的复制中,Cassandra同类最佳,为用户提供更低的延时以及更可靠的灾难备份。通过log-structured update、反规范化和物化视图的强支持以及强大的内置缓存,Cassandra的数据模型提供了方便的二级索引(column indexe)。

5. Hive

       Apache Hive是Hadoop的一个数据仓库系统,促进了数据的综述(将结构化的数据文件映射为一张数据库表)、即席查询以及存储在Hadoop兼容系统中的大型数据集分析。Hive提供完整的SQL查询功能——HiveQL语言,同时当使用这个语言表达一个逻辑变得低效和繁琐时,HiveQL还允许传统的Map/Reduce程序员使用自己定制的Mapper和Reducer。

6. Pig

       Apache Pig是一个用于大型数据集分析的平台,它包含了一个用于数据分析应用的高级语言以及评估这些应用的基础设施。Pig应用的闪光特性在于它们的结构经得起大量的并行,也就是说让它们支撑起非常大的数据集。Pig的基础设施层包含了产生Map-Reduce任务的编译器。Pig的语言层当前包含了一个原生语言——Pig Latin,开发的初衷是易于编程和保证可扩展性。

7. Chukwa

       Apache Chukwa是个开源的数据收集系统,用以监视大型分布系统。建立于HDFS和Map/Reduce框架之上,继承了Hadoop的可扩展性和稳定性。Chukwa同样包含了一个灵活和强大的工具包,用以显示、监视和分析结果,以保证数据的使用达到最佳效果。

8. Ambari

         Apache Ambari是一个基于web的工具,用于配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。

9. ZooKeeper

       Apache ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、命名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

10. Sqoop

       Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中数据导入Hadoop的HDFS中,也可以将HDFS中数据导入关系型数据库中。

11. Oozie

        Apache Oozie是一个可扩展、可靠及可扩充的工作流调度系统,用以管理Hadoop作业。Oozie Workflow作业是活动的Directed Acyclical Graphs(DAGs)。Oozie Coordinator作业是由周期性的Oozie Workflow作业触发,周期一般决定于时间(频率)和数据可用性。Oozie与余下的Hadoop堆栈结合使用,开箱即用的支持多种类型Hadoop作业(比如:Java map-reduce、Streaming map-reduce、Pig、 Hive、Sqoop和Distcp)以及其它系统作业(比如Java程序和Shell脚本)。

12. Mahout

       Apache Mahout是个可扩展的机器学习和数据挖掘库,当前Mahout支持主要的4个用例:

推荐挖掘:搜集用户动作并以此给用户推荐可能喜欢的事物。

聚集:收集文件并进行相关文件分组。

分类:从现有的分类文档中学习,寻找文档中的相似特征,并为无标签的文档进行正确的归类。

频繁项集挖掘:将一组项分组,并识别哪些个别项会经常一起出现。

13. HCatalog

      Apache HCatalog是Hadoop建立数据的映射表和存储管理服务,它包括:

提供一个共享模式和数据类型机制。

提供一个抽象表,这样用户就不需要关注数据存储的方式和地址。

为类似Pig、MapReduce及Hive这些数据处理工具提供互操作性。

未来趋势
Java嵌入式系统将进入黄金时代

      在1998或1999年的嵌入式系统研讨会上,由太阳微系统公司发布的轰轰烈烈的媒体活动。Java当时成为了研讨会的热门话题,巨幅Java标语飞扬在活动的现场。然而,随着2006年的结束,C/C++依然是硬件实时系统设计所采用的主要语言。最近的调查显示,人们仍然认为Java太大、太慢,不能满足各种实时约束的要求,不能执行低层次的操作,并且启动时间太长。

       为了矫正早期人们对Java形成的种种负面印象,现在是重新审视最新Java发展趋势的时候了。

最近,洛克希德马丁公司已经采用Java来处理Aegis武器系统方面的可预测的性能,美国国家油井Varco正采用Java来管理机器人自动钻井,L-3 Communication公司的Telemetry-West部门选择Java来实现他们的实时数据采集系统,美国波音公司正利用Java来开发联合无人作战空中系统(J-UCAS)的X”45C计划。

       目前,以不同实现方案提出的各种标准已经准备就绪。Java硬实时(JSR-000001:Java实时规范)和安全紧要的(JSR 302:安全紧要的Java技术)标准目前正在发挥作用,并且各种产品几乎准备就绪推向市场,从而为这些新兴的标准带来生命力。

       这些产品当中,有些产品的性能可与C/C++媲美,具有低级器件访问和小的占位空间。此外,另外一些产品把大量Java标准版库的高生产率引入到嵌入式开发领域。所有这些产品都避免了C/C++编程所存在的错误高发的情况。

       而市场研究则显示,全球已经交付使用的嵌入式虚拟机的数量超过了1百万,并正以24.5%的复合年增长率发展。

       最终来看,从Java切入嵌入式系统的领地算起的大约5~7年之后,针对硬实时和深度嵌入式系统的Java产品已经呈现一片生机盎然的景象。针对嵌入式系统的Java有可能迎来它的黄金时代。 

                                                                                                                                                转载:本文由中国Java开发者大会特约编撰