JAVA语言——发展简史

Posted by 冷眼樵夫 on 12-19,2018

首先我们简单介绍一下Java的由来以及发展简史,这些内容仅仅是作为Java编程学习的一个开篇罢了。跳过这部分内容,对你学习Java编程是不会有任何负面影响的。如果对Java的一些相关历史“八卦”感兴趣的话,可以作为消遣的资料来读一读,加入没什么兴趣,完全可以跳过去看接下来的内容了。

Java语言是由Sun公司设计发明,基础源自于C++语言。时间要追溯到1991年,Sun公司准备设计一个新的编程工具,这个项目由Patrick Naughton、Mike Sridan以及后来对Java的发明产生决定作用的人物——加拿大人James Gosling,这个前IBM工程师组成。据说当时小组成员都对C++语言非常熟悉,同时也希望吸引当时数量庞大的C++程序员族群,由此决定选择以C++语言为基础,来设计发明一种新的语言。所以Java在很多方面是和C++非常相似的,事实上很多Java领域的“大牛”们,也同时是C++领域举足轻重的人物(比如Java编程思想的作者bruce eckel),C++程序员也可以非常容易的转为Java程序员。Gosling在Java的发明过程中的决定性作用,也为他赢得了Java之父的称号。

如果你对Java略有了解的话,就知道现今Java在大型企业服务领域占有者统治级的地位,主要为企业级软件开发提供技术平台,但是和当初Java设计的初衷比较起来确实南辕北辙。Sun公司发明Java的原本目的是期望引发数控消费电子设备和计算机方面的巨潮,为数控消费电子设备的软件开发提供一个新的可选择的技术平台。并且在1992年夏天,一个演示产品终于浮出水面—一一个手持家庭娱乐设备遥控器,它有一个触摸屏,以动画作为交互方式。日后大名鼎鼎的Java吉祥物Duke在这个展示品中首次出现,它向人们挥手致意并翻着筋斗。设备命名为*7(Star 7),源于绿色小组的办公电话系统拥有的一个功能——可以从任何外设来应答你的电话。

在这里,Duke实际上 是7的一个代表——一个可以为用户做事情的软件。而7能够控制很多娱乐平台及设备,原因就是这台设备运行在一种全新且独立于处理器的计算机语言上,这在当时可是一个了不起的成就,这是第一个独立于处理器的计算机语言,就是我们要学习的Java语言,不过那时候它还不叫Java,它的名字叫做“Oak”——据说源自一棵伫立在Gosling窗外的橡树。

但是尽管Java,嗯,应该叫Oak,看起来是那么先进优秀,但是在商业市场方面的推广确实不尽如人意。它的发展遇到了瓶颈。也许是命中注定Java注定要在软件领域历史上留下浓重的一笔,它并没有像很多别的计算机语言一样消失,而是在一个历史契机中打了一个漂亮的翻身仗,一举奠定了在计算机语言中的霸主地位,甚至把它的“生身父亲”C++挤下了当时的龙头宝座。

