一文彻底搞懂令人烦乱的Java和JDK的版本

Bang414 2024-10-11 12:35:01 阅读 57

简介

Java 是什么

Java 是一种广泛使用的面向对象编程语言,具有卓越的通用性、高效性、跨平台性和安全性,从语法和结构上,Java 具有清晰的语法规则和简洁的代码风格,这使得开发者能够更轻松地编写和理解代码。

Java通常分为三个主要版本:

SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。

EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE [1]。

ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。


JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

JDK包含的基本组件包括:

javac(编译器,将源代码转成字节码)jar(打包工具,将相关的类文件打包成一个文件)jdb(调试器,就是debugger,查错工具)javadoc(文档生成器,从程序源代码中提取、方法、成员等注释成一个和源代码配套的API帮助文档)appletviewer(运行 Java 小程序(applet)的工具 ,它会启动一个窗口显示 applet 的界面,并允许你进行调试和测试。老旧的 Java 代码和测试环境中)javah(用于生成Java Native Interface头文件的工具。JNI是一种Java编程的接口,它允许 Java 代码与用其他语言(如 C 或 C++)编写的本地代码进行交互。)javap(Java class文件分解器,可以反编译,也可以查看Java编译器生成的字节码)jconsole(Java 提供的一个工具,用于监视和管理 Java 应用程序的性能和资源使用)等

JDK结构图:

附加介绍:

JRE(Java Runtime Environment):

        JRE是运行 Java 应用程序所需的最小环境。它包含了 JVM 和 Java 核心类库(Core Libraries),这些类库提供了 Java 应用程序运行所需的基本功能和资源。如果只需运行 Java 应用程序而无需进行开发,则只需安装 JRE。JRE允许用户在计算机上运行已编译的 Java 程序。

JVM(Java Virtual Machine):

        JVM 是 Java 虚拟机,它是 Java 平台的核心组件之一。JVM 在计算机上执行 Java 字节码,并提供了内存管理、垃圾回收、安全性等重要功能。JVM 是 Java 应用程序与底层操作系统之间的中间层,使得 Java 应用程序具有跨平台的能力。不同的操作系统需要特定版本的 JVM 来运行 Java 应用程序。

        JDK 是用于开发 Java 应用程序的工具包,其中包含了 JRE;而 JRE 是运行 Java 应用程序所需的最小环境;JVM 则是在计算机上执行 Java 字节码的虚拟机,它提供了运行 Java 程序的基础设施。


SE(JavaSE)对应JDK版本(jdk 版本越高性能越好):

版本

JDK版本(对应)

名称

发行日期

JDK 1.0 JDK 1.0 Oak 1996-01-23

JDK 1.1.4

JDK 1.1.4

Sparkler(宝石)

1997-09-12

JDK 1.1.5

JDK 1.1.5

Pumpkin(南瓜)

1997-12-13

JDK 1.1.6

JDK 1.1.6

Abigail(阿比盖尔–女子名)

1998-04-24

JDK 1.1.7

JDK 1.1.7

Brutus(布鲁图–古罗马政治家和将军)

1998-09-28

JDK 1.1.8

JDK 1.1.8

Chelsea(切尔西–城市名)

1999-04-08

J2SE 1.2

JDK 1.2

Playground(运动场)

1998-12-04

J2SE 1.2.1

JDK 1.2.1

none(无)

1999-03-30

J2SE 1.2.2

JDK 1.2.2

Cricket(蟋蟀)

1999-07-08

J2SE 1.3

JDK 1.3

Kestrel(美洲红隼)

2000-05-08

J2SE 1.3.1

JDK 1.3.1

Ladybird(瓢虫)

2001-05-17

J2SE 1.4.0

JDK 1.4.0

Merlin(灰背隼)

2002-02-13

J2SE 1.4.1

JDK 1.4

grasshopper(蚱蜢)

2002-09-16

J2SE 1.4.2

JDK 1.4

Mantis(螳螂)

