2. 编程语言-JAVA-JDK


前言

‌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.4Sparkler(宝石)1997-09-12
JDK 1.1.5Pumpkin(南瓜)1997-12-13
JDK 1.1.6Abigail(阿比盖尔–女子名)1998-04-24
JDK 1.1.7Brutus(布鲁图–古罗马政治家和将军)1998-09-28
JDK 1.1.8Chelsea(切尔西–城市名)1999-04-08
J2SE 1.2Playground(运动场)1998-12-04
J2SE 1.2.1none(无)1999-03-30
J2SE 1.2.2Cricket(蟋蟀)1999-07-08
J2SE 1.3Kestrel(美洲红隼)2000-05-08
J2SE 1.3.1Ladybird(瓢虫)2001-05-17
J2SE 1.4.0Merlin(灰背隼)2002-02-13
J2SE 1.4.1grasshopper(蚱蜢)2002-09-16
J2SE 1.4.2Mantis(螳螂)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结构图
    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的实现。

  1. 下载j2sdk 1.6.0_21或更高版本 (http://java.sun .com,建议同时下载其Java Documentation,这是Java帮助文档)。

  2. 运行刚刚下载的安装程序进行正式安装(以下假设安装于c:\jdk1.6.0_21\,建议安装路径不要有空格,不宜安装在\Program Files目录下)。

  3. 设置运行环境参数:
    系统变量->新建->变量名:JAVA_HOME 变量值:JDK安装目录
    系统变量->新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib
    系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;
    (CLASSPATH中有一英文句号“.”后跟一个分号,表示当前路径的意思)
    (使用命令行的方法设置环境变量,只会对当前窗口生效)
    (改Path变量时,不是删除原有的值而是添加新的路径)

  4. 使用文本编辑器(比如: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!");
	}
}
  1. 开启一个命令提示符窗口,跳转到HelloWorld.java所在的目录中
c:\>cd \test
  1. 编译HelloWorld.java为HelloWorld.class
c:\test>javac HelloWorld.java
  1. 运行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 性能进一步优化ZGCG1 GC 的性能显著提升。

3. 版本对比表

  1. 各版本特性对比
特性JDK 8JDK 17JDK 21
函数式编程支持
并发性能一般提升极大优化
新语法特性基本支持增强全面优化
适用场景基础开发企业级应用高性能高并发场景
特性​​JDK8JDK11JDK17JDK21
​​LTS支持截止​​2030202620292031
​​虚拟线程​​✅正式
​​ZGC低延迟GC​​⚠️实验性✅生产可用✅分代优化
​​HTTPClient​​第三方库✅内置✅增强
​​容器支持​​基础改进优化✅最佳实践
模式匹配​​✅instanceof✅switch
  1. 根据场景选型
​​场景​​​​推荐版本​​​​核心理由​​
​​​​旧系统升级​​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. 适用场景建议

  1. JDK 8 适用场景
  • 适用人群:初学者、维护旧项目的开发者。
  • 使用建议:适合需要兼容性强且稳定的应用场景。
  1. JDK 17 适用场景
  • 适用人群:寻求长期支持和新特性的开发者。
  • 使用建议:适合企业级应用开发,兼顾性能与功能。
  1. JDK 21 适用场景
  • 适用人群:追求高并发和最新技术的开发者。
  • 使用建议:适合性能敏感场景,如微服务和高并发任务处理。
  1. 总结

JDK 的迭代速度越来越快,从函数式编程到并发性能优化,每个版本都在推动 Java 技术的前进。开发者需要根据实际项目需求,灵活选择版本,既保证稳定性,又追求最新技术的优势。

未来趋势:

  • ​​虚拟线程普及​​:JDK 21的虚拟线程将重塑Java高并发编程范式
    ​​- 云原生优化​​:容器资源感知、轻量化进程持续增强(如Project Leyden)
    ​​- 下一代特性​​:
    ​​ * Valhalla(值类型)​​:提升内存效率
    ​​ * ​​Panama(本地内存API)​​:优化与非Java代码交互

5. 升级注意事项

  1. 兼容性验证​​:
  • 使用jdeprscan检测废弃API依赖
  • 重点检查第三方库(如Netty、Guava)的版本兼容性
  1. 性能监控​​:
  • 升级后需关注GC日志(如ZGC/Shenandoah行为)和线程池变化
  1. 发行版选择​​:
  • 生产环境推荐​​OpenJDK发行版​​(如Eclipse Temurin、Microsoft Build of OpenJDK),避免Oracle JDK商业授权问题

6. GC

  1. 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 - 另一种低延迟的垃圾收集器,适用于大内存应用。它通过移动对象而不是复制它们来减少停顿时间。

  1. 选择合适的GC

选择合适的垃圾收集器取决于应用需求:

  • 吞吐量:如果你的应用需要高吞吐量,Parallel GC是一个不错的选择。

  • 低延迟:对于需要快速响应的应用(如实时系统或Web应用),G1, ZGC, 或 Shenandoah可能是更好的选择。

  • 大内存应用:对于大内存应用,ZGC和Garbage-First GC提供了更好的性能。

  1. 通过Java虚拟机(JVM)的启动参数来指定使用特定的垃圾收集器.
    例如:
-XX:+UseG1GC  # 使用G1垃圾收集器
-XX:+UseZGC   # 使用ZGC垃圾收集器

本文的引用仅限自我学
习如有侵权,请联系作者删除。

参考知识
JDK 8、17与21特性总结:版本特性、区别与适用场景对比
JDK主流版本及推荐版本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值