2006年我已经写过一篇讨论Java未来的文章,在那篇文章中我讨论了开源、Java在消费电子设备中的运用,如今在一切类型的移动设备上Java的应用正在逐渐上升。对Sun被收买一事,以及Java与Oracle产品集成我没什么好预测的,也没什么好的建议,我只担心Java的未来会走向何方?在这篇文章中我重新审视了Oracle收买Sun后Java的未来之路。
Java是什么?
如果要向一无所知的人解释Java是什么还是比较有难度的,是的,它是一门编程言语,但开展到明天,Java一词近程超出了言语的定义,具体来说,Java是一个包括虚拟机环境,与C言语相似,包括库和支持软件,允许它运转在各种操作系统、计算机、设备和域中的平台,包括以下技术:
用于桌面的Java SE
用于服务器和企业处理方案的Java EE
用于嵌入式和移动设备的Java ME
用于应用顺序暂时需要的实时Java(Real-Time Java)
用于构建RIA应用顺序的JavaFX,用于PC、移动设备和电视(机顶盒、蓝光播放机等)上的媒体应用
因此,如果有人说"我是一名Java开发人员",他们需要廓清终究是Java的哪一个范畴。我这里从平台的角度讨论Java的未来,包括Java SE,Java EE,Java ME,JavaFX,工具和言语。
Java的市场有多大?
依照Oracle的说法,Java是时下最流行的,无处不在的技术,2010年1月的统计数字如下:
9百万Java开发人员
8.4亿桌面安装了Java
100多种不同硬件平台支持上亿的Java桌面安装
a)每天2百万的下载量
财富100强公司全部运用了Java
55亿Java卡片
26亿拥有Java功能的手机
b)250家手机运营商合作同伴
c)10多万Java ME应用顺序
4千万电视和蓝光播放机
Java仍是目前最普遍运用的编程言语,比一切脚本言语加起来的总数还多,由于Java平台支持由不同脚本言语编写的应用顺序运转,这些数字会是堆叠的。例如,Java虚拟机(JVM)可以执行用Java、Rexx、Ruby、JavaScript、Python、PHP、Groovy、Clojure和Scala.编写的顺序。在许多情况下,Sun的HotSpot JVM将会更好地运转这些应用顺序,由于JIT(实时)编译器会重新优化编译过的代码。
Java依然是大多数企业和Web应用顺序开发首选的言语/平台,并继续保持增长,Java是收费提供应开发者运用的,许多大学的计算机系也选择Java作为编程言语课程,虽有这些光环笼罩,但这并不意味着我们不应该重新审视Java的未来开展方向,特别是Sun被收买后的这段工夫。
Java SE
Oracle已经发布了Java的未来战略,目的是加强和继续扩大Java在新范畴的应用,简化,优化,并将Java平台归入新的部署架构,加大对Java社区的投资,允许社区更多地参与。
Oracle产品开发执行副总裁Thomas Kurian表示,Oracle将推动Java成为运用最多,最具效率和世界上最流行的编程平台,也将推动Java在更多的嵌入式设备中运用。Kurian表示会保留Java社区进程(Java Community Process,JCP)推动Java的开展,但我疑心Oracle将会改造JCP过程,由于最近几年已经暴露出不少成绩,不合作的参与者能够会拖延Java规范央求(Java Specification Requests,JSR)。
Kurian也证明,Oracle将继续为一切主流操作系统提供支持,以及流行的Java业务支持方案,它将为以后和过期的JVM版本提供长期的支持,关于要在旧版本Java上维护传统Java顺序的企业而言,取得平安补丁和其它支持是至关重要的。
最有趣的是,Kurian的发言几乎总是围绕最近发布的Java SE 7,Oracle的JRockit虚拟机和Sun的HotSpot合并展开的,Oracle在Java SE 7中方案包括以下新特性:
模块化的VM:我们的目的是将VM拆分成小块由应用顺序运用,并按需推向Internet,这样的后果是Java应用顺序的启动工夫更短了,当VM不在目的机器上时,下载的工夫也更短了。
额外的言语支持:Java平台支持用不同言语编写的应用顺序,如今将会添加更多的言语支持,当然也包括对静态言语的支持,这就是所谓的达芬奇机或多言语虚拟机,请参考JSR-292。
要特别指出的是,JVM添加了静态言语的支持,因此要想添加更多言语的支持就不费心了,在此之前,受Java言语静态要求的影响,Java编译器需要额外的编码才干完成对静态言语的支持,这样会致使JIT编译工夫添加,并且比正常的内存耗费大得多,因此也添加了渣滓回收的次数。
在Java SE 7中有了这个增强后,可以在运转时修改现有的类字节码,因此耗费的耐久化空间更少了,渣滓回收的次数也减少了,让JIT可以优化更多的编译后代码。
增强的多核支持:需要借助工具、库和内置设施协助新的和现有的Java应用顺序更有效天时用多核硬件的优势,Java的线程模型可以轻松地创立并行执行义务的线程,但你如何将一个单一的义务拆分成多片进行并行执行呢?
有第三方的软件包可以协助我们,如Pervasive的DataRush产品,例如,Doug Lea修改了Java Fork/Join Framework,为Java添加了这一功能,直接将框架添加到java.util.concurrent包,它就会递归地将义务分解成子义务进行并行执行,框架处理线程和协调义务,当一切子义务结束时组成后果。
其它改良包括持续的功能改良,以及许多言语方面的增强,包括添加的闭包,在switch语句中对Strings的支持,以及多块异常捕捉,闭包是一个有争议的功能,它是经过运用匿名的Java内部类完成的。
Sun HotSpot和Oracle JRockit合并
在我看来,到目前为止,最令人吃惊的音讯是HotSpot和JRockit的合并。多年来,前BEA JVM和Sun的JVM一直被困扰在功能和管理功能上,但如今王者终于再次回归,在功能基准测试、总体延迟和渣滓回收技术中到达了最好的成绩。
虽然很多人认为Sun的HotSpot JIT编译器技术是最好的,但JRockit凭借其优秀的渣滓回收技术和其它目的功能增强使它成为某些应用顺序的首选,如金融范畴运用得就颇多。理想上,JRockit实时功能比Sun的Java RTS产品更具优势,由于RTS经常要求修改应用顺序的代码。但Sun的HotSpot被认为是最牢靠的JVM,牢靠比速度应该更重要,同时,HotSpot支持更多操作系统和硬件平台组合。
鉴于这两个JVM都有各自的优势,结合两者的优点将会带来更好的成绩,到目前为止,Oracle表示JVM的整合目的如下:
增强管理和监控:HotSpot带来了它的VisualVM和VisualGC工具,允许你可视化配置,反省和剖析运转中的Java应用顺序,包括它们的内存运用情况和功能。Oracle提供了JRockit义务控制工具集,完成应用顺序执行,GC活动和由线程同步导致的延迟,IO或内存相关成绩的可视化报告。此外,JRockit的义务控制功能提供了不真实的监控和报告。
在hypervisor上本地执行:直接在硬件上运转Java虚拟机,超出了传统操作系统的限制,这也是Oracle收买BEA和Sun之前这两家公司的共同目的。这种设计能够消除了Java应用顺序和硬件本身之间的少量软件层。理想上,Azul公司在很多年以前就开始了这种尝试,构建专门的硬件和Java虚拟机协同任务,从而消除传统的操作系统。经过添加一个hypervisor,Oracle消除了公用硬件的限制,让JVM可以运转在数据中心已经部署的一切硬件平台上,如英特尔,AMD和基于Sparc的系统。
先进的渣滓回收:结合了Oracle/BEA和Sun在渣滓回收方面的技术沉淀,如今再怎么说也应该有一个质的飞跃了,Sun对实时行为和吞吐量(Java SE 6并行搜集器)还独自完成了一个GC(Java RTS的实时渣滓回收)。Jrcokit支持更少的回收,但它允许你指定操作形式。此外,对静态形式的支持,在运转时回收器可以选择最佳的渣滓回收战略。双方都做了许多有趣的努力和任务(Sun的任务效果是G1回收器),如今双方一同任务应该可以发明出更优秀的渣滓回收器。
对多核系统的NUMA支持:非一致内存拜访(NUMA)让内存拜访工夫依赖于内存位置绝关于处理器执行代码的物理位置,在多核处理器技术范畴更是一个抢手话题。例如,在多核处理器中,每个内核有它本人的本地数据缓存,在处理器级别又有一个共享的二级缓存,如图1所示。
图 1 多核处理器中的NUMA架构
另一种设计是一切内核共享处理器级缓存,但这并不一定是更好的设计。例如,共享缓存通常来自每个内核的物理缓存,拜访必需要在内核之间进行协调。
但据Oracle Java SE首席工程师Mark Reinhold透露,Java虚拟机合并能够会持续很长的工夫,一是难度很大,二是要保证波动性,他估计需要2年工夫才干完成,Reinhold也希望能结合双方的一切优点,造出一个超级产品。
无论发作什么情况,为了到达最佳功能和最低的延迟,JVM需要知道和支持NUMA架构。例如,经过与硬件打交道,JVM可以尝试在一个内核上运用热缓存执行代码,所谓热缓存就是你需要的数据就存储在它里面。
Java EE
Oracle长期以来一直都是Java的支持者,也是最大的JCP成员之一,公司10多年前就开始参与Java EE规范的编制,因此对Oracle成为Java中间件市场的大鳄不应该感到意外。
经过本身努力和并购,Oracle汇聚成了本人的融合中间件平台,它由完整的Java EE堆栈,基于SOA的服务,一个ESB,事务服务器和开发工具等组成。收买Sun后,Oracle拥有了Glassfish软件套件,它也是一个Java EE参考完成。由于Oracle还拥有另一个Java EE平台Weblogic,据最新的产品道路图,Oracle在融合中间件堆栈中将运用Weblogic,而在嵌入式方面能够会运用Glassfish。
至于Java EE的未来,Oracle表示将在以下几方面做出努力:
模块化,开发标准:Java EE 6经过配置文件(Profile)定义完成了模块化Java EE,允许厂商根据特定需求创立更小的Java EE堆栈子集,处理成本和Java EE运用复杂成绩。经过模块化设计和定义标准,有助于简化Java EE,让它的应用范畴更普遍。
Java EE 6规定了两种配置文件:Web配置文件(Servlet,JSP和JSF)和Java EE企业配置文件。显然还可以定义更多的配置文件种类,例如,为支持会话初始化协议(SIP)定义电信服务器配置文件。
除了配置文件外,模块化可用于部署中间件到其它设备,例如,Java EE堆栈的嵌入式部分嵌入到移动设备,如安防摄像头,RFID阅读器,或其它你能想到的任何智能设备,开放了标准Java编程模型后让它的运用范围更广了。
UI和RIA:HTML依然是Java EE应用顺序隐含的UI协议,通常有Java Servlet,JSP和JSF生成,思索到生产的Web页面是静态的,可以运用Ajax技术,不过它已经超出了Java EE的范畴。
虽然Ajax和Comet办法已经被证明是十分强大的,具有生机,让Web应用顺序的易用性更好,但目前还缺乏标准和优秀的JavaScript开发工具。
虽然Oracle没有明白这方面的具体方案,但我猜测未来Java EE和JavaFX集成时将会处理Ajax成绩,理想上,根据2009年JavaONE大会上拉里埃里森的关于Ajax和JavaFX的发言,我的猜测应该是正确的。
Java ME
Java ME是Sun的一个庞大成功,已经用于数十亿各种类型的手机,它还由第三方定制用于无数的电力嵌入式处理方案。具体而言,Java ME主要由两个产品组成:连接限制设备配置(Connected Limited Device Configuration,CLDC)和连接设备配置(Connected Device Configuration,CDC)。两者之间的区别是它们的能力,CLDC是一个较小的子集,拥有一个十分小的虚拟机(VM),因此在能力无限的设备上运转。CDC是一个较完整的Java完成,它是为更强大的设备设计的。CDC与Java SE的字节码兼容,即为Java SE编译的.class文件可以在CDC JVM上运转,但CLDC就不行。
由于Java ME(CDC和CLDC)和Java SE之间的限制和差异,在Java API和库方面也有差异,这就造成了开发分裂,为了处理这个成绩,Oracle日前宣布将一致Java ME和Java SE API,
strep彻底消除Java市场的分裂。
另外,Oracle还宣布要改善Java ME的启动工夫和整体功能,改良移动设备的电源管理,并努力支持新兴嵌入式设备(MID,媒体播放器等),以及改良JavaFX和JavaFX Mobile。
JavaFX
根据拉里埃里森和其它高层(如Thomas Kurian)的表态,Oracle将会继续支持和开展JavaFX,JavaFX是一个强大的运转时,脚本言语和工具集,让Java开发人员更容易构建RIA应用顺序,Flash/Flex和Silverlight也是RIA范畴的竞争者,但JavaFX应用顺序是为了满足你生活方方面面的应用,此外,JavaFX及基于Java构建的,因此你可以在JavaFX顺序中集成和运用现有Java代码。
你可以直接在桌面计算机上,嵌入到网页,经过Java WebStart或支持JavaFX Mobile的设备上运转JavaFX应用顺序,在移动世界大会(Mobile World Congress,MWC)2009上,多家手机制造商和运营商宣布它们的手机将会支持JavaFX,但Oracle对JavaFX是如何方案的呢?
Oracle表示它将添加JavaFX的投资,为RIA应用提供无与伦比的体验,重点如下:
基于可视化组件创立一个设计范式
为JavaFX应用顺序创立一个丰富的UI扩展库
提升一切平台的JavaFX功能
增强跨设备移植JavaFX应用顺序的能力
与Java,JavaScript和HTML 5无缝集成
支持新兴设备和UI范式(如多点触摸)
当然,埃里森本人在去年的JavaONE大会上也暗示将会基于云的方式改造OpenOffice,基于这个缘由,我猜测Oracle将会让JavaFX成为其云战略的主要组成部分,即使埃里森本人对云并不感冒。
开发工具
在一切Java组件中,NetBeans的前途是最不阴暗的,Oracle没有宣布具体的方案,只是说NetBeans将会继续作为Java开发人员的轻量级IDE,虽然说是轻量级平台,但它的重点依然是Java ME,Java EE和基于脚本的开发,另外还包括移动开发和静态言语编程。
但是Oracle Jdeveloper和Eclipse依然是重点战略级Java开发平台,Jdeveloper是Oracle融合中间件套件的一部分,Oracle将会继续把Eclipse IDE作为Eclipse 11g产品企业包的一部分。
我想Oracle将会把重点放在围绕JavaFX内容制作,UI,部署,Java和JavaFX应用顺序管理等新工具的开发上。我个人十分喜欢NetBeans,从2006年就开始运用它,希望Oracle可以尽快廓清IDE的具体方案。
总结
虽然企业的一举一动很少影响到开发者社区,但Oracle收买Sun将在今后几年发生深远的影响,虽然你能够不会关怀Oracle个别产品的盈利能力,但作为一名开发人员,但我想你对下面的成绩一定感兴味:
HotSpot和JRockit合并发生一个超级JVM
Java ME和Java SE API一致
添加对JavaFX的投资,让它适用于更多平台
继续在JVM中集成静态言语