2003-06-26

J2SE 5.0

JDK 1.5

2004-09

Java SE 5.0 (1.5.0)

JDK 1.5

Tiger(老虎)

2004-09-30

Java SE 6.0 (1.6.0)

JDK 1.6

Mustang(野马)

2006-04

Java SE 7.0 (1.7.0)

JDK 1.7

Dolphin(海豚)

2011-07-28

Java SE 8.0 (1.8.0) LTS(长期支持)

JDK 1.8

Spider(蜘蛛)

2014-03-18

Java SE 9

JDK 1.9

2017-09-21

Java SE 10

JDK 10

2018-03-14

Java SE 11 LTS(长期支持)

JDK 11

2018-09-26

Java SE 12

JDK 12

2019-03-20

Java SE 13

JDK 13

2019-09-17

Java SE 14

JDK 14

2020-03-17

Java SE 15

JDK 15

2020-09

Java SE 16

JDK 16

2021-03

Java SE 17 LTS(长期支持)

JDK 17

2021-09

Java SE 18

JDK 18

2022-03-22 

Java SE 19 

JDK 19

2022-09-20

Java SE 20 JDK 20 2023-03-21 
Java SE 21 LTS(长期支持) JDK 20 2023-09-19
Java SE 22 JDK 20 2024-03-19

每代JDK版本的主要特性和改进

将进一步详细描述每个JDK版本的主要特性和改进,涵盖从JDK 1.0到JDK 22的每个重要版本。以下是每个版本的详细更新内容:

       JDK 1.0  (1996)      

基础API:包含了基本的核心类库,例如java.lang(基础类)、java.util(集合类和工具类)、java.io(输入输出流)、java.awt(图形用户界面)。

AWT(Abstract Window Toolkit):提供了基本的图形用户界面组件,如按钮、文本框等,但相对简单。

支持Java Applet:允许在网页中嵌入Java小程序(Applet)。

JDK 1.1 (1997)

事件模型:增强了AWT事件处理模型,支持事件监听器,用于处理用户交互事件(如点击、输入)。JavaBeans:引入了可重用组件的模型,JavaBeans使得开发工具可以处理可重用的Java组件。JDBC(Java Database Connectivity):提供了访问数据库的标准接口,简化了数据库操作。RMI(Remote Method Invocation):允许Java对象在网络上调用其他Java对象的方法,实现分布式计算。JNDI(Java Naming and Directory Interface):提供目录服务和命名服务,用于访问目录和命名信息(如LDAP)。反射API:允许程序在运行时检查和操作类、方法、字段等信息,增强了动态编程能力。JDK 1.2 (1998)

Java 2:重新设计了Java平台,引入了新的体系结构和功能。Swing:提供了丰富的用户界面组件,替代了AWT,并提供了更高的灵活性和可扩展性。Collections Framework:引入了List、Set、Map等集合类,提供统一的接口和操作方式,提高了数据结构的处理能力。Java Plug-in:使得Java应用程序可以嵌入到浏览器中运行,提高了Web应用的互动性。Java 2D API:提供了高质量的图形绘制和图像处理能力,用于生成复杂的2D图形。RMI-IIOP:允许Java RMI与CORBA(Common Object Request Broker Architecture)进行互操作,使得不同系统之间可以进行远程方法调用。JDK 1.3 (2000)

即时编译器(JIT):提升了Java应用程序的执行性能,通过即时编译将字节码转换为本地机器码。性能改进:改进了RMI和JNDI的性能,提高了Java程序的响应速度和效率。JDK-Internal APIs:改进了Java内部API的实现,提高了内部操作的性能和可用性。增强的安全性:增强了Java平台的安全机制,包括改进了沙箱模型和权限控制。JDK 1.4 (2002)

