文章目录
前言
JDK
Java Development Kit 是 Java 语言的软件开发工具包。
一、JDK
1. 简介
JDK(Java Development Kit) 是 Java 语言的软件开发工具包。主要用于应用程序、移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+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。
- ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
2. 版本
以下是各版本的名称及发布日期:
| 版本 | 名称 | 发行日期 |
|---|---|---|
| JDK 1.1.4 | Sparkler(宝石) | 1997-09-12 |
| JDK 1.1.5 | Pumpkin(南瓜) | 1997-12-13 |
| JDK 1.1.6 | Abigail(阿比盖尔–女子名) | 1998-04-24 |
| JDK 1.1.7 | Brutus(布鲁图–古罗马政治家和将军) | 1998-09-28 |
| JDK 1.1.8 | Chelsea(切尔西–城市名) | 1999-04-08 |
| J2SE 1.2 | Playground(运动场) | 1998-12-04 |
| J2SE 1.2.1 | none(无) | 1999-03-30 |
| J2SE 1.2.2 | Cricket(蟋蟀) | 1999-07-08 |
| J2SE 1.3 | Kestrel(美洲红隼) | 2000-05-08 |
| J2SE 1.3.1 | Ladybird(瓢虫) | 2001-05-17 |
| J2SE 1.4.0 | Merlin(灰背隼) | 2002-02-13 |
| J2SE 1.4.1 | grasshopper(蚱蜢) | 2002-09-16 |
| J2SE 1.4.2 | Mantis(螳螂) | 2003-06-26 |
| J2SE 5.0 | - | 2004-09 |
| Java SE 5.0 (1.5.0) | Tiger(老虎) | 2004-09-30 |
| Java SE 6.0 (1.6.0) | Mustang(野马) | 2006-04 |
| Java SE 7.0 (1.7.0) | Dolphin(海豚) | 2011-07-28 |
| Java SE 8.0 (1.8.0) | Spider(蜘蛛) | 2014-03-18(LTS) |
| Java SE 9 | - | 2017-09-21 |
| Java SE 10 | - | 2018-03-14 |
| Java SE 11 | - | 2018-09-26(LTS) |
| Java SE 12 | - | 2019-03-20 |
| Java SE 13 | - | 2019-09-17 |
| Java SE 14 | - | 2020-03-17 |
| Java SE 15 | - | 2020-09 |
| Java SE 16 | - | 2021-03 |
| Java SE 17 | - | 2021-09(LTS) |
| Java SE 18 | - | 2022-03-22 |
| Java SE 19 | - | 2022-09-20 |
| Java SE 20 | - | 2023-03-21 |
| Java SE 21 | - | 2023-09-19(LTS) |
| Java SE 22 | - | 2024-03-19 |
| Java SE 23 | - | 2024-09-17 |
| Java SE 24 | - | 2025-03-18 |
| Java SE 25 | - | 预计2025-09(LTS) |
二、组成
JDK包含的基本组件包括:
-
javac:源程序编译器,将Java源代码转换成字节码。
-
java: Java解释器,直接从字节码文件,又称为类文件。执行Java应用程序的字节代码,即,运行编译后的java程序(.class后缀的)
-
jar:java应用程序打包工具,可将多个类文件打包成单个JAR归档文件。
-
javadoc:Java API文档生成器,从Java源程序代码注释中提取文档,生成API文档HTML页。
-
jdb:Java Debugger,Java官方提供的命令行调试工具,它允许开发者通过命令行界面与Java程序进行交互,进行断点设置、单步执行、变量查看等调试操作。
-
applet viewer:Java applet(小程序)浏览器,一种执行HTML文件上的Java小程序的Java浏览器。applet viewer命令可在脱离万维网浏览器环境的情况下运applet。
-
jps:查看Java虚拟机进程列表。
-
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
-
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
-
Jconsole:Java进行系统调试和监控的工具。
-
jdk结构图

