Java JDK版本的历史简介说明
笔者是一个JAVA开发小白,下文是笔者收集的JAVA版本发展简史,共大家参照
JDK 1.0(1996)
Java是由Sun公司,Java的起初版本号为Java1.0,Java前期的名称叫(Oak)橡树,后改名为Java(JDK1.0基本上只支持Java语言基础特性)
JDK 1.1(1997)
在这一个版本中Java语言引入:
- 内部类
- JDBC: 设计了一套访问数据的标准接口 注意:JDBC是Sun Microsystems的商标
- RMI/ JavaBeans:RMI/ JavaBeans是Java中特殊的类, 可在一个对象(bean)中封装多个对象,RMI的特点:可序列化,提供无参构造器,可使用getter方法和setter方法访问对象的属性
- 在此版本中JAVA语言支持反射能力
- 在此版本中JAVA语言支持国际化和Unicode
J2SE 1.2(1998)
在此版本中,Java技术体系拆分为:J2SE、J2EE、J2ME
并引入以下特性:
JIT:即时编译,实时编译,动态编译的一种形式,可提高程序的运行效率
EJB技术
Swing图像化API
Java plug-in(Java Applet):Web环境下的小程序
集合框架
J2SE 1.3(2000)
引入 HotSpot VM
Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI)包含在主程序库中(先前为扩展组件的形式)
实现动态代理的类
J2SE 1.4(2002)
语言上的改变:assert 关键字(断言)
正则表达式
异常链,允许一个异常来封装原先处于较低级别的异常
支持 Internet Protocol version 6(IPv6)
非阻塞I/O(NIO)
新增 日志API
J2SE 5.0(2004)
泛型: 为集合提供编译期间 (静态) 类型安全,且不须为大多数类型转换 (类型转换) (规范在 JSR 14)
元数据(MetaData): 也称作注解。让语言结构(像是类别和方法)能够用额外的数据标记,可以由元数据意识工具处理(规范在 JSR 175)
枚举
自动装箱拆箱:基本数据类型如int与Integer之间能够自动转换
静态导入(import static)
可变参数
JUC
For-Each 循环
Scanner 类别来解析来自各式各样的输入和缓冲
如:
public class Jdk5Demo{ public static void mian(String[] args){ String[] values = of("java265.com","毛毛"); Integer[] data = of(8,9,10,11,12,88,99); } private static <T> T[] of(T... values){ return values; } private static <T> T[] ofOne(T one, T... others){ return others; } }
JavaSE 6(2006)
增加垃圾回收G1
优化锁与同步、垃圾收集、类加载等
@Override 接口
public class Jdk6Demo extends Object{
public static void mian(String[] args){
}
@Override
public String toString(){
return super.toString();
}
public interface EchoService{
@Deprecated(since = "1.1")
String echo(String message);
String echo(String message,String... others);
}
public class EchoServiceImpl implements EchoService{
//1.1 remove @Override
String echo(String message){
return null;
}
@Override
String echo(String message,String... others){
return null;
}
}
}
JavaSE 7(2011)
此时Java被 Oracle收购(作价70亿美元)
钻石语法(泛型实例化类型自动推断)
try-with-resources语法糖
多个catch块用|连接
switch中可以使用字符串
支持动态语言
64位JDK的指针压缩
数值可加下划线
public class Jdk7Demo {
public static void mian(String[] args){
try(FileInputStream inputStream = new FileInputStream("D:/a.txt")){
//AutoCloseable since 1.7
//JDBC Connection ,InputStream,用 try-with-resources的语法
}catch(FileNotFoundException | RuntimeException e ){
e.printStackTrace();
}
}
}
JavaSE 8(2014 LTS)
Lambda表达式(闭包,允许我们将函数当成参数传递给某个方法)
接口中的默认方法和静态方法
方法引用
无参构造器方法引用:类名::new 或者 Class::new
静态方法引用:Class::static_method (接受一个Class类型参数)
类成员方法引用:Class::method (没有参数)
实例成员方法引用:instance::method (接受一个instance对应类型的参数)
重复注解(同一个地方可以重复使用多次同一个注解,注解本身需要被@Repeatable修饰)
升级工具库实现
HashMap实现修改、ConCurrentHashMap实现修改
新增Stream API(java.util.stream)
新增Optional类以解决空指针问题
工具包,类依赖分析工具 jdeps
JVM方面:使用Metaspace(JEP122)代替方法区持久带(PermGen space)
JavaSE 9(2017)
JSR 376:在Jigsaw项目中将JDK模块化(参见Java平台模块系统条目)
JEP 222:jshell:Java Shell(一个 Java 交互式顶层构件)
JEP 295:AOT编译(通过 Graal VM 实现)[240]
JEP 268:XML Catalogs
JEP 266:更多的并发更新。包含响应式流的Java实现,及其部分替代品java.util.concurrent.Flow。
JEP 193:变量句柄:定义一个标准方法来调用java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。
JEP 282:jlink:Java链接器。该工具可以为模块生成一个包含了其所有依赖项的自定义运行时映像,同时允许生成一个包括运行它的JVM的可执行文件。
JavaDB被移出JDK
JEP 263:高DPI图像:自动缩放与尺寸自适应。
JavaSE 10 (2018.3)
JEP 286:局部变量类型推断
JEP 317:实验性的基于Java的JIT编译器。这是 Linux x64 下 Graal 动态编译器的集成。
JEP 310:应用程序类级别数据共享
JEP 322:基于时间的版本命名
JEP 307:适用于G1的多线程完全垃圾回收
JEP 304:垃圾回收器接口
JEP 314:更多的Unicode语言标签扩展
JEP 319:内置根证书
JEP 312:线程本地握手
JEP 316:在可选的内存设备上申请堆内存空间
JEP 313:删除本地代码头文件生成器javah
JEP 296:将所有JDK分支集成到同一个版本库中
var a = new Arraylist<>();
1
JavaSE 11 (2018.9 LTS)
JEP 309:动态类文件常量
JEP 318:Epsilon:无操作垃圾收集器
JEP 323:lambda参数的局部变量语法
JEP 331:低开销堆分析
JEP 321:HTTP Client
JEP 332:支持 TLS 1.3
JEP 328:添加Java飞行记录器(JFR),其用于创建性能分析记录
JEP 333:添加ZGC(一个可扩展的低延迟垃圾收集器)
JavaFX、Java EE、CORBA 被移出 JDK
JEP 335:弃用 Nashorn JavaScript 引擎
JavaSE 12(2019.3)
JEP 189:Shenandoah:一个实验性的低延迟垃圾收集器
JEP 230:细粒度性能评审包
JEP 325:Switch 表达式(预览阶段)
JEP 334:JVM Constants API
JEP 340:仅保留一个 AArch64 平台的移植
JEP 341:默认类数据共享归档
JEP 344:针对G1,提供可中止的混合垃圾收集
JEP 346:针对G1,及时释放已申请但未使用的内存
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。