编程语言的发展
机器语言->汇编语言-> 面向过程语言 ->面向对象语言
java 诞生
sun公司在1991年创立一个开发小组,目的是开拓消费类电子产品市场,例如:交互式电视,烤面包箱等。James Gosling是领导者,最初是想修改和扩展C 的功能,很多成员发现C 太复杂以至很多开发者经常错误使用。他们发现C 缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。后来放弃了C,创造了新的语言,命名为oak。
oak完成后,推向市场,但是以失败而告终,市场尚未成熟。1994年,转移研究方向,将oak应用于万维网,伴随www兴起,借助oak开发一款浏览器。同年,发现oak商标已经被注册了,因此改名java。
java 版本发布
1995年5月23日,Java语言诞生;第一次公开发布是在SunWorld大会上进行的。
1996年1月3日,第一个JDK1.0诞生;Java语言有了第个正式版本的运行环境。 JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Cassic VM). JDK 1.0版本的代表技术包括,Java虚拟机、Applet. AWT等。
1997年2月18日,JDK1.1发布,Java技术的一些最基础的支撑点(如JDBD等)都是在JDK1.1版本中发布的,JDK1.1版的技术代表有:JAR文件格式,JDBC,JavaBeans,RMI。Java语法也有了一定的发展,如内部类(Inner Class)和反射(Reflection)都是在这个时候出现的。
1998年12月4日,JDK迎来了一个里程碑式的版本JDK1.2,工程代号为Playground(这可不是操场,而是竞技场),Sun在这个版本中把Java技术体系拆分为三个方向,分别是面向桌面应用开发的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)编译器(JDK1.2中曾并存过三个虚拟机,Classic VM,HotSpot VM和Exact VM,其中Exact VM只在Solaris平台出现过:后面两个虚拟机都是内置JIT编译器的,而之前版本所带的Classic VM只能以外挂的形式使用JIT编译器)。在语言和API级别上,Java添加lstrictfp关键字与现在Java编码之中极为常用的一系列Collection集合类。
2000年5月8日,工程代号为Kestrel(美洲红隼)的JDK1.3发布,JDK1.3相对于JDK1.2的改进主要表现在一些类库上(如数学运算和新的Timer API等),JNDI服务从JDK1.3开始最为一项平台及服务提供(以前JNDI仅仅是一项扩展),使用CORBA IIOP来实现RMI的通讯协议,等等。这个版本还对Java 2D做了很多改进,提供了大量新的Java 2D API,并且新添加了JavaSound类库。JDK1.3有一个修正版本JDK1.3.1,工程代号为(Ladybird)瓢虫,与2001年5月17日发布。自从JDK1.3开始,Sum维持了一个习惯:大约每隔两年发布一个JDK的主版本,以动物命名,期间发布的各个修正版本则以是虫作为工程名称。
2002年2月13日,JDK 1.4发布,工程代号为Merlin (灰背集)。JDK 1.4是Java真正走向成熟的一个版本。JDK 1.4同样发布了很多新的技术特性,如正则表达式、异常链、NIO、 日志类、XML解析器和XSLT转换器等。2002年前后还发生了一件与Java没有直接关系,但事实上对Java的发展进程影响很大的事件,那就是微软公间的NET Famework发布了,这个无论是技术实现上还是目标用户上都与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的内存模型(JavaMemory Model, JMM). 提供了java util concurrent井发包等。另外,JDK 1.5是官方声明可以支持Windows 9%平台的最后一个JDK版本。
2006年12月11日,JDK 1.6发布,工程代号Mustang (野马)。在这个版本中,Sun终结了从JDK 1.2开始已经有8年历史的J2EE、J2SE、 J2ME的命名方式,启用Java SE。JavaEE6. Java ME 6的命名方式。JDK 1.6的改进包括:提供动志语言支持(通过内置Morilla JavaScript Rhino引擎实现)、提供编译API和微型HTTP服务器API等。同时,这个版本对Java虚拟机内部做了大量改进,包括锁与同步、 垃圾收集、类加载等方面的算法都有相当多的改动。在2006年11月3日的JavaOne大会上,Sun公司宣布最终会将Java开源,并在随后的一年多时间里,陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code这部分代码大多是Sun本身也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的全部代码,OpenJDK的质量主管曾经表示,在JDK1.7中,Sun JDK和OpenJDK除了代码文件头的版权注释外,代码基本完全一样,所以OpenJDK7与Sun JDK1.7本质上就是同一套代码库开发的产品。JDK1.6发布以后,由于代码复杂性的增加,JDK开源,开发JavaFX,经济危机及Sun收购案等原因,Sun在JDK发展以外的事情上耗费了很多资源,JDK的更新没有在维持两年发布一个主版本的发展速度。JDK1.6到目前为止一共发布了37个Update版本,最新的版本为Java SE 6 Update 37,与2012年10月16日发布。
2009年2月19日,工程代号为Dolphin(海豚)的JDK1.7完成了其第一个里程碑版本,根据JDK1.7的功能规划,一共设置了10个里程碑,最后一个里程碑版本原计划于2010年9月9日结束,但由于各种原因,JDK1.7最终无法按计划完成。从JDK1.7最开始的功能规划来看,它本应是一个包含许多重要改进的JDK版本,其中的Lambda项目(Lamabda表达式,函数式编程),Jigsaw项目(虚拟机模块化支持),动态语言支持。GarbageFirst收集器和Coin项目(语言细节进化)等子项目对于Java业界都会产生深远的影响。在JDK1.7开发期间,Sun公司由于相继在技术竞争和商业竞争中都陷入泥潭,公司的股票市值跌至仅有高峰期的3%,已无力推动JDK1.7的研发工作按正常计划进行。为了尽快结束JDK1.7长期“跳票”问题,Oracle公司收购Sun公司后不久便宣布将实行“B计划”,大幅裁剪JDK1.7预定目标,以便保证JDK1.7的正式版能够于2011年7月28日准时发布。“B计划”把不能按时完成的Lambda项目,Jigsaw项目和Coin项目的部分改进延迟到JDK1.8之中。最终,JDK1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处于Experimental状态,直至2012年4月的Update 4中才正式“转正”),加强对非Java语言的调用支持(JSR-292,这项特性到目前为止依然没有完全实现定型),升级类加载架构等。 到目前为止,JDK1.7已经发布了9个Update版本,最新的Java SE 7 Update 9于2012年10月16日发布。从Java SE 7 Update 4起,Oracle开始支持Mac OS X操作系统,并在Update 6中达到完全支持的程度,同时,在Updane 6中还对ARM指令集架构提供了支持,至此,官方提供的JDK可以运行于Windows (不言Windous 9X)、Linux ,Solaris 和Mac OS平台上,支持ARM、x86. x64和Sparc指令集架构类型。2009年4月20日,Oracle 公司宣布正式以74亿美元的价格收购Sum公司,Java商标从此正式妇Oracle所有(Java语言本身并不属于哪间公司所有,它由JCP组织进行管理。尽管JCP主要是由Sun公司或者说Oracle公司所领导的)。由于此前Orasle公司已经收购了另外一家大型的中同件企业 BEA公司,在完成对Sun公司的收购之后,Oracle 公司分别从BEA和Sun中取得了目前三大商业虚报机的其中两个: JRockit 和HosSpot. Oracle公司宣布在未来1~2年的时间内,将把这两个优秀的虚报机互相取长补短,最终合二为一。可以预见在不久的将来,Java 虚拟机技术将会产生相当巨大的变化。
2014年3月, JDK 8(Spider(蜘蛛))的第一个正式版本发布,支持 lambda支持;增强日期与时间API的功能;对垃圾回收的性能也进行了改进;并且移除了permgen区;Lambdas表达式与Functional接口接口的默认与静态方法方法引用;重复注解;更好的类型推测机制;扩展注解的支持等。
2017年9月21日 Java SE 9 发布,代表性技术包括:Java 平台级模块系统,Linking,JShell (交互式 Java REPL),改进的 Javadoc,改进的 Stream API,集合工厂方法,私有接口方法,HTTP/2,多版本兼容 JAR。同年,有个重要改变,Java当前的发布周期为两年一次,Java 9因为模块化系统(Jigsaw)问题一再延期,已经比预期晚了18个月。之前,Java 8也因为安全问题延期了8个月左右。为了避免出现像Java 8和Java 9那样的延期情况,所有决定实行新的发布周期。新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。新的发布周期旨在避免未完成的里程碑特性(比如Java 8的Lambda或Java 9的模块化系统)造成发布延期,让其他一些有用的特性也无法与开发者见面。除了新的发布周期,Oracle将会继续每个季度发布更新版本,时间分别为1月份、4月份、7月份和10月份。也就是说,在下一个大版本发布之前,当前版本都会有两个更新版本。更新版本只包含安全问题修复或回归错误的修复。
2018年3月14日 Java SE 10 发布,过渡版本,官网已不提供下载
2018年9月 Java SE 11 长期支持版发布。新的长期支持版本每三年发布一次,根据后续的发布计划,下一个长期支持版 Java 17 将于2021年发布。
2019年3月 Java SE 12 过渡版发布
2019年9月 Java SE 版本发布,此版本并不是 LTS(长期支持)版本,如果你正在使用Java 8 或 Java 11,暂可不必升级。
参考文章
https://www.cnblogs.com/yshgotop/p/9972327.html
https://www.cnblogs.com/guoqingyan/p/5667064.html#java20