简单了解java历史

Posted 小蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单了解java历史相关的知识,希望对你有一定的参考价值。

计算机硬件发展的同时,软件始终伴随其步伐迅猛发展,就计算机的编程语言而言,也划分为三代。
第一代:机器语言。每条指令用二进制编码,编码效率极低,但运行效率高。
第二代:汇编语言。用符号编程,和具体机器指令有关,需要记住的指令太多,编写效率低下。
第三代:高级语言:如FORTRAN、COBOL、BASIC、PASCAL等都属于高级语言,采用近似自然语言进行编写,编写效率高,易于人阅读和维护,最终都会被编译成二进制执行。

计算机中的摩尔定律:
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度 。尽管这种趋势已经持续了超过半个世纪,摩尔定律仍应该被认为是观测或推测,而不是一个物理或自然法。

一图解释java的执行过程

java发展史:
1991年4月,Sun公司的James Gosling领导的Java语言开发小组成立,并开始着力绿色计划(Green Project)的发展,Green Project是一种分布式系统结构,其目的是使其能够在各种消费性电子产品上运行,开拓消费类电子产品市场,例如:交互式电视,烤面包箱等。而Green项目组的成员一开始使用C++语言来完成这个项目,由于reen项目组的成员都具有C++背景,所以他们首先把目光锁定了C++编译器,但很快他就感到C++的很多不足,Gosling首先改写了C++编译器,认识到需要研发一种新的语言来替代它。当时James Gosling,41岁。于1984年加盟Sun Microsystem公司,以前在一家IBM研究机构工作。他是Sun NeWs窗口系统的总设计师,虽然当时NeWs在技术上非常成功,但在商业上却完全失败。 Gosling是一位非常杰出的程序员,GOSMACS也是Gosling写的,它是第一个用C实现的EMACS的文本编辑器。 在研究开发过程中,Gosling 深刻体会到消费类电子产品和工作站产品的开发哲学之间的差异:消费类电子产品要求高可靠、费用低、标准化、 搜索使用简单,而工作站用户要求强大的计算能力,而不在此乎价格以及操作的复杂性。消费类电子产品用户并不关心CPU的型号,也不欣赏专用昂 贵的RISC处理器,他们需要建立在一个标准基础之上,一系列可选的方案,从8086-80586都可以上。 从C开始为了使整个系统与平台无关,Gosling首先从改写C 编译器着手。但是Gosling在改写过程中感到仅C是无法满足需要的,于是在1991年6月份开始准备开发一个新的语言,那么给它起一个什么名字呢? Gosling回首向窗外望去,看见一棵老橡树,于是建一个目录叫Oak,这 就是Java语言的前身。后来发现Oak已是Sun公司的另一个语言的注册商标,才改名为Java,即爪哇,太平洋上一个盛产咖啡的岛屿的名字,也寓意能为世界各位带来一杯热咖啡。 Gosling在开始写Java时,并不局限于扩充语言机制本身,更注重于语言所运行软硬件环境,他要建立一个系统,这个系统运行于一个巨大的、 分布的、异质的网络环境中,完成各电子设备之间的通讯与协同工作。Gosling在设计中采用了虚机器码(Virtual Machine Code)方式。即Java 语言编译后产生的是虚机器码,虚机器码运行在一个解释器上,每一个操作系统均有一个解释器,这样一来,Java就成了平台无关语言。这和 Gosling设计的Sun NeWs窗口系统有着相同的技术味道,在NeWs中用户界面统一用Postscript描述,不同的显示器有不同的Postscript解释器,这样便保证了用户界面的良好的可移植性。 当Patrick Naughton加入该小组后,整个工作进展神速。Naughton也是Sun公司的技术骨干,曾经是Open Windows的项目的负责人。在17 个月后,整个系统完成了,这个系统是更注重机顶盒式的操作系统,不过在当时市场不成熟的情况下,他们的项目没有获得成功,但Java语言却得到了Sun总裁McNealy的赏识。接着,Java项目的工作人员开始做应用规划,着手成立一家公司,从事消费类电子产品的开发,这家公司就是FirstPerson Inc.。公司的第一个项目就是Time-Warner的投标项目,顶置盒式操作系统和请求式电视技术。虽然FirstPerson Inc.在技术毫不逊色于任何公司,但是由于经营策略上的失误,败给了SGI。FirstPerson一直到1994年初仍在坚持开发专用的顶置盒式操作系统,但实践证明,这个市场尚未成熟。例如:好几家交互式有线电视网的实验都以失败告终。Naughton立即认识到研究方向应该转移。在Naughton的努力下,研究开始向在线服务CD-ROM和基于网络的台式机方向转移。最后FirstPerson搜索解散,一部分人去了Sun Interactive开发数字视频数据服务器,而另一部分开始把Java用于基于网络的台式机系统。