这个历史契机就是互联网热的到来。不错,上世纪九十年代初,互联网热的兴起,对软件的研发模式带来新的要求和挑战。Java研发小组也决定将目光放在了互联网上。当时看起来是那样的巧合,当初Java设计的种种特性,仿佛就是依照互联网的模式、对计算机编程语言的要求来设计的,是那样的贴合。很快的,Java项目组在当时风头正劲的Mosaic浏览器基础上完成了一个基于Java技术的浏览器“WebRunner”,它也就是后来为我们所熟知的HotJava浏览器的前身。虽然这个产品还只是处于Demo版,但是,它的出现已经给人留下了深刻的印象:通过applet,它第一次给人实现了可动的网页(不要感到疑惑,当时的互联网可没有现在这样丰富多彩。互联网的各个网站只是一些静态HTML文档的集合罢了,根本没有什么与用户交互的功能设计)。回顾一下Java的发展轨迹和历史变迁:

  1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(橡树)。Oak当时在消费品市场上并不算成功,但随着1995年互联网潮流的兴起,Oak迅速找到了最适合自己发展的市场定位并蜕变成为Java语言。

  1995年5月23日,Oak语言改名为Java, Sun科技部主管John Gage 和Netscape创始人及副执行官Marc Andressen 登上讲坛向Sunworld 的听众宣布Java技术正式诞生,正式发布Java 1.0版本,并将其纳入Netscape Navigator这个互联网导航器。当时整个Java技术团队(仍未独立)人数不超过30人,正是这个最初的小团队创造并哺育了这一将改变计算机领域的伟大技术。Java语言第一次提出了“Write Once,Run Anywhere”的口号。

  1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的代表技术包括:Java虚拟机、Applet、AWT等。

  1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入Java技术。同年9月,已有大约8.3万个网页应用了Java技术来制作。在1996年5月底,Sun公司于美国旧金山举行了首届JavaOne大会,从此JavaOne成为全世界数百万Java语言开发者每年一度的技术盛会。

  1997年2月19日,Sun公司发布了JDK 1.1,Java技术的一些最基础的支撑点(如JDBC等)都是在JDK 1.1版本中发布的,JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。

  直到1999年4月8日,JDK 1.1一共发布了1.1.0~1.1.8九个版本。从1.1.4之后,每个JDK版本都有一个自己的名字(工程代号),分别为:JDK 1.1.4 - Sparkler(宝石)、JDK 1.1.5 - Pumpkin(南瓜)、JDK 1.1.6 - Abigail(阿比盖尔,女子名)、JDK 1.1.7 - Brutus(布鲁图,古罗马政治家和将军)和JDK 1.1.8 – Chelsea(切尔西,城市名)。

  1998年12月4日,JDK迎来了一个里程碑式的版本JDK 1.2,工程代号为Playground(竞技场),Sun在这个版本中把Java技术体系拆分为3个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform, Standard Edition)、面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。在这个版本中出现的代表性技术非常多,如EJB、Java Plug-in、Java IDL、Swing等,并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)编译器(JDK 1.2中曾并存过3个虚拟机,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平台出现过;后面两个虚拟机都是内置JIT编译器的,而之前版本所带的Classic VM只能以外挂的形式使用JIT编译器)。在语言和API级别上,Java添加了strictfp关键字与现在Java编码之中极为常用的一系列Collections集合类。

  在1999年3月和7月,分别有JDK 1.2.1和JDK 1.2.2两个小版本发布。

  1999年4月27日,HotSpot虚拟机发布,HotSpot最初由一家名为“Longview Technologies”的小公司开发,因为HotSpot的优异表现,这家公司在1997年被Sun公司收购了。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的Sun JDK的默认虚拟机。

  2000年5月8日,工程代号为Kestrel(美洲红隼)的JDK 1.3发布,JDK 1.3相对于JDK 1.2的改进主要表现在一些类库上(如数学运算和新的Timer API等),JNDI服务从JDK 1.3开始被作为一项平台级服务提供(以前JNDI仅仅是一项扩展),使用CORBA IIOP来实现RMI的通信协议,等等。这个版本还对Java 2D做了很多改进,提供了大量新的Java 2D API,并且新添加了JavaSound类库。JDK 1.3有1个修正版本JDK 1.3.1,工程代号为Ladybird(瓢虫),于2001年5月17日发布。

  自从JDK 1.3开始,Sun维持了一个习惯:大约每隔两年发布一个JDK的主版本,以动物命名,期间发布的各个修正版本则以昆虫作为工程名称。

  2002年2月13日,JDK 1.4发布,工程代号为Merlin(灰背隼)。JDK 1.4是Java真正走向成熟的一个版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有参与甚至实现自己独立的JDK 1.4。哪怕是在十多年后的今天,仍然有许多主流应用(Spring、Hibernate、Struts等)能直接运行在JDK 1.4之上,或者继续发布能运行在JDK 1.4上的版本。JDK 1.4同样发布了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器等。

  JDK 1.4有两个后续修正版:

  2002年9月16日发布的工程代号为Grasshopper(蚱蜢)的JDK 1.4.1

  2003年6月26日发布的工程代号为Mantis(螳螂)的JDK 1.4.2。

  2002年前后还发生了一件与Java没有直接关系,但事实上对Java的发展进程影响很大的事件,那就是微软公司的.NET Framework发布了。这个无论是技术实现上还是目标用户上都与Java有很多相近之处的技术平台给Java带来了很多讨论、比较和竞争,.NET平台和Java平台之间声势浩大的孰优孰劣的论战到目前为止都在继续。

  2004年9月30日,JDK 1.5发布,工程代号Tiger(老虎)。从JDK 1.2以来,Java在语法层面上的变换一直很小,而JDK 1.5在Java语法易用性上做出了非常大的改进。例如,自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 1.5中加入的。在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包等。另外,JDK 1.5是官方声明可以支持Windows 9x平台的最后一个JDK版本。

  2006年12月11日,JDK 1.6发布,工程代号Mustang(野马)。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、J2ME的命名方式,启用Java SE 6、Java EE 6、Java ME 6的命名方式。JDK 1.6的改进包括:提供动态语言支持(通过内置Mozilla Java Rhino引擎实现)、提供编译API和微型HTTP服务器API等。同时,这个版本对Java虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有相当多的改动。

  在2006年11月13日的JavaOne大会上,Sun公司宣布最终会将Java开源,并在随后的一年多时间内,陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码大多是Sun本身也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的全部代码,OpenJDK的质量主管曾经表示,在JDK 1.7中,Sun JDK和OpenJDK除了代码文件头的版权注释之外,代码基本上完全一样,所以OpenJDK 7与Sun JDK 1.7本质上就是同一套代码库开发的产品。

  JDK 1.6发布以后,由于代码复杂性的增加、JDK开源、开发JavaFX、经济危机及Sun收购案等原因,Sun在JDK发展以外的事情上耗费了很多资源,JDK的更新没有再维持两年发布一个主版本的发展速度。JDK 1.6到目前为止一共发布了37个Update版本,最新的版本为Java SE 6 Update 37,于2012年10月16日发布。

  2009年2月19日,工程代号为Dolphin(海豚)的JDK 1.7完成了其第一个里程碑版本。根据JDK 1.7的功能规划,一共设置了10个里程碑。最后一个里程碑版本原计划于2010年9月9日结束,但由于各种原因,JDK 1.7最终无法按计划完成。

  从JDK 1.7最开始的功能规划来看,它本应是一个包含许多重要改进的JDK版本,其中的Lambda项目(Lambda表达式、函数式编程)、Jigsaw项目(虚拟机模块化支持)、动态语言支持、GarbageFirst收集器和Coin项目(语言细节进化)等子项目对于Java业界都会产生深远的影响。在JDK 1.7开发期间,Sun公司由于相继在技术竞争和商业竞争中都陷入泥潭,公司的股票市值跌至仅有高峰时期的3%,已无力推动JDK 1.7的研发工作按正常计划进行。为了尽快结束JDK 1.7长期“跳票”的问题,Oracle公司收购Sun公司后不久便宣布将实行“B计划”,大幅裁剪了JDK 1.7预定目标,以便保证JDK 1.7的正式版能够于2011年7月28日准时发布。“B计划”把不能按时完成的Lambda项目、Jigsaw项目和Coin项目的部分改进延迟到JDK 1.8之中。最终,JDK 1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处于Experimental状态,直至2012年4月的Update 4中才正式“转正”)、加强对非Java语言的调用支持(JSR-292,这项特性到目前为止依然没有完全实现定型)、升级类加载架构等。

  到目前为止,JDK 1.7已经发布了9个Update版本,最新的Java SE 7 Update 9于2012年10月16日发布。从Java SE 7 Update 4起,Oracle开始支持Mac OS X操作系统,并在Update 6中达到完全支持的程度,同时,在Update 6中还对ARM指令集架构提供了支持。至此,官方提供的JDK可以运行于Windows(不含Windows 9x)、Linux、Solaris和Mac OS平台上,支持ARM、x86、x64和Sparc指令集架构类型。

  匆匆十几年过去了,Java也从最初的最初的丑小鸭,长成了今天的的白天鹅。Java已经不是单纯的编程语言,它已经发展成了 “一种计算语言、一个平台、一个网络计算的架构(Sun首席执行官:Mac)” 。而且虽然Sun是Java语言的发明者,也是所有者,但是Java从来不是Sun公司一个人在战斗,JCP(Java Community Process)组织中的各大IT厂商在其中的努力不比Sun要少,比如Oracle、IBM、BEA,还有Apache社区,没有他们,Java也不可能有今天如此辉煌的成就。比如如今大家非常常见的Java开发工具Eclipse(虽然现在idea更受欢迎),就是IBM公司向开源社区捐助的。

  2009年4月20日,Oracle公司宣布正式以74亿美元的价格收购Sun公司,Java商标从此正式归Oracle所有(Java语言本身并不属于哪间公司所有,它由JCP组织进行管理,尽管JCP主要是由Sun公司或者说Oracle公司所领导的)。由于此前Oracle公司已经收购了另外一家大型的中间件企业BEA公司,在完成对Sun公司的收购之后,Oracle公司分别从BEA和Sun中取得了目前三大商业虚拟机的其中两个:JRockit和HotSpot,Oracle公司宣布在未来1~2年的时间内,将把这两个优秀的虚拟机互相取长补短,最终合二为一。可以预见在不久的将来,Java虚拟机技术将会产生相当巨大的变化。可以肯定的是,Java在软件领域的统治地位短时间内不会发生改变,它依旧是众多编程技术平台中的No.1。

  2011年7月28日,Oracle公司发布Java SE 1.7

  2014年3月18日,Oracle公司发表Java SE 1.8

  Java编程语言的句法与C++的句法相似,语义则与SmallTalk的语义相似。Java编程语言可被用来创建任何常规编程语言所能创建的应用程序。现在在大中型软件系统中,Java语言占据着半壁江山。虽然这么多年来,Java也曝露出种种的问题和弊端,却也在不断完善,尤其是springboot面世之后,但它的种种语言技术特性,决定着在今后软件编程应用中,它的地位依旧稳固。

相信java没错的!


0评论