编程知识 cdmana.com

JVM系列--趣谈Java历史发展的故事

java技术体系的一些发展故事

你好我是idea。本专栏我们来一起聊聊关于java虚拟机家族发展的故事内容,本文可能不会讲解过多关于技术原理相关的内容,更多的相关知识点会比较有趣味些。

在1990年的时候,有几个技术宅开始在研究一种能够支持跨平台的系统。


为什么C语言不具备有较好的跨平台特性?

使用C语言编辑出来的文件最终是二进制格式的,但是不同的cpu对于这些二进制识别的规则不一致,这就容易导致C语言写出来的东西在A-cpu上边可以运行,但是在B-cpu中不能运行,所以说C语言在跨平台方面做的不够完善。

在这里插入图片描述

这几个技术宅于是在原先C语言的基础上边进行了二次开发,打算结合不同的cpu对于指令集解析的规则做一层适配器(虚拟机的概念逐渐诞生),于是便开发了一种叫做Oak的语言。但是由于Oak语言当时已经被别人注册了,所以改名为了Java语言。

JDK发展历史

1996年初的时候,Java语言首次登台亮相,这个时候主要是由Sun公司在推广,并且取名为JDK1.0版本,采用的主要是一款叫做Classic的虚拟机技术。但是由于Classic虚拟机技术的一些缺陷,在编辑层面做得不够完善,也给初期用户留下了一个”Java语言非常缓慢“的印象。


1997年的时候,sun公司收购了一家叫做Longview Technologies的公司,此时渐渐出现了一款叫做Hotspot的虚拟机。
在这里插入图片描述

1998年的时候,jdk1.2发布了,主要针对方向是大型服务器系统,同时Sun公司也提出了jsp/Servlet技术规范,EJB规范,并且将Java的整体领域划分为了J2EE,J2SE,J2ME三个方向,开始了对于市场上面各类软件开发商,服务提供商的市场竞争。此时也出现了一款叫做Exact Vm的虚拟机,这款虚拟机的性能要比原先使用的Classic虚拟机技术更加成熟一些。Exact Vm虚拟机主要是废弃了早期使用的句柄查询对象技术,提升了对象定位的性能。

在这里插入图片描述


2000年的时候,JDK1.3发布了,Hotspot虚拟机成了默认虚拟机,而之前在JDK1.2时期出现的Exact VM却因为一些内部决策原因没有继续开发和维护下去了。Hotspot虚拟机也就从此成为了大多数程序员所使用的一款虚拟机技术。
2001年,JDK1.4发布,Classic虚拟机退出了人们的视线中。后边在03年的时候,Groovy也加入到了Java的阵营中。04年的时候JDK1.5的出现可谓是一次里程碑式的改动,在这个版本中出现了较多的变动,例如泛型,反射,枚举,可变长参数,foreach语法等等新的特色要点涌现出来。
后来在06年的时候,Java开始对外开源,也就形成了一个著名的OpenJDK项目,在这个项目里面Hotspot虚拟机的名声又一次被放大了。
虽然说JDK的这些年发展一直都很顺畅,但是商业的竞争是残酷的,随着Sun公司的发展,另一巨头Oracle开始渐渐眼红了,计划采用收购手段来获取这些有价值的技术。 08年的时候Oracle公司将BEA给进行了收购,当时BEA公司也有在研发自己独有的虚拟机,并且开发了一款叫做JRokit的虚拟机技术。后边Oracle又把Sun公司给进行了收购,于是便同时拥有了JRokit和Hotspot两款非常有名气的虚拟机技术。
2011年的时候,jdk1.7发布了,此时推出了新一代的垃圾回收器G1,以及NIO2.0技术的发布。后续再2014年的时候,JDK1.8也开始出现在大众的视野中,当时的lambda语法大大改变了java的编程风格和习惯。
随着后续jdk的不断发展和迭代,又衍生出来了几项新的技术:

JDK9—默认采用了G1作为垃圾收集器,同时引入了Jshell 这款技术工具。


JDK10—在这个版本中引入了var关键字的使用,以及线程的本地握手技术(可以理解为当某个线程执行完毕之后,自动回调相关的新方法)


JDK11—开始将HttpClient 的api引入到了java.net包当中使用。ZGC技术的推广,ZGC可以理解为是对原先的G1的一种优化手段。与标记对象的传统算法相比,ZGC在指针上做标记,在访问指针时加入Load Barrier(读屏障),比如当对象正被GC移动,指针上的颜色就会不对,这个屏障就会先把指针更新为有效地址再返回,也就是,永远只有单个对象读取时有概率被减速,而不存在为了保持应用与GC一致而粗暴整体的STW。


JDK12—引入了一种叫做Shenandoah 的GC技术,这款技术通过与正在运行的 Java 线程同时进行 evacuation 工作来减少 GC 暂停时间。使用 Shenandoah 的暂停时间与堆大小无关,这意味着无论堆是 200 MB 还是 200 GB,都将具有相同的暂停时间。

有哪些公司开发过JDK

除了我们熟系的Sun,Oracle之外,其实还有以下公司开发过自己专属的JDK。
IBM公司开发过一款叫做J9的虚拟机,在业界其实也是有一定名气的。
bea system公司开发过jrockit虚拟机,在文章的上方我也有提及过,不过这家公司后续被Oracle收购了。

另外我们熟知的阿里巴巴,推特都有尝试做过专属于自己的jdk定制,不过它们都是在基于Hotspot的基础技术上边做一些改造,并没有重头开始进行开发。open jdk,sun/oracle jdk,j9,jrockit虚拟机都是可以在通用的硬件平台上边运行。还有一类jdk比较特别,适用于专门的硬件平台运作,Azul Systems公司的azul vm就是一个案例,不过是基于hotspot进行改造的。由于之前的azul vm 虚拟机对于硬件的适配要求过高,所以后期Azul Systems公司并没有着重发展这一块的业务,而是改成了投入精力去发展zulu产品。其实zulu的jvm要比hotspot虚拟机的性能表现更好,同时修改了hotspot内部的许多实现细节,其中的pgc,c4垃圾收集器能够支持到TB级别的垃圾回收。这一点hostspot要到了jdk11和jdk12版本才能赶上其性能提升。

微软也有过研发jdk的背景,不过后来被sun公司起诉了于是停止了研发。
2018年的时候oracle labs就公开表明在研究一款黑科技 graal vm,这一款虚拟机能够同时支持多类不同的语言进行相互调用。

只不过说Sun/Oracle开发的hotspot虚拟机使用比较广泛,所以容易造成程序员的一些认识误解,以为JDK只有Hotspot这一款系列。

版权声明
本文为[Danny_idea]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Danny_idea/article/details/112120240

Scroll to Top