01Java的发展过程

Java的前世今生

author:陈镇坤27

创建时间:2021年12月10日01:25:06


————————————————————————————

写在前面

了解Java的发展历程,构建知识背景。

问:什么是JDK?

答:全称Java Development Kit(Java发展套具)。

狭义上主要指:Java程序设计语言、Java虚拟机实现和Java类库Api;

广义上指代Java技术体系。

根据JCP(Java Community Process(Java社区))规范定义,java技术体系主要包含:

1)Java程序设计语言;2)各种Java虚拟机实现,;3)Class文件格式;4)Java类库

问:Java有哪几支分支线?

答:

Java Card:支持小程序运行在小设备(例智能卡)上的平台

Java ME:Java Api精简版,支持Java运行在移动端,JDK6以前称为J2ME

Java SE:完整的Java Api,支持Java运行在桌面端,JDK6以前称为J2SE

Java EE:包含完整Java SE的扩展型Api,支持使用多层架构的企业应用,JDK6以前被称为J2EE,JDK10后被放弃,改名Jakarta EE,由Eclipse基金维护。

问:java的前身是什么语言?

答:(冷知识)Oak。1995年开始蜕变为Java。

问:Java发展时间线

答:

在这里插入图片描述

1995年,Oak改名Java,Java1.0问世——Write Onece,Run Any where

1996年,JDK1.0发布(Java虚拟机)

1997年,JDK1.1发布(JDBC、JavaBeans;内部类、反射)

——

JDK1.1.4之后,用工程代号命名迭代版本。

——

1998年,JDK1.2(Play ground)发布(Collections集合、内置JIT即时编译器)将技术拆分为3个方向。

此时同时存在三个虚拟机:Classic VM(默认)、HotSpot VM、Exact VM

1999年,HotSpot虚拟机诞生。

2000年,JDK1.3(Kestrel)发布(HotSpot VM(默认)、Java类库扩充)

——

此后每两年一个大版本。

——

2002年,JDK1.4(Merlin)发布(正则表达式、异常链、NIO、日志类、XML解析器)

同期,微软.NET发布

2004年,JDK5(Tiger)发布(自动装箱、泛型、动态注解、枚举、可变长参数、foreach循环)

此版本后,除了开发版仍然有标识1.x之外,正式名称为JDKx

2006年,JDK6(Mustang)发布(锁与同步、垃圾收集、类加载等的改动)

此版本后,结束了Java技术线的产品旧命名。

同年,在GPL v2协议下开源——OpenJDK

2009年,JDK7(Dolphin)发布(部分功能推后)(G1收集器(Experimental状态))

同年,Java被Oracle接手,并开始执行Java SE Support产品计划。

此后,Oracle获得世界三大商用虚拟机的两个——JRockit、HotSpot

2014年,JDK8发布(Lambda、新的时间日期api、移除HotSpot永久代)

此版本开始,启用JEP管理描述功能特性。

2017年,JDK9发布(Jigsaw(模块化规范))

为发布模块化规范,与JCP内部其他成员发生矛盾。

同时期公布,未来JDK每年3、9月发布大版本,每6个大版本(3年)一个lts版本(jdk8、11、14)(3年寿命),普通版寿命半年。

此后开发版本废弃1.x命名,改用版本号配合年月。

2018年3月,JDK10发布(Grall即时编译器、各种统一)

同期,Oracle状告谷歌

2018年9月,JDK11发布(ZGC垃圾收集器)

同期,将JDK11以前的所有商业特性开放给OpenJDK

发布新策略:一个遵循GPL v2协议的OpenJDK(最新版只有半年更新时间维护)

一个遵循OTN协议的OracleJDK(商用需付费,有3年更新时间维护)

2019年3月,JDK12发布(Shen-andoah垃圾收集器、Switch表达式)

该收集器由的RedHat领导开发,Oracle在OracleJDK中通过代码编译强行剔除。

问:什么是Java SE Support产品计划?

答:JDK7前80个版本更新免费,后面更新要么选择Java SE Support服务,要么升级JDK版本最新。

问:回顾Java虚拟机家族历史。

答:主要介绍Java SE上的虚拟机。

Sun Classic/Exact VM

Sun Classic VM在JDK1.0出现,1.2及之前都是默认虚拟机。1.2及之前执行java-version查看,可发现sunwjit提示,表示使用sun workshop jit外挂编译器,由于此时无法与解释器一起配合工作,编译器会重复对每一个代码进行编译,导致用户此后产生一种Java很慢的印象。

Exact VM在JDK1.2出现,内置即时JIT编译器,同时具备准确式内存管理能力——知道内存中某个位置的数据具体是什么类型,例如指向了12345内存地址是引用类型还是整数。

Classic VM的垃圾回收下,对象必须基于句柄(相当于变量/引用)以便查找。因为当时垃圾回收,对象位置可能发生移动,而在无法分辨内存中哪些对象是引用类型情况下,虚拟机不敢把所有内存中的对象的地址进行移动后位置值的更改,所以需要以句柄来记录对象的地址。(后面会讲述到一些细节)

Exact VM比较Classic VM,查找对象少了一层句柄查找的间接开销。

HotSpot VM

热点代码探测能力——通过程序计数器找出最具有编译价值的代码,然后通知即时编译器JIT以方法为单位进行编译。进一步地,可能会进行标准即时编译和栈上替换编译。

Oracle收购sun后,将BEA JRockit的许多优秀特性(Java Mission Control监控器)融入到了HotSpot,2014年,JDK8移除HotSpot VM的永久代。

BEA JRockit/IBM J9 VM

BEA JRockit,服务端应用,内部没有解释器实现,而是依赖即时编译器编译后执行,启动慢。版本停留在JDK6。

IBM J9 VM,原名IT4J,至今仍十分活跃,其职责分离与模块化较HopSpot优秀。

Apache Harmony VM

Apache Harmony,Apache开源项目,兼容JDK5、6,但没有通过TCK认证(被Sun公司阻挠拖延,后续导致Apache脱离JCP),后因OpenJDK而逐渐失去关注。

活跃,其职责分离与模块化较HopSpot优秀。

Apache Harmony VM

Apache Harmony,Apache开源项目,兼容JDK5、6,但没有通过TCK认证(被Sun公司阻挠拖延,后续导致Apache脱离JCP),后因OpenJDK而逐渐失去关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈镇坤27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值