1  /  1  页   1 跳转 查看:96

Java技术本纪

Java技术本纪

Java虚拟机的 10 年
文/曹晓刚


Java虚拟机的起源与构造
当我们说到“Java”这个词的时候,指的是四个相互关联的概念:Java语言、Java API、Java Class文件格式、Java虚拟机。整个Java体系是基于Java 虚拟机构造的,正因为如此,才能实现Java的安全性和网络移动性。Java并非是第一个采用“虚拟机”概念的体系,但却是第一个得到广泛运用的虚拟机平台。 “虚拟”,是一种隔离物理资源与逻辑资源的手段。Java虚拟机的“虚拟”,则是用来隔离物理机器、底层操作系统与Java语言规范实现的手段。
虽然Java是一种面向对象的语言,我们平时大量使用的,是对象间的多态、组合(Composition)、委派(Delegation),但当我们讨论虚拟机的时候,我们看见的基本概念却是“栈(Stack)”和“堆(Heap)”。根据冯诺依曼的“存储计算”模型,所有的代码都保存在代码空间中,随着程序计数器指针的变化进行程序的执行、跳转。Java虚拟机中没有寄存器的概念,方法调用是采用“栈”进行的,这是一种安全、简洁的方法。
Java虚拟机通过类装载器支持对类的隔离,这也是Java实现安全性的基础。每个类都具有自己的命名空间,在具有不同安全级别的沙箱中运行,因此不会产生低安全级别的代码来越权访问高级别代码的机会。类装载器的出现是Java虚拟机与大部分用C实现的虚拟机的显著不同之处。
Java虚拟机的另外一个显著特点就是实现了自动的垃圾收集。在往常,写程序的时候要牢记对象之间的关联,在每个程序块中假若申请了对象空间,就必须在出口释放掉,方法调用往往同时也就是对象的边界。而自动垃圾收集带给开发者的最大好处,就是可以非常方便地从整体上把系统的对象组织成一张对象图,只需往这张图中添加对象,维护对象之间的关联,却不需要自己做复杂的清扫工作。正是有了这种思维单纯的对象图的支持,OR Mapping(关系数据库与对象映射)技术在最近得以大行其道,设计模式也更容易被Java群体所接受。

虚拟机的优化
1995年第一代的Java出台之时,其虚拟机执行是依靠“字节码解释器(Byte Code Interceptor)”的,也就是说每条指令都由虚拟机来当场解释执行,这造成速度令人抓狂地缓慢。更有甚者有人开始总结许多的“速度优化经验”,比如说:“尽量把所有的代码都放在较大的方法中执行”与“少用接口”等等,这完全与Java语言的设计目的背道而驰,现在看起来是多么可笑的奇谈怪论,当时却是很多程序员津津乐道的经验之谈。无他,Java本身执行太慢了。Java生命的前十分之三就是如此缓慢地渡过的。
于是,Sun的工程师开始拼命想着提高执行速度。JIT静态编译器的出现是在1996年十月,Sun放出了第一个编译器。JIT编译器在每段代码执行前进行编译,编译的结果为本地静态机器码,执行速度有了质的提高。Symantec公司当时凭借其傲人的JIT编译器,在整个Java界受到热烈的追捧。在其后的1998年,Java 1.2发布的时候,附带了JIT编译器,从此Java的使用者终于可以抛开上面说的那些奇怪的“速度优化经验”了。
JIT静态编译器虽然可以解决一些问题,但是性能仍然和C/C++有很大的差距。对一段程序而言,一名优秀的程序员是如何来改进运行速度的呢?首先,他不会傻到把所有的代码都来优化,他会观察、思考到底哪段代码对整体性能影响最大?然后集中精力来优化这一段代码。按照经验,整个程序 10%-20%的代码,会占据 80%-90%的运行时间。用这种方法,在同样的时间、付出同样程度的努力后,这名优秀的程序员使整个程序的性能得到了很大程度的优化。HotSpot引擎,就是模仿人工的这种方法进行优化的。在程序运行的开始,Java代码仍然解释执行,但HotSpot引擎开始进行采样(Profiling)。根据采样的结果,决定某段程序是占用较多运行时间的,就认为它是“HotSpot”,它也就是目前程序的瓶颈, 引擎开始启动一个单独的线程进行优化。因为不象原始的 JIT编译器那样无差别的编译所有代码,HotSpot引擎可以集中精力来对HotSpot代码进行深度优化,这样这部分代码执行起来更加迅捷。之前的静态编译器只能按照预定的策略进行编译优化,而HotSpot引擎的优化是基于采样的结果的,因此这种方法对所有的应用程序都有效。1999年3月27日,Sun放出了第一个HotSpot引擎。在随后的2000年5月的JDK 1.3中,包含了HotSopt引擎,这也使1.3成了一个具有里程碑意义的发行版本。到这里,Java的十年生命,已经过去了一半。
HotSpot代表的是一种动态编译的技术。对Java这种大量使用委派、组合等面向对象特性的程序来说,动态编译比起静态编译来有显著的优势。比如Method Inlining。方法的调用是一个很耗时的操作,假若可以把方法调用直接内嵌到调用者的代码中,就可以节省大量的时间, 这被称为“Method Inlining”。因为涉及到类的重载,静态优化很难确切知道哪些属性、方法被重载,因此很难对method进行合并,只好在方法内部进行静态编译,假若每个方法都很小,静态优化能起到的作用也就比较小。而动态编译因为可以完全随时掌握类的重载情况,就可以把相关的方法合并进行深度优化。现代的Java程序,特别是在设计模式教育得到普及之后,大量使用类的继承、委派,形成了很多短小的方法,动态编译的优势就更加明显。
自从出现了HotSpot之后,整个Java界为之一振。
最近的五年,就是继续优化的五年。继续进行优化的方法有几条路,一是研究新的采样算法。因为采样关系到不同的优化策略,会对整体性能有比较大的影响。二是研究深度优化的方法。三是研究垃圾收集的算法。垃圾收集会带来程序短暂的停顿,这会带来负面的用户体验。于是,如何提高垃圾收集的效率,减少延迟,出现了五花八门的算法,比如渐进式收集、火车算法等。在多处理器的时候,如何利用多处理器进行并行收集也是研究的一个热点。这方面,BEA的JRocket走在了前面。

