最全的Java版本历史

article/2025/9/22 13:18:00

JDK 1.0(1996)

Sun公司发布Java1.0,发布初期叫Oak,后改名为Java(JDK1.0基本上只支持Java语言基础特性)

JDK 1.1(1997)

  • 引入内部类
  • 引入JDBC: 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。
  • 引入RMI:Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
  • 引入JavaBeans:Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中的“Bean”是用于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("hello","world");Integer[] data = of(1,2,3,4,5);}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){}@Overridepublic 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 @OverrideString echo(String message){return null;}@OverrideString echo(String message,String... others){return null;}}
}
//@Override 正常来说要作为重写的注解加在重写的方法上,但有时候就为了区分版本 如上就是从1.1版本要删除了就不应该在加上该注解 

JavaSE 7(2011)

sun被Oracle收购

  • 钻石语法(泛型实例化类型自动推断)
  • 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<>();

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,及时释放已申请但未使用的内存

Java类库提升

Java5Java6Java7Java8Java9Java10
并发框架(J.U.C)JDBC 4.0NIO 2Stream APIReactive Streams Flow APIJava-Based JIT Compiler
格式化(Fomatter)JAXB 2.0Fork/Join框架CompletableFutureProcess API Updates
Java管理扩展(JMX)可插拔注解处理APIinvokedynamic字节码Annotation on Java TypesVariable Handles
InstrumentationCommon AnnotationsDate and Time APIMethod Handles
XML处理(DOM、SAX、XPath、XSTL)Java Compiler Api可复制AnnotationsSpin-Wait Hints
Scripting in JVMJavaScript运行时Stack-Walking API

参考百科:维基百科


http://chatgpt.dhexx.cn/article/h9NEE4Eb.shtml

相关文章

JDK各个版本的区别

jdk1.5的新特性&#xff1a; 1. 泛型 ArrayList listnew ArrayList()------>ArrayList<Integer>listnew ArrayList<Integer>(); 2 自动装箱/拆箱 nt ilist.get(0).parseInt();-------->int ilist.get(0);原始类型与对应的包装类不用显式转换 3 for-eac…

Java 版本区分

Java分为如下三个版本&#xff1a; Java SE&#xff1a;Standard Edition&#xff1a; Java SE就是标准版&#xff0c;包含标准的JVM和标准库。 Java EE&#xff1a;Enterprise Edition 而Java EE是企业版&#xff0c;它只是在Java SE的基础上加上了大量的API和库&#xff0c;…

更换Java版本

当windows系统中存在多个java版本时&#xff0c;怎么切换&#xff1f; 如果是1.7以前的版本&#xff0c;则直接修改环境变量JAVA_HOME&#xff1b; 如果是1.7及以后的&#xff0c;则可能要修改C:\ProgramData\Oracle\Java\javapath 中的三个java&#xff0c;可重命名&#xff…

JAVA版本号的问题 Java版本号与JDK版本

初学Java时便一直疑惑Java版本号到底是如何命名的&#xff1f;时常在网上看到Java5、Java6、Java7、Java8 (到今天已经到了Java12了&#xff0c;2019.4.5) 这一类 “Java X” 的Java版本名称&#xff0c;同时又会看到诸如JDK1.5、JDK1.6这中 “JDK1.X” 的JDK叫法。一直以来都在…

查看java/jdk版本

查看当前电脑的Java/JDK版本的方法 1.winR 打开运行窗口&#xff0c;输入 cmd 2.在控制台中输入java --version或者java -version&#xff0c;即可查看Java版本号 Java所有版本 版本号发布日期JDK Version 1.01996-01-23 Oak(橡树)JDK Version 1.11997-02-19JDK Version …

java的所有版本

图解 最开始 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。 Oak也是一种精简的语言&#xff0c;程序非常小&#xff0c;适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet&#xff08;Applet是一种将小程序嵌…

JDK版本区别

1. 泛型 ArrayList listnew ArrayList()------>ArrayList<Integer>listnew ArrayList<Integer>(); 2 自动装箱/拆箱 nt ilist.get(0).parseInt();-------->int ilist.get(0);原始类型与对应的包装类不用显式转换 3 for-each i0;i<a.length;i------------&…

Java版本和JDK版本

转载 对于Java初学者&#xff0c;经常会听到同事&#xff0c;或看到网上Java版本和JDK版本不一的叫法&#xff0c;不明白这两者到底什么关系&#xff1f;其实博主当年初学Java时也有这样的困惑&#xff0c;今天我们就来好好探讨一下&#xff0c;如有不对之处&#xff0c;请加以…