三、分类
- java.lang: 这个是系统的基础类,比如String等都是这里面的,这个包是一个可以不用引入(import)就可以使用的包。
- java.io: 这里面是所有输入输出有关的类,比如文件操作等。
- java.nio:为了完善io包中的功能,提高io包中性能而写的一个新包 ,例如NIO非堵塞应用
- java.net:这里面是与网络有关的类,比如URL,URLConnection等。
- java.util: 这个是系统辅助类,特别是集合类Collection,List,Map等。
- java.sql: 这个是数据库操作的类,Connection, Statement,ResultSet等。
- javax.servlet:这个是JSP,Servlet等使用到的类。
四、环境配置
1.Windows环境
java运行环境安装与测试及HelloWorld的实现。
-
下载j2sdk 1.6.0_21或更高版本 (http://java.sun .com,建议同时下载其Java Documentation,这是Java帮助文档)。
-
运行刚刚下载的安装程序进行正式安装(以下假设安装于c:\jdk1.6.0_21\,建议安装路径不要有空格,不宜安装在\Program Files目录下)。
-
设置运行环境参数:
系统变量->新建->变量名:JAVA_HOME 变量值:JDK安装目录
系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib
系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;
(CLASSPATH中有一英文句号“.”后跟一个分号,表示当前路径的意思)
(使用命令行的方法设置环境变量,只会对当前窗口生效)
(改Path变量时,不是删除原有的值而是添加新的路径) -
使用文本编辑器(比如:edit .com/记事本/UltraEdit/EditPlus)编写如下代码,并保存为文件:HelloWorld.java(必须大小写正确!假设为c:\test\HelloWorld.java)
/* HelloWorld.java */
public class HelloWorld
{
public static void main(String[] argv)
{
System.out.println("Hello,World!");
}
}
- 开启一个命令提示符窗口,跳转到HelloWorld.java所在的目录中
c:\>cd \test
- 编译HelloWorld.java为HelloWorld.class
c:\test>javac HelloWorld.java
- 运行HelloWorld.class
c:\test>java HelloWorld
Hello,World!
其中,步骤5~7可以简化成批处理,这样可以不用切换路径,方法如下:
在java源文件所在文件夹建立一个记事本文档,输入以下3行代码
javac HelloWorld.java
java HelloWorld
@pause
将其保存为"Java运行批处理.bat"
然后双击这个批处理文件,将出现cmd窗口下的编译运行结果,结果如下:
C:\test>javac HelloWorld.java
C:\test>java HelloWorld
Hello,World!
请按任意键继续. . .
五、JDK主流LTS版本比较
1.概述
JDK 是 Java 开发的核心,每个版本的更新都带来了新的特性和优化,下面总结 JDK 8、17 与 21 的关键特性与区别。通过深入了解 JDK 版本演进,为实际开发提供指导!
从 JDK 8 的函数式编程到 JDK 17 的长期支持(LTS),再到 JDK 21 的最新性能优化,选择适合的 JDK 版本是开发者必须掌握的技能。
- 每个版本的主要特性与亮点 🚀
- 它们的核心区别与技术优化方向
- 不同应用场景下的版本选择建议
2. JDK 版本特性解析
2.1 JDK 8:开启函数式编程新时代
-
发布日期:2014 年 3 月
-
使用比例:约30-35%(存量最大,但持续下降)
-
特点:
- 最后支持Applet和Java Web Start的版本
- 默认GC为Parallel/CMS,性能稳定但延迟较高
- 缺乏现代语法特性(如Lambda、Stream API需额外适配)
-
特性举例:
- Lambda 表达式:支持函数式编程,简化代码。
Runnable r = () -> System.out.println("Hello Lambda!");
r.run();
适用场景:需要简化代码逻辑、提高开发效率的场景。
- Stream API:引入流式处理数据的强大工具。
List<String> items = Arrays.asList("a", "b", "c");
items.stream().filter(s -> s.equals("b")).forEach(System.out::println);
适用场景:数据处理和集合操作。
-
默认方法(Default Methods):接口中可定义默认实现。
-
新日期和时间 API:解决传统日期类的痛点。
LocalDate date = LocalDate.now();
System.out.println(date);
2.2 JDK11:长期支持版本的过渡
- 发布日期:2018 年 9 月
- 使用比例:约45-50%(企业升级首选过渡版本)
- 关键改进:
- 模块化系统(JPMS)、内置HTTP Client API
- ZGC(实验性低延迟GC)、TLS 1.3支持
- 移除Java EE和CORBA模块
2.3 JDK 17:长期支持版本的强大升级
-
发布日期:2021 年 9 月
-
使用比例:快速增长中(约15-20%)
-
核心特性:
- 密封类(Sealed Classes)、文本块(Text Blocks)
- 增强模式匹配(
instanceof优化) - ZGC正式生产可用,容器支持优化
-
生态兼容:Spring Boot 3.x最低要求版本
-
特性举例:
- Sealed Classes:限制继承的类,增强安全性。
public sealed class Shape permits Circle, Rectangle {}
public final class Circle extends Shape {}
public final class Rectangle extends Shape {}
- Pattern Matching for Switch:简化多分支逻辑。
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
}
- Text Blocks:支持多行文本,提升代码可读性。
String json = """
{
"name": "cat",
"type": "feline"
}
""";
- 增强的 Garbage Collection(GC):默认使用
G1 GC提升性能。
2.4 JDK 21:性能与并发的全面优化
-
发布日期:2023 年 9 月
-
定位:最新LTS版本(2023年发布)
-
革命性特性:
- 虚拟线程(Virtual Threads):轻量级并发模型,提升高并发吞吐量
- 分代ZGC:进一步降低GC停顿时间
- Record模式匹配、序列化集合优化
-
特性细节:
- 虚拟线程(Virtual Threads):提升高并发性能。
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(() -> System.out.println("Hello Virtual Thread"));
executor.shutdown();
-
Structured Concurrency:简化并发任务的管理。
-
String Templates (Preview):动态字符串生成。
String name = "猫头虎";
String message = STR."Hello, \{name}!";
- GC 性能进一步优化:
ZGC和G1 GC的性能显著提升。
3. 版本对比表
- 各版本特性对比
| 特性 | JDK 8 | JDK 17 | JDK 21 |
|---|---|---|---|
| 函数式编程支持 | ✅ | ✅ | ✅ |
| 并发性能 | 一般 | 提升 | 极大优化 |
| 新语法特性 | 基本支持 | 增强 | 全面优化 |
| 适用场景 | 基础开发 | 企业级应用 | 高性能高并发场景 |
| 特性 | JDK8 | JDK11 | JDK17 | JDK21 |
|---|---|---|---|---|
| LTS支持截止 | 2030 | 2026 | 2029 | 2031 |
| 虚拟线程 | ❌ | ❌ | ❌ | ✅正式 |
| ZGC低延迟GC | ❌ | ⚠️实验性 | ✅生产可用 | ✅分代优化 |
| HTTP | Client | 第三方库 | ✅内置 | ✅增强 |
| 容器支持 | 基础 | 改进 | 优化 | ✅最佳实践 |
| 模式匹配 | ❌ | ❌ | ✅instanceof | ✅switch |
- 根据场景选型
| 场景 | 推荐版本 | 核心理由 |
|---|---|---|
| 旧系统升级 | JDK11→17 | 先过渡至JDK11验证兼容性,再升级至JDK17 |
| 新企业级项目 | JDK17 | 成熟稳定、广泛框架兼容(Spring6+)、支持至2029年 |
| 云原生/高并发应用 | JDK21 | 虚拟线程显著提升并发性能,分代ZGC优化延迟,支持至2031年 |
| 短期/实验性项目 | 最新非LTS | 如JDK22,快速尝试新特性(注:非LTS仅支持6个月) |
- 旧系统 → 尽快脱离JDK 8,经JDK 11过渡至JDK 17
- 保守选型 → JDK 17(平衡稳定与现代化特性)
- 激进创新 → JDK 21(虚拟线程+分代ZGC重塑性能标杆)
- 新项目务必选择LTS版本,避免陷入半年一次的非LTS升级陷阱。
4. 适用场景建议
- JDK 8 适用场景
- 适用人群:初学者、维护旧项目的开发者。
- 使用建议:适合需要兼容性强且稳定的应用场景。
- JDK 17 适用场景
- 适用人群:寻求长期支持和新特性的开发者。
- 使用建议:适合企业级应用开发,兼顾性能与功能。
- JDK 21 适用场景
- 适用人群:追求高并发和最新技术的开发者。
- 使用建议:适合性能敏感场景,如微服务和高并发任务处理。
- 总结
JDK 的迭代速度越来越快,从函数式编程到并发性能优化,每个版本都在推动 Java 技术的前进。开发者需要根据实际项目需求,灵活选择版本,既保证稳定性,又追求最新技术的优势。
未来趋势:
- 虚拟线程普及:JDK 21的虚拟线程将重塑Java高并发编程范式
- 云原生优化:容器资源感知、轻量化进程持续增强(如Project Leyden)
- 下一代特性:
* Valhalla(值类型):提升内存效率
* Panama(本地内存API):优化与非Java代码交互
5. 升级注意事项
- 兼容性验证:
- 使用jdeprscan检测废弃API依赖
- 重点检查第三方库(如Netty、Guava)的版本兼容性
- 性能监控:
- 升级后需关注GC日志(如ZGC/Shenandoah行为)和线程池变化
- 发行版选择:
- 生产环境推荐OpenJDK发行版(如Eclipse Temurin、Microsoft Build of OpenJDK),避免Oracle JDK商业授权问题
6. GC
- GC
对于JDK 8,默认的垃圾收集器(GC)是Parallel GC(也称为Throughput GC),它在大多数情况下表现良好,特别是在需要高吞吐量的应用场景中。Parallel GC使用多个线程来减少垃圾收集时的停顿时间,从而提高应用程序的整体吞吐量。
在JDK 11中,默认的垃圾收集器仍然是Parallel GC,但是JDK 11引入了几个新的垃圾收集器选项,包括:
-
Garbage-First (G1) GC - 一种低延迟的垃圾收集器,适用于具有大量内存和大容量堆的应用程序。它旨在减少垃圾收集停顿时间,提高应用的响应性和吞吐量。
-
Z Garbage Collector (ZGC) - 一种可伸缩、低延迟的垃圾收集器,适用于大内存应用。ZGC旨在在几毫秒内完成垃圾收集,并且可以动态调整堆大小。
-
Shenandoah GC - 另一种低延迟的垃圾收集器,适用于大内存应用。它通过移动对象而不是复制它们来减少停顿时间。
- 选择合适的GC
选择合适的垃圾收集器取决于应用需求:
-
吞吐量:如果你的应用需要高吞吐量,Parallel GC是一个不错的选择。
-
低延迟:对于需要快速响应的应用(如实时系统或Web应用),G1, ZGC, 或 Shenandoah可能是更好的选择。
-
大内存应用:对于大内存应用,ZGC和Garbage-First GC提供了更好的性能。
- 通过Java虚拟机(JVM)的启动参数来指定使用特定的垃圾收集器.
例如:
-XX:+UseG1GC # 使用G1垃圾收集器
-XX:+UseZGC # 使用ZGC垃圾收集器
本文的引用仅限自我学
习如有侵权,请联系作者删除。
参考知识
JDK 8、17与21特性总结:版本特性、区别与适用场景对比
JDK主流版本及推荐版本
645

被折叠的 条评论
为什么被折叠?