现实生活中的虚拟机
最后,让我们来盘点一下目前市面上可见的各个虚拟机。
首先要提到的,毫无疑问是Sun的虚拟机。作为大众心目中的“官方实现”,Sun拥有最大的用户群,并且拥有“兼容基准”的地位,其他虚拟机都必须要考虑和Sun虚拟机的兼容性问题。比如 JRocket就会在某些特殊情况下表现出和Sun不同的特性,可能对程序运行有影响。不过Sun也的确没有让广大用户失望,虽然在早期性能比不上Symantec,后来在1.2 的时候性能又被IBM超越,但Sun一直在努力革新,特别是 1.4.2之后,性能有了长足的进步。虽然JDK 1.5的虚拟机在性能上没有什么提高,但是增强了稳定性,据说修改了8000处bug,真是让人汗流不止。原来我们在1.4.2下面一直在享受这么多bug啊。
其次是老牌劲旅IBM。IBM的JDK在1.3的时代创下了最好的性能记录,从此树立了高端形象。特别是在其WebSphere产品中得到了很好的评价。其JDK也是最早支持64bit的JDK之一。到了现在,IBM JDK在高端仍然是和BEA可以一拼的。
然后是后起之秀,BEA的JRocket。说到BEA突然在JVM领域一夜之间异军突起,多少让人有些瞠目,不过它采取的战略特别简单:自己没有,索性花钱买了在此领域深有研究的JRocket,在前面加上BEA的标志就可以了。JRocket瞄准高端服务器市场,在多处理器环境下有不俗的表现。
除此之外,还有几个开放源代码的JVM值得一提。首先就是大名鼎鼎的JikesRVM。说起其大名,大多数人都知道Jikes编译器是 IBM开发的,效率比同等的javac编译器高得多,很多开发者都使用Jikes编译器来取代javac。而JikesRVM则是IBM开源出来的一整套虚拟机技术,包含了JIT,GC的完整实现,在其网站上也有众多的论文,实在是想要深入研究JVM者的绝佳资源(http://jikesrvm.sourceforge.net)。
 

Java技术本纪

Java十年有成
——谈J2ME的发展历史
文/王森


Java本来就是为了嵌入式系统而生
1990年12月,Sun内部由James Gosling、Patrick Naughton以及Mike Sheridan成立了一个叫做Green Team的小组。Green Team小组的主要目标,是要发展一种新架构,而这种架构必须能够在消费性电子产品作业平台上运行,现在我们普遍认识的PDA、手机或是信息家电(IA),都是属于这种架构的目标平台。接着,Green Team在1992年的9月3号,发表了一款由Java 技术之父 James Gosling所领军研发,名叫Star Seven(*7)的机器,研发出一部交互式的掌上型家用娱乐装置,可透过使用动画触碰式屏幕的使用者接口来控制其它电子设备。
经过了13年的时间,现在我们检视J2ME的发展历史,我们可以发现,虽然在1999年,Java被切割成J2SE、J2ME、J2EE,所以有了J2ME这个名词的出现。但是Java并非1999年开始才开始发展嵌入式系统上的应用。其实,Java本来就是为了嵌入式系统而发展的一种架构。即使目前大家多半将Java的应用聚焦于企业上的J2EE应用。但是严格来说,J2ME才是Java真正“回归本心”的领域。

半路杀出的Personal Java
Personal Java是正规Java版本的一个分支,其目的在于能够让PDA或高阶手机执行Java程序,目前在Windows Mobile或Symbian OS(仅限采用UIQ或Nokia Series 80的行动电话)平台上都可以开发Personal Java应用程序。
虽然从Java 1.0发表之后,Java就被广泛地使用在桌上型应用程序以及Applet的开发上,但是,从Java 1.1开始,Java又回到了它一开始的老路-也就是嵌入式系统方面的应用,在当时Sun Microsystems发表了Embedded Java与Personal Java(也有人简称为PJava)这两项规格。Personal Java的规格是从Java 1.1之中所分支出来,因此Personal Java的规格是根据Java 1.1的规格而制定的,但是并非Java 1.1的全部规格都包含进来,所以Personal Java只能算是Java 1.1平台的子集合。
Personal Java特别适合用在具有丰富图形显示能力的消费性电子产品上面,于是我们可以发现Sun Microsystems网站上对于Personal Java的参考实作是建立在Windows Mobile产品(过去叫做Pocket PC)上头的。
在1999年,一般PDA或手机的能力,离Personal Java所需要的硬件条件仍有很大的一段差距,因此Personal Java并不是一个很成功的产品。因此Sun Microsystems在此时将Java区分成J2SE、J2EE、J2ME这三块,希望可以重新塑造整个架构,尤其是J2ME,希望Java可以在嵌入式系统的领域有所发展。

J2ME从何而来?
谈到J2ME,大家就会联想到KVM这个名词, KVM的设计者Antero Taivalsaari,最早在Sun Microsystems参与Spotless Project,这个项目才是J2ME的最早起源。由于Antero Taivalsaari曾经在世界知名电信设备制造商工作,所以他有了在手机上开发JVM的概念,后来得到公司支持,就有了各位所知的KVM(K Virtual Machine)。
最早应用KVM的产品,就是一个可以在Palm OS上执行的KJava。KJava并不算是一个正式产品,只能算是一个概念测试产品。开发人员会开发名为Spotlet的应用程序,透过工具和KVM的辅助,应用程序就可以在PDA上执行。虽然KJava早已成为过去式,但是仍有电信厂商使用这个名词,作为手机上Java平台的名称,不过,已经不是真正的KJava了。有了KJava的发展经验,Sun着手设计J2ME的架构,让J2ME可以应付未来嵌入式系统的发展。

J2ME整体架构
J2ME最基本的规范制定在JSR-68(Java规格编号第68号),在此规格里头定义了J2ME的技术架构。根据此规范,J2ME由三种类型的规范堆栈而成,分别是Configuration、Profile以及Optional Packages。这三种类型的规范定义由其它的规范所定义。
在最底层的Configuration规范,定义了硬件所必须具备的能力,比方说硬件至少具备多少ROM、RAM,CPU的频率最少应该是多少,连接网络时频宽至少要多快。Configuration规格之中定义了一组低阶的API,这代表Java至少必须提供的低阶功能,这组低阶的API就是核心类别函数库的子集合。
在Configuration之上的规范称为Profile。Profile针对各种不同机器的特性定义了高阶的API,这些高阶的API通常都是与其它平台不相关的扩充类别函数库。这些高阶API决定了该种机器上Java程序的撰写方法。比方说行动通讯装置(手机、PDA等)这类型装置上Java程序的撰写方式,以及能够调用的API,都定义在MIDP(Mobile Information Device Profile)之中。
就算是同类型的装置,有些功能也不一定具备(有些厂商的机器可能有,有些厂商的机器可能没有,例如手机上的照相机、和弦铃声等),这些功能就定义在“厂商选择性实现套件(Optional Package)”之中,比方说,有的厂商会提供简单的数据库管理系统(DBMS)在该装置上,那么他们就会实现JDBC Optional Package。不提供数据库管理系统的厂商就不需要实现JDBC Optional Package。所以称作厂商选择性实现套件。
所谓的厂商选择性实现套件,意思是说,这是一组和其它规格(或API)没有任何相依性的类别函数库,如果厂商愿意提供这样的功能给程序设计师(通常是因为硬件具有充分的能力可以完成规格之中所制定的功能),就会将这组类别函数库实现出来,程序设计师也可以利用这些功能开发出功能更多的应用程序。

MIDP工业标准
虽然J2ME架构完整,但是目前的发展,除了Personal Profile之外,最大的应用在于架构在CLDC之上的MIDP。目前所有标示可以支持Java的手机,所支持的都是MIDP,几乎所有的无线通讯厂商皆采用MIDP作为其开发程序的标准。
在MIDP 1.0的时代,由于规格上本身的功能不足,使得许多厂商不得不加入自己专属的API,例如震动、背光、声音等扩充功能(例如:Nokia UI API),以弥补MIDP平台的不足。
到了MIDP 2.0,增加了许多众所期盼的功能,但是,即使规格更清楚了,即使很多新功能都已经由JCP制定成标准的Optional Packages,这些问题依然无解。市面上的MIDP平台仍然处于混乱状态。开发者必须在执行时期侦测各种专属API和Optional Package的存在,这会增加多余的程序代码。平台的混乱会造成在某个装置上可以顺利安装及执行,而到了其它装置时,有可能无法执行,甚至有可能连安装都有问题,所以开发者通常要开发好几种版本的MIDP应用程序供各种厂牌、各种型号的装置使用。
为了解决上述问题,进一步提高MIDP应用程序的可移植性,Sun Microsystems以MIDP 2.0规格为核心,设计了JTWI规格。未来的无线通讯平台,将不会只有符合MIDP 2.0规格,而是必须要符合JTWI规格。这将是J2ME软件在可移植性上的一大突破。JTWI(Java Technology for Wireless Industry)是一个统合性的规格,其目的是为了确保MIDP软件的可移植性。所以JTWI规格除了规范无线通讯平台(特别是手机)所必须支持的J2ME标准之外,也对既有规格中模糊不清的地方与以加强。所以新款的手机为了加强移植性,都会支持JTWI标准。JTWI只是一个统合性的规范,并没有制定任何新功能,目的只是要统一当前平台混乱的现象,让J2ME应用程序更具可移植性。JTWI主要分成几个部分:
1 .规定平台必须支持的API。
2 .统一的应用程序执行环境。
3 .既有规格的理清与加强。
在规定平台必须支持的API的部分,JTWI规定至少必须支持CLDC 1.0、MIDP 2.0以及WMA 1.1:

所以,只要厂商宣称支持JTWI平台,那么代表一定支持CLDC 1.0、MIDP 2.0以及WMA 1.1规格之中的所有功能。另外,厂商可以根据装置本身的能力,将CLDC 1.0提升成CLDC 1.1,可以加入MMAPI 1.1。因此实际上JTWI平台会有一下几种组合方式:
其中,CLDC 1.1 + MIDP 2.0 + WMA 1.1 + MMAPI 1.1是最完整、功能最强平台。
在统一应用程序执行环境方面,过去让J2ME应用程序开发者最为头大的问题有以下几项:
● 应用程序的大小可以多大?
● 执行时期的内存有多少可以使用?
● 有多少内存空间可以作为永久储存之用?
由于规范中对于J2ME应用程序本身的大小和执行环境没有很详细地规范,使得每家厂商都有自己的规范,比方说Nokia限制应用程序最大只能30 KB,Motorola则可以支持50 KB以上的应用程序。这些规范都严重地困扰着开发人员。这些问题在JTWI之中都获得改善。
JTWI定义了应用程序的标准大小(Standard-size Application)。JTWI规定,可以执行J2ME应用程序的行动通讯装置,至少可以容许大小为64 KB以上的程序主体(JAR文件)、5 KB以上的应用程序描述文件(JAD文件)、以及30 KB以上的永续储存空间、执行时期的内存(Heap Memory)为256 KB。上述大小只是底线,厂商可以视装置的实际能力支持更大的内存空间。标准应用程序大小(Standard-size Application)将成为一个计算用的单位,举例来说,厂商会说这个装置可以安装20个标准应用程序,开发者所撰写的程序可以说这个程序需要占掉3个标准应用程序的空间。
至于对既有规格的理清与加强的部分,我们将在往后章节一一说明。最重要的一点是,JTWI规定,该装置所支持的任何媒体格式(例如图片、声音、影像等)都应该能够使用HTTP 1.1获取,也就是说,存取这些媒体时所使用的URL都必须能够接受http作为存取的通讯协议。
 

Java技术本纪

Java开发环境的
过去、现在和将来
文/EclipseCN


1995年3月23日,San Jose Mercury News登出一篇题为“Why Sun thinks Hot Java will give you a lift”的文章,在那篇文章里预言Java技术将是下一个重大事件,这个预言现在看来并不仅仅是商家的宣传伎俩,虽然文章是当时Sun的公关经理 Lisa Poulson安排撰写的。从世人知道Java那一刻起到现在,算起来已经过去整整十年,回顾过去的十年值得总结的东西有许多,但在这里笔者只想就Java 开发环境谈些个人的想法与朋友们交流一下。
现在的软件开发人员在整个软件的开发生命周期里,也许会根据需要使用各式各样的开发工具来完成相对复杂的开发任务,而在几十年以前,人们还只是使用文本编辑器、编译器和Debugger进行开发,对于这个阶段的开发环境人们称之为CLEs(Command Line Environments)。 而当人们发现如果将那些单独分开的开发工具集成起来就可以有效的提高开发效率时,IDEs(Integrated Development Environments)就出现了。Java的出现尽管只有十年,但其开发环境也大至经历了从CLEs到IDEs再到XDEs这三个阶段,现在即将进入CDEs阶段。在上述Java开发环境发展过程中,有许多值得我们大家关注的地方。

Java开发环境的历史回顾
纵观过去十年Java开发环境的发展,大致可以粗略的划分为如下几个阶段:
● 1995,命令行开发环境CLEs
● 1996-2000,集成开发环境IDEs
● 2001-2004,扩展开发环境XDEs
● 2005至今,协同开发环境CDEs
1995年,不平凡的一年,这一年Java 获得了成功。可令人尴尬的是在1995年并没有一个令人满意的Java开发环境,开发人员在进行Java编程时,大多使用文本编辑器编辑源程序,然后再使用命令行的方式进行编译处理。那时的Java开发环境还处于CLEs时代,开发效率非常低,这预示着在Java开发工具上会有一番激烈的竞争。
有人称1996年为互联网年,有人却称之为Java年,还有人称之为Web开发年,但不论如何称呼1996年,它都反映了一个事实:Bill Joy将Java与互联网相结合的策略取得了成功。这一年的9月Sun推出了其Java开发环境-Java WorkShop,这是一款基于浏览器的Java开发工具,但由于当时 Java在许多方面还不成熟,所以实际上Java WorkShop并不成功,同年发布的Symantec Visual Cafe由于还是采用C/C++语言进行开发,所以性能与成熟度上就比WorkShop好得多。提到Visual Cafe就不能不提Eugene Wang,因为Eugene Wang常常是与计算机间谍这个词同时出现的人物,有人甚至讲当时Symantec的老板Gordon Eubanks与Eugene Wang签约时,也同时签下了监狱里的一个单元。Visual Cafe就是由Eugene Wang进行主要策划的,它是在同一年发布的Java开发环境中,唯一解决了与数据库连接问题的开发环境,带有一套可以与数据库相连接的组件,无需太多编程使用拖拽的方式就可完成大部分工作,这一优点使得Visual Cafe受到了Java开发人员的欢迎。这一年IBM收购了OTI公司,从而得到了Dave Thomas的弟子John Duimovich、Dave Thomson、Mike Wilson等一大批软件精英,这之中还包括“生活在技术刀锋上的开发者”Brian Barry。
1997年,由于微软垄断案,使得微软在Java开发环境上的努力受到了限制,Visual Cafe由于界面直观易用,可以很容易地连接各种数据源等功能再次受到开发人员的欢迎。这一年IBM发布VisualAge for Java。VisualAge for Java是面向代码库的开发环境,它提供代码库和项目管理以便于开发团队在 C/S环境下进行项目开发。但由于大多数Java开发人员比较熟悉面向文件的开发环境,还不太习惯面向代码库的开发,再加上VisalAge for Java对系统资源的要求比较高等因素,使得VisualAge for Java一开始未被Java开发人员所认可。
1998年至2000年比较成功的Java开发环境是JBuilder,这是由于Borland较好的把握住 J2SE、J2EE和J2ME发布后,Java技术升级的时机,全面支持Java1.1和Java1.2开发平台,它还提供了多种工具方便用户从旧的平台迁移到新的Java平台。JBuilder本身80%是基于JDK1.2进行开发的,它支持JavaBeans, Enterprise JavaBeans, JDBC等方面的应用开发,可以连接多种关系数据库。为支持分布式应用开发,JBuilder还集成了 VisiBroker ORB、JSP server、数据库和EJB AppServer,并提供Open Tools API便于第三方工具集成。上述种种的优点使得JBuilder一举超越Visual Cafe,成为当时最受欢迎的Java开发环境。在众多Java开发环境中,1999年IBM发布的VisualAge for Java Micro Edition是比较有特色的开发环境,它是由Erich Gamma和与Erich Gamma有“焦不离孟、孟不离焦”之称的John Wiegand共同进行设计的,采用了Java 扩展机制,并集成了JUnit测试框架,其当时所采用的架构深深地影响了后来Eclipse1.0所采用的架构。同时,通过VisualAge for Java Micro Edition的开发,那些来自“未来世界”(Smalltalk们总认为他们来自计算机的未来世界)的软件精英们,全面彻底地对Java技术进行了评估,得出了许多结论性的东西,这之中包括现在闹得沸沸扬扬的Swing和SWT对比。此外,Sun将其收购的NetBeans变成了开源的Java IDE也是一件不大不小的事情。
纵观1996年至2000年这五年时间里,随着Java及其相关开发应用的发展,Java开发环境也不断的完善,从CLEs进入到IDEs阶段。为了提高Java开发人员的开发效率,Java开发环境主要从两个方面进行改进与提高。一方面是提高集成在Java IDEs当中开发工具的性能和易用性,另一方面是将Java开发环境尽可能的覆盖到整个软件的开发生命周期。随着基于WEB,采用N-层结构的应用开发成为Java开发人员主要从事的开发任务,Java开发环境需要支持越来越多的技术,比如ML、JSP、EJB和CORBA等,这就造成了Java IDEs的规模变得越来越大,许多Java开发环境都集成了数据库、JSP Server和AppServer,软件的研究人员将上述IDEs不断膨胀的现象称为“IDEs大爆炸”。
“IDEs大爆炸”现象发生以后,有关Java开发环境是走少而精的发展方向,还是走大而全的发展方向就成了广大Java开发人员关注的问题。2001年Java开发人员达到了200万,成为每个软件供应商都无法忽视的力量,这一年JetBrains推出了Java开发环境少而精的代表: IntelliJ IDEA。 IntelliJ IDEA明确的表示只做最好的Java代码编辑器,不做什么文件都可以编写的编辑器。它关注Java开发人员的工作实际并将这些工作进行了优化。由于减掉了一些可有可无的工具,所以价格上相对合理公道。当年IntelliJ IDEA击败JBuilder成为最受Java开发人员欢迎的Java开发环境,不过2002年随着JBuilder将大而全的功力再提升一步,将UML建模工具、JUnit测试框架以及Apache Struts等开发工具集成进来,大而全的发展方向又一次受到Java开发人员追捧。最全还是最好似乎使Java开发人员在选择Java开发环境时处于两难状况,但实际上当Eclipse 1.0发布时,这个问题已经得到了初步的解决,最好和最全是可以兼顾的。
Eclipse的出现不是从天上掉下来的,也不是某个天才拍脑袋想出来的,它是一群软件精英们集体智慧的结果。早在1998年IBM就打算开发新一代的工具平台以便将它现有的各种开发工具统一起来,并减少开发各种工具时重复的劳动,同时希望在新的平台上建立新的Java开发环境。经过一段时间的准备, IBM开始建立起一个开发团队,人员构成主要来自VisualAge for Java Micro Edition和VisualAge for Java两个项目的开发人员,选择的标准是过去10年至少开发过5到6个IDE。此外,IBM还联合了9家公司共同成立了一个开源组织Eclipse基金会,将Eclipse提供给开发人员使用,并在开源社区的帮助下进一步完善Eclipse本身。Eclipse在最初设计时,插件模型是静态的,不能实现插件的即插即用功能,即便是大受欢迎的Eclipse 2.1也还是静态的。所以到2004年发布Eclipse 3.0时,Eclipse进行了重大改进,采用OSGi的插件模型,初步实现了插件的即插即用功能,至此一个完美的、可扩展的开发环境展现在Java开发者面前,这时Java开发人员已经达到300万。

Java开发环境的现状
2004年Eclipse 3.0的发布极大刺激了Eclipse用户的增长,经过一年以后,Java开发人员现在使用Java开发环境的状况是如何的呢?看了下面的表格里的数据也许可以了解一个大致的状况。
首先需要指明的是上述的数据并不是当前Java用户使用Java开发环境的准确反映,但我们可以从中了解一个大致的状况。现在的Java环境可以分为三个集团,第一集团是Eclispe它大约占据1/3的份额,第二集团是 IntelliJ IDEA、NetBeans 和JBuilder占据另外1/3的份额,相互之间旗鼓相当,第三集团是以JDeveloper和WSAD为代表的十几种Java开发环境占据剩下的 1/3份额,但每种开发环境占总份额的比重不超过5%。我们考察Eclipse、intelliJ IDEA、NetBeans 和JBuilder这些主流开发环境,可以发觉它们有一个共同的特点那就是可扩展,尽管在实现手段上各有不同。这就是为什么称现在的Java开发环境为XDEs(eXtended Development Environments)的原因,IDEs已经死亡了4年,专业的开发人员需要了解这个事实,因为XDEs也快死了。
由于市场的压力,一个软件企业不仅要提高开发人员个体的工作效率,还要提高整个开发团队以及整个企业的开发效率,但在现有的Java开发环境XDEs下无法完全做到这些,所以新一代开发环境CDEs (Collaborative Development Environments)就产生。Grady Booch和Alan W. Brown的研究表明一个程序员一天工作时间的分配是这样的:分析占16%(从5%到40%不等), 设计占14%(从1%到40%不等),编程占16%(从0%到60%不等),测试占10%,打电话占3%,阅读占7%(电子邮件,文档,月刊和杂志),参加开发会议占10%,无关的
 

Java技术本纪

J2SE发展演变史
文/Matirx Java社区 杨洪波 王志舜


J2SE:怀胎
Java的历史可以追溯到1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行,他们使用了C/C++/Oak语言。由于多种原因,绿色计划逐渐陷于停滞状态。
直至 1994年下半年,由于Internet的迅猛发展和环球信息网的快速增长,第一个全球信息网络浏览器Mosaic诞生了;此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;Games Gosling决定改变绿色计划的发展方向,他们对Oak进行了小规模的改造,就这样,Java在1995年的3月23日诞生了!Java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的Applet程序,而1995年的Applet无疑能给人们无穷的视觉和脑力震荡。
但没有相应的开发库而只靠Java语言来进行开发肯定是困难重重,所以Sun公司在1996年的1月23日发布了JDK 1.0来帮助开发人员的开发。JDK包括两大部分:运行环境和开发工具。紧跟着,Sun公司在1997年2月18日发布了JDK 1.1。JDK1.1相对于旧版本最大的改进,是推出了JIT(Just-In-Time)编译器,另外一个改进是AWT 1.1。
在JDK 1.1时代,Java平台分为PersonalJava与EmbeddedJava,前者比较适用于运算资源和内存丰富的设备,而资源有限者适用于后者。这样的分类明显不符合时代发展的潮流,所以,Java平台处处蕴藏着新的翻天覆地的革命……

J2SE1.2:诞生
JDK 1.2在1998年12月4日的隆重发布,标志着Java2平台的诞生。Java 2的J2SE 1.2时代是一个大变革时代,它进行了如下的三大革命:

● 市场推广革命
Sun公司在Java 1.2版以后将JDK 1.2改名为J2SDK,将Java改名为Java 2。在1999年Sun公司还将Java 2平台分为三大块:J2SE,J2EE,J2ME。这次市场推广革命顺应了网络急速发展的潮流,对Java 2平台的发展起到了很好的催化剂的作用。

● API供应标准革命
而随着供应商的不同,Java的API分为三大类:
Java Core API:由Sun公司制定的基本的API,所有的Java平台都应该提供。
Java Optional API:由Sun公司制定的扩充API,Java平台可以有选择地提供。
特殊API:由特殊厂商或者组织提供的API。

● API制定过程的革命
如果你有需求不能通过遵循标准的API来实现,可以向JCP提出制定新的API的请求,经过审核,你的请求可能被通过或者驳回;如果是被通过,则开始进入制定该API的程序。
J2SE 1.2时代进行的这些革命形成的制度一直沿用到现在,对Java技术的发展形成了深远的影响。
除了上述的三大革命,Java 2还支持并新增了许多新特性,最受追捧的当属Swing库。Swing是轻量级的API,它不但有各式各样先进的组件,而且连组件风格都可抽换。Swing出现之后,大家很快地就不太使用AWT了。Java 2还废弃了一些API,最重要的莫过于Thread类中对suspend(),resume()和stop()等方法的废弃。由于JDK 1.1的集合类库中的Vector类和HashTable类都考虑了同步,在平常的使用中影响效率,所以Java 2专门添加了对应的非同步类,并完善了集合类库。

J2SE1.3:拓广
Java 2平台推出后,得到了市场的强烈反响,所以,在2000年5月8日推出的J2SE 1.3对J2SE 1.2的改进,主要是对各种已有API的加强和对新API的拓展。
数字运算:加入了java.lang.StrictMath,方便我们的一般的数字运算。
新的Timer API:相信大家对其中的java.util.Timer和java.util.TimerTask一定不陌生。
Collections包:加入了一些新的API,方便我们的使用。
虚拟机停止钩子:J2SE 1.3还加入了一个强大的功能,那就是虚拟机停止钩子(Virtual Machine Shutdown Hooks),这个功能使得我们能够在虚拟机停止时完成我们自己的操作,比如关闭网络连接或者保存会话状态或者清除临时文件等等。
DNS服务:在JNDI接口方面,加入了一个DNS服务的实现。
Jini实现:J2SE 1.3包含了一个Jini实现,这使得我们可以方便地把诸如打印机、摄像机和磁盘驱动设备插入现有网络中,并且能自动搜索已在网上的设备可以提供的服务并享用这些服务。
XML支持:由于计算机网络和XML技术的快速发展, J2SE 1.3在Optional API中引入了Java API for XML包。
HotSpot虚拟机:J2SE 1.3引入了HotSpot虚拟机。在Solaris版的JDK 1.3中,已经不支持传统的虚拟机,而Windows版的JDK 1.3同时支持传统虚拟机和HotSpot虚拟机。
从上面的分析可以看出,J2SE 1.3主要是对J2SE 1.2查漏补缺和拓展新的API。从应用领域方面考虑,J2SE 1.3已经涵盖了数据库、WEB、多媒体、网络、电话、影像、加解密、图形等等大部分的信息技术领域。
在这个时期Java 2还有一个重要活动就是推出SCSL(Sun社区源代码许可)许可协议。Sun公司开放源代码项目的“女1号”Danese Cooper在1999年加入公司,负责Sun(包括Java)和开放源代码社区之间的协调工作。Sun一直尽可能在赢利和开放源代码之间寻求更好的平衡。
Java的大行其道引起了Microsoft的警惕并直接导致了.Net的产生,这同时也宣布了Java作为独一无二的Internet平台地位的结束。这两个对手在较量中相互学习,现在在技术架构上的目标上已趋相同。

J2SE 1.4:快速
J2SE 1.4平台的推出发生在2002年2月13日,由于此前在Java平台和.NET平台间发生了规模浩大的孰优孰劣的论战,而论战中,Java平台最大的缺点就是性能问题,所以J2SE 1.4平台把性能的改善放在了最重要的位置。
HotSpot虚拟机:HotSpot虚拟机能够很大程度上提高性能,所以J2SE 1.4已经不支持传统的虚拟机。现在,启动应用程序应该通过-client或者-server选项来启动。
锁机制:由于旧版的HotSpot虚拟机的锁机制会导制严重的性能和功能问题,J2SE 1.4已经改写了该锁机制。
安全API:JCE、JSSE和JAAS这三大安全API从optional API移到了core API中。这样,J2SE 1.4的安全域(SecureRandom)实现可以利用操作系统提供的安全机制,以便缩短应用程序的启动时间。
RandomAccess标记接口:加入了RandomAccess标记接口,如果一个List实现了该接口,则表示它支持快速的随机访问,这样可以提高List访问的速度。
LinkedHashMap:加入了LinkedHashMap,这是一个插入排序的Map实现,但它的运行速度和HashMap一样快。
反射:很多产品中都要使用反射(Reflection)机制,但大家知道,反射是相当耗时的,所以,J2SE 1.4中重写了java.lang.reflect.Field、java.lang.reflect.Method.invoke()、java.lang.reflect.Constructor.newInstance()和Class.newInstance()等方法,使得我们利用反射也能写出高性能的应用程序。
64位计算:J2SE 1.4支持64位计算。
新的I/O API:J2SE 1.4在API层面最大的变动,就是它更新了原有的java.io包,以及加入了一组更有效率更多功能的New I/O API。
断言和日志处理:J2SE 1.4版本在Java语言层面上加入了断言(assert关键字),在API层面上加入日志处理API,这些为程序的调试提供了强有力的支持。
从上面的分析可以看出,Java 2平台在经过数年的发展后,已经比较成熟稳定,J2SE 1.4主要是对平台的性能进行较多的考虑和修改。在分布式程序方面,1.4版比1.3版的运行效率提高了一半以上;而在客户端程序方面,1.4版比1.3版的效率提高了1/3。
J2SE 1.4版是J2SE第一个参与了 Java共同体过程(JCP)的J2SE版本。 像Borland、Compaq、Fujitsu、 SAS、 Symbian、 IBM这样的公司,和Sun一起定义并发展了J2SE 1.4规范。在开放、良好的文档编撰与管理的过程中,形成了一个高质量的、代表了Java共同体的多样性的规范。

J2SE5.0:易用
在2004年十月J2SE 5.0发布的时候,Sun公司这样解释这次版本名称不是J2SE 1.5而是J2SE 5.0的原因:“从Java诞生至今已有9年时间,而从有J2SE算起也有5个年头了;在这样的背境下,将该版本号从1.5改为5.0可以更好的反映出新版的J2SE的成熟度、稳定性、可伸缩性、安全性。”
J2SE的这次变更之重大和意义之深远,的确也值得我们为之把版本号变换到J2SE 5.0。我们再看看Sun公司网站对J2SE 5.0的features描述:“通过增强Java平台的力量,允许开发者更容易地使用,Java编程语言的这些改进将吸引大量各种Java开发者”,这是“Java技术发展历程的一个重要里程碑” 。从这个描述我们可以看出,J2SE 5.0最大的目标是通过提供易用性而吸引各种开发者(当然包括以前的C/C++开发者) ,而它对以前版本的修改并不仅仅是API的升级,而且包括对Java语言层面的改进,被誉为是”自Java问世以来的最大一次语言标准变化”。
访问环境变量:最初的Java语言有一个访问环境变量的方法System.getenv(),但因为Java宣称的”Write Once,Run AnyWhere”特性,所以在JDK 1.0中去掉了这个能够访问平台专有信息的方法。在J2SE 5.0中,它又来了,并有所扩充。由此可见J2SE 5.0对编程方便性的重视程度。
泛型:J2SE 5.0提供了强大的泛型机制,让程序员可以减少代码重复,这个变化应该可以吸引小部分的C#开发人员吧。
增强的for循环:为了克服普通for循环的代码臃肿特点,J2SE 5.0提供了增强的for循环,我们现在可以这样写一个for循环:

public void printAll(Collection coll)
{
for(String str : coll)
{
System.out.println(str);
}
}

怎么样?是不是简单了很多?
自动的装箱/拆箱:
可变参数数目J2SE 5.0开始支持Varargs(不固定自变量个数),J2SE 5.0中还加
 

Java技术本纪

中国企业走近JCP
文/黄海波

对Java开发人员,JCP(Java Community Process)这个名词并不陌生。但对国内大部分Java开发人员来说,JCP更多的是一个符号,一个国际Java开发社区的象征。而对JCP这个组织的来源、组成、运作模式以及JCP对中国软件产业,甚至是我们自身工作事业的影响可能不甚了了。由于历史原因、文化语言的差异,国内Java厂商一直未能对JCP引起足够重视,从而导致国内的软件厂商无法参与到JCP的行业标准的制定过程中去,结果就使我们只能跟随制定好的标准,而不能影响标准向着有利于国内软件产业的方向发展。

跟随的劣势是很明显的,以万众期待的下一代Java持久化标准EJB 3为例。EJB 3规范目前仍在早期规范阶段,预计要到2006年中期才能完成最终版本,但EJB 3专家组中的Java厂商都已经根据讨论的初步意见开始了产品开发,有些甚至开始发布预览版本。而国内的J2EE厂商却可能要等到EJB 3的最终版才可以着手进行研究和开发(根据早期规范不可靠,变动通常很大),差距自然巨大。在其他诸如如商业智能、工作流、数据挖掘等领域都存在类似情况。

可喜的是国内软件业的Java行业组织和管理部门都已经认识到,继续徘徊在JCP的门外不利于国内Java产业的生存和发展,也和国内庞大的软件市场不相符合。在许许多多有志之士(很多是笔者的前辈,他们为国内软件业发展默默努力,实在让人钦佩)的共同努力下,JCP的中国分支也即将成立。而作为第一个尝试,中国的Java应用体验认证实验室在国家应用软件产品质量监督检验中心、Sun计算机系统(中国)有限公司、中国软件行业协会中间件分会、北京软件与信息服务业促进中心四单位共同努力下在北京成立,为中国的Java软件厂商在国内进行软件的JCP认证和兼容测试。

可以预见,在不久的将来,越来越多的中国Java厂商将能走进JCP,发挥自己的智慧,成为能影响Java产业的一支重要力量。
 

Java技术本纪

Java在中国


聚焦Sun中国


九九归一Java情
——专访Sun中国研究院院长宫力
记者/闫辉

记者:10年前您能预见到今天Java的成功局面吗?
宫力:其实,任何一个人都没有想到Java到现在会这么热。从1995年宣布叫“Java”到现在有十年,我到Sun公司有九年。JDK 1.0完成之后我就到了Sun公司。Java 1.0刚出来时,基本上是一个原型,现在的Java主要内核是以1.2为起点的,这个版本之后基本上就没有大的变化了, 而且横向地演变出Java的移动版和企业版。目前移动版是世界上新一代手机的标准平台。

记者:您当时加盟Sun公司是怎样的情况?
宫力:应该说,我进入Sun公司也是因为Java的缘故。Java出现后,尽管这个概念从计算机理论上看并不新,但他们真的实现了,所以觉得新奇,很关注。当时在和James Gosling等同行交流后,谈到我要不要过来做。对于我们这些做科研出身的人来说,有机会去亲身实现自己的理论, 是很有吸引力的。
其实,当时也根本不可能考虑到Java后来会变得这么火,有时我们组还聊起不知道Java一年后是否继续存在的话题。当时Java开发组只有几十个人,从早上一直工作到晚上11点。因为年轻人居多,还习惯中午和晚上都一起吃饭,饭后继续工作。当时整个开发组都很玩命。
当时,总的感觉是我们处在硅谷和IT世界的中心,因为经常和工业界的人开会,所有人走很远的路也要到我们这里来,因为大家都很好奇,想来看看这群人。就像现在的Google一样,大家都希望参观一下。当时,我们有很多相互之间竞争的合作伙伴,可能上午IBM过来,下午就是HP,所以我们要把黑板擦得很干净,以防无意中竞争对手之间信息泄露。

记者:您当时负责Java安全部分,能讲述一下吗?
宫力:Java刚出来的时候,宣传语是非常大的,比如跨平台、面向对象、安全等等一堆定语。其中就有一部分人会问:你所说的安全到底是什么意思?
实际上,最初Java语言在安全性方面考虑得非常不成熟,因为最早Java是为机顶盒产品设计的,而机顶盒是一个个人使用的平台,不是一个公共的计算平台,所以不存在安全的问题。但是,后来和互联网结合后,就从个人环境转变为多用户环境,这产生了很大的安全问题。所以,当别人问Java安全性的时候,开始Sun只能很随便的表示Java程序下载之后不能做哪些“坏事”,但什么是“坏事”?如何解决?都没有明确定义。同时,没有考虑服务器端的需求,设计是以PC为中心。
我去Sun之后,很大的工作和目的就是定义一个安全架构。这牵扯到平台的应用对象是谁,如何表示和控制不同的安全需求,提供怎样的安全编程模式,等等。如何能设计出一个既灵活又功能强,并且容易实现而且效率高的安全架构,不是一件容易的事。

记者:在Java开发过程中,您还有哪些印象深刻的经历?
宫力:Java出现之后,IBM非常支持,大家都开玩笑说IBM关心Java的人比Sun公司还要多,因为他们公司很大。IBM也曾对Sun表示过,说你没有多少人,我帮你做算了,Sun肯定不愿意,但在各种压力下,找到了成立JCP组织的方案。大家都有一票,这样可以实现最大程度的民主。
做完JDK 1.2版本之后,James Gosling察看了一下Java的发展速度,发现1.1比1.0的类数量增加了20%多,而1.2比1.1又增加了20%,看到这种指数级的成长速度,觉得速度过快,于是提出要控制类增加的速度。
说服手机厂商使用Java,有两个重要原因:一个是给软件移植带来方便。摩托罗拉有次参加了一个展会,第一天看到竞争对手有一个不错的应用,于是他们晚上回去之后就用Java开发,因为Java程序可以在PC机上用模拟器开发,所以速度非常快,第二天他们就拿出了同样的一个展示。另外安全性也是非常重要的,手机厂商喜欢可以扩展功能,但不要影响安全,现在J2ME的安全模式还是沿用我们最初的模式。
准备启动J2EE项目的第一次会议我也非常有幸参与了,当时叫“Java for Enterprise”。因为很多企业用户提出很多大量的需求,这与普通用户的需求是不一样的,这时就探讨如何启动一个更适合企业需求的项目。而且会议上大家还讨论如何说服Sun的高层通过这个项目。
我在JDK做了两年多,把1.2版本做完了,就去做J2ME,后来负责了JXTA,差不多前后在Java上工作了四年整。2001年初,我回国担任了Sun中国工程研究院院长。
很多人说Java作跨平台没有达到目的,但我认为Java已经被Sun做到很好了。因为在商业场合,很多规则就是这样,大家都有自己的利益,很难达到真正跨平台。而且,我们当时就考虑不需要把世界上所有C++的程序员都变成Java的程序员,只要1/2就可以了。

记者:很多人说Sun发明了Java,但Sun并没有挣到很多钱,反而其它公司利用Java挣到了钱,您是否因此而感到遗憾?
宫力:大家都说Java不挣钱,其实很挣钱。我们Java组不到100人,每年授权费超过1亿美元。而且很多公司一签就是好几年,所以大家还开玩笑说,现在即便把Java组立刻解散,什么都不做,也可以坐收大量的版权费。
不过,因为Sun本身是一个做平台出身的公司,做事情容易横向走。而且国外的公司比较单一,做平台就和上家下家都是好朋友,靠大家一起把业务做得很大,Sun公司一直就是抱着这种理念,当然也有很多公司比如IBM就抱有既合作也竞争的理念。
同时,我认为Sun在Java方面的得益是很大的,因为Java给Sun带来的无形资产远远大于其在上面的投入。这其中包括了很多间接收入,比如很多人认为Sun能够引导技术潮流,自然会购买它的产品。很多人盯着Java本身,我觉得是不全面的,这要综合来看。就像IE虽然是免费的,但对微软的意义太大了。
对我来说,能抓住这种机会感觉非常有意义。前一段时间见到了加州的一个留学出去的年轻工程师,他说:“我觉得你放弃了一些东西做Java是对的,挣钱的机会总是有的,但做一个影响全世界的产品的机会很少。”为改变世界而努力,的确是硅谷能一直带动IT领域的根本原因。


大家都来用Java淘金
Sun公司大中华区ISV业务总监 黄震

Java诞生10周年之际,作为Sun公司在中国负责与软件合作伙伴进行配合的负责人,我非常希望让中国更多的软件公司和程序员了解,Java是给软件产业带来无限价值的技术,也是为软件企业和软件人才聚集财富的技术。
Sun公司是Java技术当之无愧的导师,因为我们最了解Java的精髓。总是有很多人提出疑问:“Sun公司通过Java为整个IT产业带来了巨大的财富,甚至包括Sun公司的竞争对手都从中获得了很大的好处,可是似乎不太容易看出Sun公司从Java得到了多少好处。”我觉得,如果Java为整个世界带来的好处是100亿,Sun公司能够从中占到10%、甚至5%,我们就非常满意了。这就是Sun公司的开放心态。Java是给软件企业带来财富的技术,如果你想走入Java的世界,大门随时为你敞开,Sun公司拥有完整的方案和计划来支持你利用Java技术来赚钱。
在Sun公司的Java推广计划中,有两项计划首当其冲。
第一是Sun iForce Ready Center。这是一个知识共享体系,旨在形成共享技术的渠道分销体系,支持渠道合作伙伴实现自身的价值增值。Sun在国内总代理中建立了多家iForce Ready Center,在Sun专业开发技术人员的强有力支持下,iForce Ready Center能够为解决方案供应商提供一个完整软件解决方案移植、测试以及性能调优直至参考架构建立的优良环境,帮助合作伙伴在不影响现有应用实施的情况下将软件平滑迁移到Sun公司的新产品、新技术平台上面,并提升软件解决方案的性能。
第二是Sun JavaChina联盟。加入JavaChina联盟,不仅可以在软件开发技术培训和项目实践方面获得直接、有效的帮助,积累更多的实践经验,而且可以通过Sun公司推出的一系列市场推广活动获得更多的商机。Sun JavaChina联盟计划中包括两个方面的内容:一方面是一系列的技术培训;另一方面是严谨的逐级认证。
身为Sun公司在中国负责向ISV合作伙伴推广Java技术的负责人,我衷心希望有更多的软件公司和软件人才加入到Java这个大家庭中来,一起快乐地创造财富。
最新调查


最新调查


Java十大热点问题揭晓

值此Java十年之际,很多网站和社区都对Java开发人员及相关爱好者进行了调查与访问,下面列出十大热点问题调查结果。人们发现,开发者对于Java存在着各种各样的看法。下面列出有代表性的网友观点。


1.你是如何开始用Java编程的?
● 我在Java一出现的时候就开始使用它进行编程。我为它的‘一次编写,到处运行’的理念以及Applet感到激动。
● 我在Java出1.0版本之前就开始学习它,因为我期望它能作为微软产品(我对VB和Visual C++太失望了)和Pascal的替代品。
● 我曾经把Java手册作为休假时的阅读材料,结果被它所吸引,转而使用Java而放弃C++,并且永不回头。
● 我所在的大学一直都在教C++课程,但我却用了很多时间自学Java,因为想用它找一份更好的工作。
2.Java曾经承诺“一次编写/到处运行(WORA—Write Once, Run Anywhere)”,你认为它兑现这个承诺了吗?时至今日,你认为“一次编写/到处运行”的重要性发生改变了吗?
● 应用程序服务器和J2EE应用程序能够在不同的平台之间很好地进行迁移。我对WORA(Write Once, Run Anywhere)在客户端的效果表示怀疑,并且我觉得这些其实是不可能真正地达到的。
● 它让我完全不用考虑使用哪种平台。
● Java的早期成功应该归功于WORA。它为系统集成商、独立软件商、软件设计师带来不同的根本性的经济利益,这点胜于其他语言。
● WORA每时每刻都
 

Java技术本纪

Java在中国这样走过
文/林芷薰


把时钟拨回到10年前,在上世纪的最后10年里,中国的软件开发技术与国际水平大概保持着两到三年的“时间差”。1998年,当Sun公司紧锣密鼓地准备推出Java 2、并将Java的标准化工作移交给JCP组织时,我们中的大多数人才刚刚开始接触Java 1.1。说实话,那时候学习Java的同行很少有人能够预料到,这种看似玩具的编程语言有一天会热门到如此程度。
说起来,我们应该感谢Bruce Eckel的《Thinking in Java》,不仅因为这是一本优秀的Java入门书籍,而且因为这是一本代表着国际主流技术水准的好书。虽然拙劣的翻译让不少读者对它恨之入骨,但毕竟是从这本书开始,我们中的大多数人第一次有了这样一种感觉:全世界的程序员都是这样在用Java编程。世界上流行的先进技术对于我们来说也不再是可望而不可及的。
进入21世纪以来,随着大型企业/政府应用的增加,Java(准确地说,是J2EE)开始在中国逐渐风行。在大概两年多的时间里,众多的软件开发商走过了“纯JSP—自主开发框架—JSP+Struts+EJB”的宿命历程。到2003年前后,已经有相当一批公司积累了丰富的采用EJB和Struts框架开发Web应用的经验。这时国内的J2EE技术水准可以说已经基本赶上国际潮流了。
2003年,在Java世界有两件新兴事物开始流行起来,其一是号称“轻量级J2EE应用框架”的Spring,其二是基于POJO的O/R映射框架Hibernate。这两个框架的先后出现几乎是天作之合,以Rod Johnson为代表的一群J2EE架构师立即意识到:有了这两个框架的帮助,我们就不再需要EJB——它们可以做得比EJB更好。这一次,国内的架构师们显得更加敏锐——很大程度上应该归功于TheServerSide网站的存在。
时至今日,中国的Java技术几乎可以说是步步紧跟世界潮流:众多遭遇到EJB种种难题的企业很快地迁移到基于Spring和Hibernate/JDO的轻量级架构上,国内甚至已经出现了专门提供Spring/Hibernate技术培训/咨询/顾问服务的公司;AOP刚刚在Rickard Oberg的blog里热闹了几个月,一些步伐较快的团队就已经将其用在自己的项目中;AJAX才在国外网站上冒出头,国内竟然已经有不少实际用类似于AJAX的思想开发的项目,并且早已有人自主开发了AJAX实现框架;JSR-168、JSR-170等重要规范的发布都会第一时间引起国内技术专家的关注;在EJB、JDO等规范专家组里也出现了中国人的身影。
近来国内J2EE技术社群的活跃固然和整个行业的氛围有关,但有两个网站功不可没。其一是“Java视线”(www.javaeye.com),这个管理严格的论坛吸引了一批站在技术前沿的架构师/程序员发表言论观点;其二是CSDN网站Java频道(java.csdn.net),这里汇集了整个Java世界最新的技术动态和产品发布信息,成为国内技术领袖们不可或缺的信息源头。
在刚刚召开的JavaOne 2005大会上,Sun公司宣布将放弃Java名称中的“2”字:从1998年开始就被叫做“J2EE”的Java企业版,今后将改名为Java EE。不过,不管名字怎么变,Java还是那个Java,已经习惯了弄潮于技术潮头的中国Java人面对即将到来的Java 5.0、6.0,早已做好了准备。


本刊寄语

Java : 软件技术史上马拉多纳式的传奇

策划本期专题的时候,世青赛正在荷兰上演,一张张年轻的面庞让人不由得想起1979年的马拉多纳。马拉多纳少年成名,一路意气风发,在万众瞩目中成就霸业,他的传奇让其他任何人的精彩故事都显得平淡无奇。然而,并不是所有的少年天才都能像他那样备受上帝的宠爱,像中国的李华筠一样,更多的新星没能走完成功之路,夭折在半途。
其实一部软件技术的发展史又何尝不是如此!Lisp、Smalltalk、PL/1、OS/2、Ada……,多少天才的杰作和曾经被一致看好的技术最后被挤压在历史的角落里,徒使英雄泪满襟。10年前当Java问世的时候,俨然一颗超新星的模样,但当时有谁能够预言它未来的命运?10年来Java用自己的一路高歌猛进成就了软件技术史上的一个马拉多纳式的传奇。我们当然不满足于一个简单的情绪,而是希望通过本期专题与读者一起回顾Java十年来的发展历程,分析它的成功与不足,就算是为这十年的传奇做一个小结吧。当然,我们坚信,Java的传奇还会继续。希望到Java 20岁生日的时候,会有更多的人聚在一起来庆祝一个更大的传奇。
 
1  /  1  页   1 跳转

版权所有 IACMall工业自动化(中国)商城--论坛  IACMall工业自动化(中国)商城  Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2009 Comsenz Inc.
Processed in 0.109375 second(s) , 3 queries. 闽ICP备07073127号
返顶部