JAVA版本号的问题——Java版本号与Jdk版本

初学Java时便一直疑惑Java版本号到底是如何命名的&#xff1f;时常在网上看到Java5、Java6、Java7、Java8 (到今天已经到了Java12了&#xff0c;2019.4.5) 这一类 “Java X” 的Java版本名称&#xff0c;同时又会看到诸如JDK1.5、JDK1.6这中 “JDK1.X” 的JDk叫法。一直以来都在…

Java各个版本区别

参考资料 一文彻底搞懂令人疑惑的Java和JDK的版本命名&#xff01; Java–Java版本和JDK版本 1. Java SE、java EE、Java ME三个版本 1.1 Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;Java标准版 Java SE 是做电脑上运行的软件。 Java se 以前…

Java各版本比较(Java SE、java EE、Java ME)

文章目录 1. 概述2. 版本比较2.1 Java SE、java EE、Java ME2.2 JDK、J2SE、Java SE2.3 JDK、JRE、Java SE API2.4 JDK、JRE、JRE、JIT2.5 Java ME、Java SE、Java EE、Java Card 来源 1. 概述 java是作为长时间流行的语言&#xff0c;在这过程中出现了很多版本&#xff0c;各…

Java--Java版本和JDK版本

对于Java初学者&#xff0c;经常会听到同事&#xff0c;或看到网上Java版本和JDK版本不一的叫法&#xff0c;不明白这两者到底什么关系&#xff1f;其实博主当年初学Java时也有这样的困惑&#xff0c;今天我们就来好好探讨一下&#xff0c;如有不对之处&#xff0c;请加以指正&…

【SpringBoot整合缓存】-----Redis缓存篇

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringBoot相关知识相关知识&#xff0c;打造完整的SpringBoot学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#xff0c;也…

SpringBoot 开启Redis缓存

文章目录 Redis缓存主要步骤具体实践整体目录结构pom.xml添加依赖yml文件里配置Redis集群编写RedisConfig配置序列化及缓存配置&#xff0c;添加缓存注解编写业务Controller编写启动类 检验结果 之前不是说过Redis可以当作缓存用嘛 现在我们就配置一下SpringBoot使用Redis的缓存…

Windows下清理redis缓存

Windows下清理某个redis库的所有数据 1、找到redis的安装目录 2、找到redis-cli.exe&#xff0c;双击运行 3、登录redis&#xff1a;输入命令&#xff1a;auth 密码 4、登录成功&#xff1a;当前默认为数据库0 5、切换数据库&#xff1a;select 1/2/3&#xff08;切换数据库为…

redis缓存穿透

ps:想只读有效信息&#xff0c;见红字 正常情况 当在高并发&#xff0c;高性能&#xff0c;降低数据库压力的情况下&#xff0c;首先会选择redis作为缓存机制&#xff0c;当有大量请求需要查询数据库时&#xff0c;为了降低数据库的压力&#xff0c;并提高请求查询性能&#…

linux下清理redis缓存

输入命令&#xff0c;连接到redis 服务端 redis-cli -h 127.0.0.1 -p 6379#不用切换到redis的bin下面&#xff0c; 是因为安装redis 时已经配置了系统变量验证登录密码&#xff0c; auth 你的redis密码 开始清理缓存&#xff0c;清理命令如下 指定redis片区&#xff1a; selec…

redis缓存命中率

登录redis服务器 输入 redis-cli 链接到redis之后&#xff0c;输入info 则会打印 通过计算hits和miss&#xff0c;我们可以得到缓存的命中率&#xff1a;111207/ (111207 50181) 68.9% &#xff0c;一个缓存失效机制&#xff0c;和过期时间设计良好的系统&#xff0c;命中率…

命令行清除Redis缓存

一、打开命令行窗口 打开Redis安装目录下的《 redis-li.exe 》。 二、授权 在打开的命令行里直接操作会提示没有权限&#xff0c;需要先使用auth命令授权&#xff0c;使用方法如下。 auth ‘这里是Redis密码’ 三、清除缓存 清除缓存有两种方式&#xff1a;清除数据库缓存、清…

Redis缓存预热

概述 在秒杀开始前通常要进行将数据加载到缓存中&#xff0c;也叫缓存预热 demo Redis序列化配置&#xff0c;通常有两种方式&#xff0c;通过配置类进行序列化配置&#xff0c; Configuration public class RedisConfig {Autowiredprivate RedisConnectionFactory factory…