Java SE&Sun HotSpot和Oracle JRockit合并_2010年03月
这篇文章重新审视了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,彻底消除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中集成动态语言