在1995年Sun虽然推出了Java,但这只是一种语言,而要想开发复杂的应用程序,必须要有一个的强大的开发库支持才行。因此,Sun在1996年1月23日发布了JDK1.0。这个版本包括了两部分:运行环境(即JRE)和开发环境(即JDK)。在运行环境中包括了核心API、集成API,用户界面API,发布技术,Java虚拟机(JVM)五个部分。而开发环境还包括了编译Java程序的编译器(即javac)。在JDK1.0时代,JDK除了AWT(一种用于开发图形用户界面的API)外,其它的库并不完整。

Sun在推出JDK1.0后,紧跟着,Sun在1997年2月18日发布了JDK1.1。JDK1.1相对于JDK1.0最大的改进就是为JVM增加了JIT(即时编译)编译器。JIT和传统的编译器不同,传统的编译器是编译一条,运行完后再将其扔掉,而JIT会将经常用到的指令保存在内容中,在下次调用时就不需要再编译了。这样JDK在效率上有了非常大的提升。Sun在推出JDK1.1后,接着又推出了数个JDK1.x版本。虽然在1998年之前,Java被众多的软件企业所采用,但由于当时硬件环境和JVM的技术原因,它的应用却很有限。当时Java主要只使用在前端的Applet以及一些移动设备中。然而这并不等于Java的应用只限于这些领域。在1998年是Java开始迅猛发展的一年。在这一年中Sun发布了JSP/Servlet、EJB规范以及将Java分成了J2EE、J2SE和J2ME。标志着Java已经吹响了向企业、桌面和移动3个领域进军的号角。      

Java的版本发布历史:

1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第一次提出了“Write Once,Run Anywhere”的口号。

1996年1月23日,第一个JDK-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技术来制作。同年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)都是在这个时候出现的。

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年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(切尔西,城市名)。

在1999年3月和7月,分别有JDK 1.2.1和JDK 1.2.2两个小版本发布。
不仅如此,JDK1.2还把它的API分成了三类。
核心API:由Sun公司制定的基本的API,所有的Java平台都应该提供。这就是平常所说的Java核心类库。
可选API:这是Sun为JDK提供的扩充API,这些API因平台的不同而不同。
特殊API:用于满足特殊要求的API。如用于JCA和JCE等第三方加密类库。

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转换器等。

2002年前后还发生了一件与Java没有直接关系,但事实上对Java的发展进程影响很大的事件,那就是微软公司的.NET Framework发布了。这个无论是技术实现上还是目标用户上都与Java有很多相近之处的技术平台给Java带来了很多讨论、比较和竞争,.NET平台和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指令集架构类型。

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虚拟机技术将会产生相当巨大的变化。

2011年7月28日,Oracle公司发布Java SE 1.7
2014年3月18日,Oracle公司发布Java SE 1.8
......

目前主流的是java se 1.8。
此篇博文由网上资料整理而来,仅供学习了解使用。
学海无涯。
参考博文:
(1) https://www.cnblogs.com/Diyo/p/11079006.html
(2) https://www.cnblogs.com/CodeMagicMaster/p/8064077.html
(3) http://c.biancheng.net/view/2816.html (语言教程,可以参考学习一下)
(4) https://www.cnblogs.com/superyonng/p/11683960.html
(5) https://www.cnblogs.com/zhuisuiwangxiaobo/p/7308106.html
(6) http://www.doc88.com/p-3438479486446.html (非常的全面)

以上是关于简单了解java历史的主要内容,如果未能解决你的问题,请参考以下文章

java常用开发工具介绍

用了这么多年的 Java 泛型,你对它到底有多了解?

逆向映射的演进

你必须了解的「架构」小历史

逆向映射的演进

Java是什么?只需5分钟,了解java必须要懂的知识点