NIO(New I/O):引入了通道(Channel)和缓冲区(Buffer),支持高效的I/O操作,改进了文件和网络数据传输的性能。正则表达式:通过java.util.regex包提供了正则表达式的支持,简化了复杂字符串处理的操作。Logging API:通过java.util.logging包提供了标准化的日志记录机制,用于记录和管理日志信息。断言:引入了断言机制,用于程序的调试和验证,通过assert关键字支持断言条件。XML处理:增强了对XML文档的支持,包括对SAX(Simple API for XML)和DOM(Document Object Model)解析器的改进。JDK 5 (2004)

泛型(Generics):提供了类型安全的集合操作,避免了类型转换错误,通过<>符号进行泛型定义。注解(Annotations):允许在代码中添加元数据,用于代码生成、文档生成或编译时检查,使用@符号进行定义。枚举(Enums):引入了枚举类型,提供了更强的类型安全和代码的可读性。增强型for循环:简化了对集合和数组的遍历,使用for-each语法。可变参数(Varargs):允许方法接受不定数量的参数,通过...语法简化了方法调用和参数传递。JDK 6 (2006)

性能改进:包括对JVM性能的提升,优化了Java编译器和垃圾回收机制。脚本语言支持(JSR 223):通过javax.script API支持脚本语言(如JavaScript),增强了与动态语言的集成能力。编译器API:提供了javax.tools包,用于访问Java编译器,支持代码分析和处理。改进的Javadoc:生成更丰富的文档和API说明,改进了Javadoc工具的功能。JDK 7 (2011)

钻石操作符:简化了泛型实例化,通过<>符号推断泛型类型,减少了类型声明的重复。try-with-resources:简化了资源管理,自动关闭实现了AutoCloseable接口的资源(如文件、数据库连接)。多重捕获:允许在一个catch块中捕获多个异常类型,减少了重复代码。改进的NIO2:引入了Path类和文件系统API的增强功能,支持异步文件I/O操作。字面量改进:在数字字面量中支持使用下划线,提高了代码的可读性。JDK 8 (2014)

Lambda表达式:引入了函数式编程的概念,允许使用->语法简化对集合操作的表示。Streams API:提供了函数式风格的集合处理,支持顺序和并行流操作,通过Stream接口处理数据流。Optional类:用于处理可能为空的值,避免null引发的空指针异常,提供了更安全的空值处理方式。新的日期和时间API:引入了java.time包,提供了全面的日期时间处理功能,替代了老旧的java.util.Date和java.util.Calendar类。默认方法:接口可以包含默认实现的方法,允许接口增加新方法而不影响实现类。Nashorn JavaScript引擎:替代了Rhino引擎,提供了更高效的JavaScript执行性能。JDK 9 (2017)

模块系统(JPMS):引入Java平台模块系统,通过module-info.java文件将应用程序和JDK划分为模块,改进了模块化管理和依赖管理。JShell:提供了交互式Java命令行工具,用于即时执行Java代码,支持快速实验和调试。增强的Javadoc:改进了Javadoc工具,生成更友好的文档输出,支持HTML5。Stack-Walking API:提供了高效的堆栈遍历API,支持更灵活的堆栈操作和性能监控。JDK 10 (2018)

局部变量类型推断:引入var关键字,简化了局部变量的声明,通过类型推断自动确定变量类型。G1 GC改进:进一步优化了G1垃圾回收器,减少了垃圾回收的停顿时间,提高了性能。应用类数据共享(AppCDS):允许共享类元数据,提升了启动性能并减少了内存消耗。并发性改进:优化了多线程和并发操作的性能,提高了程序的响应速度和稳定性。JDK 11 (2018)

LTS(长期支持)版本:提供了长期的支持和稳定性,适用于企业和生产环境。新的字符串方法:如isBlank(检查字符串是否为空白)、lines(按行拆分字符串)、strip(去除前后空白)等,改进了字符串处理能力。HTTP客户端API:提供了标准的HTTP客户端API,支持同步和异步HTTP请求,简化了网络编程。移除的模块:移除了Java EE和CORBA模块,简化了JDK,减少了不再使用的功能。ZGC(Z Garbage Collector):实验性垃圾回收器,旨在提供低延迟和高性能的垃圾回收,支持大内存应用的高效回收。JDK 12 (2019)

