Java技术体系
提到Java技术体系,那么就不得不说JDK和JRE,很多小伙伴可能对这两个所谓的专业术语不陌生,但是又感觉到不是很熟悉,因为是不了解两者的区别。
- JDK(Java Development Kit,Java开发工具包):主要指的是JVM虚拟机、Java程序设计语言、Java类库API
- JRE(Java Runtime Environment,Java运行时环境):指的是JVM虚拟机、Java类库中JavaSE部分的API
这里有一张图,大家可以感受一下。
如果按照Java技术服务的技术领域来分,可以将Java分为4个部分:
Java Card
运行在小内存设备(如智能卡)上面的平台
Java ME(Micro Edition)
运行在移动终端(如手机、平板电脑)上的平台,Android不属于Java ME
Java SE(Standard Edition)
提供了完整的核心Java API
Java EE(Enterprise Edition)
多层架构的企业应用平台,除了提供Java SE API外,还对其做了大量的有针对性的扩展,在JDK 10后被Oracle废掉了,捐给了Eclipse慈善基金会,并且Oracle不允许Eclipse以Java对其命名,所以改名为Jakarta EE
Java发展史
其实我看完Java的发展史,总结出来的就是Java的发展既是一场辛酸史、也是一场血泪史。经历了成功、失败、再到成功,作为世界上排行第一的语言,未来怎么样,很难断定,但是Java目前至少在前进,并没有停止自己的脚步,频繁的开发者带来更好的体验,我觉得这是很棒的。
先放一张图片,是一张Java发展史的综合图片,可以帮助梳理总结此节内容
说到Java的起源,应该追溯到1991年,Java之父James Gosling领导的“绿色计划”,目标是制造出一款可以在各种电子产品(如相机、机顶盒、冰箱等)上运行的语言,起初命名为Oak(James博士办公室旁的一棵橡树),起初Java并不是很受欢迎,在1995年的互联网浪潮的兴起,Java开始迅速火起来。
1995年,在第一节JavaOne大会上,Oak正式更名为Java,并且发布了第一个版本JDK 1.0。
自此,JavaOne形成了传统,是Java程序员的技术盛会,直到2018年10月,oracle正式的放弃了JavaOne大会
JDK 1.x的命名方式到了java的第五个版本(2004年9月30日)就被废弃了,而采用JDK x的命名方式,即JDK 5
1998年12月4日,JDK 1.2发布,此次发布将Java技术体系分为3个方向
- J2EE(面向企业级的应用开发)
- J2SE(面向桌面的应用开发)
- J2ME(面向移动终端的应用开发)
J2XX 的命名方式在JDK 6(2006年12月11日)被废弃,取而代之的是Java EE、Java SE、 Java ME
另外,加入了很多新的技术,例如引入了新的虚拟机HotSpot、内置即使编译器(JIT, Just In Time)
很多接触过Java虚拟机的小伙伴可能对HotSpot很耳熟,对Classic VM很陌生,在JDK 1.1搭配的就是Classic VM,到了JDK 1.2引入了HotSpot,但是Classic VM仍然是主力虚拟机,开启HotSpot需要通过参数配置,JDK 1.3,Classic VM作为后备虚拟机,而HotSpot为主力虚拟机,到了JDK 1.4,Classic VM被彻底废除
2000年5月8日,JDK 1.3发布。
2002年2月12日,JDK 1.4发布,这次发布搭载了很多新功能,引入了正则表达式、加入了异常处理、日志类、XML解析器等
2004年9月30日,JDK 5发布,引入了自动拆装箱、动态注解、枚举、可变长参数、循环(foreach)、提供JUC包、改进了Java内存模型(JMM,Java Memory Model)
2006年12月11日,JDK 6发布。
在2006年11月13日的JavaOne大会上,Sun决定将Java开源,并且将源代码交由OpenJDK基金会管理,此时移交的代码属于JDK 6成熟,JDK 7半成品的状态,OpenJDK则决定创建一个新的分支,剥除掉JDK 7的新特性,先发布一版JDK 6的版本,在JDK 7成熟后,再发布JDK 7
其实很多人一直在纠结Oracle JDK 和 Open JDK有什么不同,其实他俩属于同一分支上的产品,只不过维护的机构和在一些细节上(文件头)不同,本质上无差别
另外,在Sun被Oracle收购了之后,Oracle又在JDK中加入了一些商业特性,并未将这些商业特性开源给OpenJDK,但是在 2018年9月25日 JDK 11的发布时,Oracle又将这些特性开源给了OpenJDK,在OpenJDK中,需要手动通过参数解锁这些新特性(JMC、JFR、NMT、AppCDS、ZGC等)
2009年2月19日,JDK 7发布,这个版本在之前的计划中需要发布很多新特性(如下)
- Lambda表达式
- Jigsaw项目
- 动态语言支持
- Garbage-First收集器
- Coin项目
但是Sun公司由于世界金融危机,导致项目无法如期完成,然后就将一部分新特性挪到了JDK 8中,发布阉割版的JDK 7
2009年4月20日,Oracle以74亿美元收购了Sun
2014年3月18日,JDK 8发布,里面就承载了JDK 7规划过但是没有如期完成的功能。Oracle在收购Sun之前,也同样收购了BEA公司,并且在JDK 8中,还将号称世界三大商用虚拟机(HotSpot、JRockit、J9)之一的JRockit和HotSpot进行合并,但好像然并卵,没得到什么质的提升。
2017年9月21日,JDK 9发布,此后,Oracle决定每年的3月和9月会定期发布JDK新版本,并且每个版本至少维护3年,但是经过了一段时间之后,Oracle公司有点受不了了,随着时间的推移,发布的版本众多,版本维护就是一个问题,于是,Oracle决定,费除掉之前至少维护3年的决定,而是从6个大版本中选出一个,定为长期支持版本(LTS,Long Term Support),即长期维护。目前LTS版本为JDK 8、JDK 11,下一LTS版本为2021年的JDK 17
2018年3月20日,JDK 10发布。
2018年3月27日,Oracle又干了一件惊天地泣鬼神的大事件,Oracle控告Google Android侵权Java案件胜利,Google赔偿Oracle 88亿美元,真的是大赚啊,收购Java花了74亿,然后又用Java一下赚了88亿,这波不亏。
2018年9月25日,JDK 11发布。
2019年3月20日,JDK 12发布。
Java虚拟机家族
-
Classic VM / Exact VM
-
HotSpot VM
-
Mobile / Embedded VM
-
BEA JRockit / IBM J9 VM
-
Liquid VM
-
Azul VM
-
Zing VM
-
Apache Harmony
-
Google Android Dalvik VM / ART VM
-
MicroSoft JVM
- 关于MicroSoft JVM还有一点特别好玩,微软为了在IE3中支持Java Applets应用而开发了自己的虚拟机,而且还是windows平台性能最好的虚拟机,但是,Sun公司在1997年以侵权商标为由起诉微软,最后把微软治的服服帖帖的,微软在各大报纸平台道歉,并且承诺不再开发J++,并且赔偿Sun公司2000万美金。在Windows XP SP3完全抹去J++的时候,Sun又各处登报希望微软不要这样做,想让微软继续使用和研发
-
Graal VM
- 这款虚拟机的宗旨就是为了完全适应各种语言的运行平台,多种语言之间可以相互使用,语言之间的彼此调用就像调用同种语言接口那样简单
总结
Java的发展经历了太多,由Sun公司主导,最后到Oracle公司,期间跌宕起伏,各个公司从自己的利益出发,相互控告,可能就是由于这些原因,才成就了Java今天的辉煌,才成就了Java的现在。
作者:daao
链接:
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。