系列文章:点击查看
java发展史
java已经有20多年的历史了,我将2021算上已经有26年了,按照成年人的年纪来算,算是已经毕业可以出来赚钱准备养家的路上了,虽然说现在java很火特别最近几年的微服务盛行,导致一种现象,高新技术层出不穷,大家都疲于学习新技术,而对于最基本的底层其实了解很陌生或者说基本不了解,当然我也了解不是很深哈~~~。学习jvm呢,主要是让基础底层更加扎实深入,了解相关的实现原理,当然好处就是面试和写出更优代码~,掌握相关原理,其实上层的东西都差不多,而不至于出一个新的技术马上扎头就去学习表面的api,没啥太大作用~~~。
有些同学说java已经过时了,其实建议查看这个网站:https://www.tiobe.com/tiobe-index/
上面罗列当今热门语言的排行版,java其实一些是前5的。
版本历史:
1995年5月23日,Java语言诞生
1996年1月,第一个JDK-JDK1.0诞生
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
1996年9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日,JDK1.1发布
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
1997年9月,JavaDeveloperConnection社区成员超过十万
1998年2月,JDK1.1被下载超过2,000,000次
1998年12月8日,JAVA2企业平台J2EE发布
1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3发布
2000年5月29日,JDK1.4发布
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
2001年9月24日,J2EE1.3发布
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
2006年12月,SUN公司发布JRE6.0
2009年12月,SUN公司发布Java EE 6
2010年11月,由于Oracle公司对于Java社区的不友善,因此Apache扬言将退出JCP[14]
2011年7月28日,Oracle公司发布Java SE 7
2014年3月18日,Oracle公司发表Java SE 8
2017年9月21日,Oracle公司发表Java SE 9
2018年3月21日,Oracle公司发表Java SE 10
2018年9月25日,Java SE 11发布
参考:https://zh.wikipedia.org/wiki/Java
上面的图是基于 《深入理解JAVA虚拟机》罗列出来的~
1997年,当JDK 1.1发布时,虚拟机没有改变,并且Sun Classic VM仍然被用作默认虚拟机。
1998,当发布JDK 1.2时,提供了在Solaris平台上运行的精确VM虚拟机,但Sun经典VM仍然被用作默认Java虚拟机。
2000年,发布了JDK 1.3。默认的Java虚拟机从Sun经典VM更改为Sun HooSopt VM,而Sun经典VM被用作备用虚拟机。
2002年,发布了JDK 1.4。Sun Classic VM退出商业虚拟机阶段,并直接使用Sun HotSpot VM作为默认虚拟机。
Sun Classic VM
世界上第一款商用的java虚拟机。jdk1.4时候被淘汰。
只提供了解释器,性能差。
相关概念
Java编译器是什么?
将.java文件编译成中间字节码.class文件,该文件为JVM所以阅读的的语言,跟平台(window/linux/其他)无关,这也是实现java跨平台的核心,直接将该.class文件放到任何有装jvm平台都可以执行起来。
Java解释器是什么?
用来解释执行java编译器后的文件,把字节码转化成JVM平台可以看得懂的机器语言并且运行。解释器是一行一行的翻译并运行,所以比较慢。
JIT是什么?
JIT叫即时编译器Just In Time Compiler,当代码反复被执行,被称为热点代码。热点代码被编译成本地机器指令就不用每次都去解释,就是由JIT实现。JIT可能提升程序效率,但是导致每一个方法、每一行代码进行编译就会影响性能。
注意:JIT和解释器不能协同工作。
JIT与解释器的区别?
JIT类需要先编译再执行,而解释器则是立即运行不需要再编译。
个人理解:
比如你想去北京八达岭长城:
解释器就类似于立即出发;
JIT:类似坐飞机需要等待;
Exact VM
jdk1.2发布;
两级即时编译器、编译器和解释器混合工作模式等;
最后被HotSpot VM取代;
Sun HotSpot VM
“Longview Technologies”公司开发,是被sum公司收购。该虚拟机一开始并非为java设计;
通过“热点代码探测技术”解决了Sun Classic VM外挂JIT导致解释器不起作用的原因;
是目前使用范围最广的java虚拟机;
什么是热点代码探测技术?
热点代码探测分为:基于采样的热点探测、基于计数器的热点探测;
采样的热点探测:周期性检查各个线程的栈顶,如果发现某个方法经常出现在栈顶,就判定该方法为热点方法。
计数器的热点探测:通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译;
Sun Mobile-Embedded VM
面向移动端,安卓、ios等智能手机开发的一个移动端虚拟机;
BEA/JRockit/IBM J9 VM
JRockit是BEA System公司开发的虚拟机,被Oracle收购,后来就没有再发展;
J9是IBM公司开发,全称:Technology for Java Virtual Machine,号称天下最快的虚拟机(有广告嫌疑),后来捐给Eclipse开源基金会,更名为OpenJ9;
Liquid
是BEA System公司开发的虚拟机,主要是针对特定硬件平台(深度定制),后来也被sum收购然后停止。
Apache Harmony
由IBM和Intel联合开发虚拟机,由于sun坚决不让Harmony获得JCP认证,最终2011退役。
Microsoft JVM
微软开发的一个虚拟机,主要在IE3浏览器上使用java apples,后来被sun以侵权商标告了,在windows xp sp3抹掉了(这里sun有一个很操蛋的故事,可以自行百度!)
Taobao jvm
属于国内通过open jdk深度定制的一款虚拟机,主要还是用于阿里的相关虚拟主机上;
特点:将垃圾移到堆外,降低垃圾回收频率,提升效率!
缺点就是严重依赖intel的cpu,损失了兼容性,但是提高了性能;
Graal VM
oracle Labs 在2018年公开了Graal VM,号称 "Run Programs Faster Anywhere",勃勃野心。主要想实现全栈。
有希望取代HotSpot可能就是Graal VM。
其他
.....
最后
在国内大部分都是基于jdk1.8开发,java表层貌似没什么变化,但是jvm真的已经更新速让我们望尘莫及,快到我们都不知道底层的复杂度具体多深,只看表现差不多。或许就是因为国情原因吧....
参考:
https://www.jianshu.com/p/6da233604056
https://leezw.net/posts/java-history
https://blog.csdn.net/weixin_45267102/article/details/108522647