JVM常量动态:增强了JVM对动态常量的支持,改进了对语言和平台扩展的处理。Shenandoah GC:引入了低延迟垃圾回收器,旨在减少垃圾回收的停顿时间。切换表达式(Preview):引入了更强大的switch表达式,通过->符号支持更简洁的多分支语法。改进的NullPointerException:增强了异常信息,提供更详细的空指针异常报告,便于调试。JDK 13 (2019)

文本块(Preview):引入多行字符串文字(Text Blocks),简化了多行字符串的书写和维护。动态类文件常量:提供了更灵活的类文件常量支持,优化了类文件的处理方式。改进的ZGC:增强了ZGC的功能,提高了性能和稳定性。JDK 14 (2020)

记录类(Records)(Preview):引入记录类,用于简化数据承载类的定义,减少样板代码。封闭类(Sealed Classes)(Preview):支持限制类的继承,提供更严格的类层次结构控制。NVM(Non-Volatile Memory)支持:提供了对非易失性内存的改进支持,增强了JVM对新型内存技术的兼容性。JDK 15 (2020)

文本块(正式发布):文本块功能正式发布,提供了多行字符串的支持,简化了文本处理。ZGC(正式发布):ZGC垃圾回收器正式发布,提供低延迟垃圾回收的标准支持。密封类(Sealed Classes)(正式发布):密封类功能正式发布,允许限制类继承的范围,提供更严格的类型安全。JDK 16 (2021)

记录类(正式发布):记录类功能正式发布,简化了数据承载类的定义。JEP 394:移除了Solaris和SPARC平台的支持,简化了JDK的维护。JEP 395:对Unix域套接字(Unix Domain Sockets)的支持,增强了网络编程能力。JDK 17 (2021)

LTS(长期支持)版本:提供了长期支持,适用于生产环境和企业级应用。Pattern Matching for switch(Preview):增强了switch表达式的模式匹配功能,提高了代码的灵活性。Sealed Classes(正式发布):密封类功能正式发布,提供了更严格的继承控制。JDK 18 (2022)

Unicode 14.0:更新了对Unicode 14.0标准的支持,改进了字符集和符号的处理。Code Snippets in Javadoc:支持在Javadoc中嵌入代码片段,提高了文档的可读性和实用性。Vector API(Incubator):引入了向量化操作的API,用于高性能的计算任务,提升了性能。JDK 19 (2022)

Pattern Matching for switch(正式发布):模式匹配功能正式发布,提高了switch表达式的灵活性。Record Patterns(Preview):引入记录模式,用于简化解构记录类的代码,增强了数据访问能力。Virtual Threads(Preview):引入虚拟线程,用于简化并发编程,提高了并发处理的效率。JDK 20 (2023)

Foreign Function & Memory API(Incubator):引入对本地函数和内存的API支持,增强了与非Java代码的交互能力。Pattern Matching for Switch(Final):模式匹配功能正式发布,进一步提高了switch表达式的使用体验。Scoped Values(Incubator):支持作用域值,用于简化和提高跨线程数据的管理和共享能力。JDK 21 (2023)

LTS(长期支持)版本:提供了长期支持,为生产环境提供稳定性和支持。Record Patterns(正式发布):记录模式功能正式发布,进一步简化数据解构操作。Virtual Threads(正式发布):虚拟线程功能正式发布,提升了并发编程的能力和性能。JDK 22 (2024)

继续优化虚拟线程:进一步提升虚拟线程的性能和功能,支持更复杂的并发模式。增强型垃圾回收:改进了垃圾回收算法,进一步提高了内存管理的效率。新特性:包括对最新语言特性的支持和性能优化,保持对现代编程需求的适应。

这些版本逐步推进了Java平台的功能和性能,为开发者提供了更强大和灵活的工具。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。