Win11本地jdk1.8和jdk17双版本切换运行方法
目录
安装包
安装步骤
注意事项
环境变量配置
CLASSPATH
JAVA_HOME
切换及验证方法
切换
测试
JDK 1.8 与 JDK 17 核心特性对比表
总结与建议
安装包
官网下载:https://www.oracle.com/java/technologies/javase/jdk17-0-13-later-archive-downloads.html
一般建议直接获取.exe格式的,在本地进行安装:
安装步骤
下载完成后,安装包的话直接下一步安装到自己想要的目录即可,压缩包的话解压到自己想要的目录即可。
注意事项
解压版跳过此项,如果是安装版(.exe),请务必到以下位置删除这两个文件夹
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
C:\Program Files\Common Files\Oracle\Java\javapath
环境变量配置
CLASSPATH
在系统变量中新建一个CLASSPATH,添加变量值如下:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
JAVA_HOME
在系统变量里新建3个JAVA_HOME
三个JAVA_HOME分别是:
变量 | 值 |
JAVA_HOME | %JAVA_HOME8% (这里这样写是使用JAVA8,切换17,就换成%JAVA_HOME17%) |
JAVA_HOME8 | C:\Program Files\Java\jdk1.8.0_202 (写自己的java8的安装目录) |
JAVA_HOME17 | C:\Program Files\Java\jdk-17 (写自己的java17的安装目录) |
JDK的安装目录复制到bin的上一级就可以了:
本地配置好的环境变量如下:【建议直接配置系统变量,这样可以针对电脑全部生效】
本地配置好的path路径:
切换及验证方法
切换
测试
Win + R 输入cmd打开命令提示符,键入
java -version
就可以查看你现在所启用的jdk版本信息(注意:修改完环境变量后,必须重新打开一个新的cmd窗口进行查看!!!)
JDK 1.8 与 JDK 17 核心特性对比表
特性维度 | JDK 8 (LTS) | JDK 17 (LTS) | 说明与影响 |
---|---|---|---|
发布年份 | 2014年 | 2021年 | JDK 17 是 8 之后又一个重要的长期支持版本。 |
许可证 | Oracle BCL | GPLv2+CE | JDK 17+ 的Oracle发行版使用免费的GPL许可证,消除了之前的商业使用顾虑。 |
语言特性 | Lambda 表达式 Stream API 方法引用 默认方法 新的日期API | 密封类 (Sealed Classes) 模式匹配 (instanceof, switch预览) 文本块 (Text Blocks) Records (记录类) | JDK 8 引入了函数式编程,是革命性的。JDK 17 进一步提供了更强的数据建模能力(Records, Sealed Classes)和更简洁的语法(模式匹配)。 |
API 更新 | java.time java.util.stream CompletableFuture | 新的HTTP客户端 (标准) 增强的字符串方法 (如 isBlank() , lines() )Flight Recorder (JFR) API Vector API (孵化器) | JDK 17 提供了大量现代、易用的新API,同时将很多孵化器模块变为标准(如HTTP Client)。 |
性能提升 | 基础性能 | 显著提升: - G1GC 更加成熟稳定 - ZGC (低延迟垃圾收集器) - ShenandoahGC (低延迟GC) - JVM优化(如元空间优化) | JDK 17 在吞吐量和延迟方面都有巨大进步,特别是提供了专为低延迟场景设计的ZGC和Shenandoah。 |
垃圾收集器 | Parallel GC (默认) CMS (已废弃) G1GC (早期) | G1GC (默认) ZGC ShenandoahGC Serial GC Parallel GC CMS (已移除) | JDK 17 移除了CMS,提供了更先进的ZGC和Shenandoah,其暂停时间不受堆大小影响。 |
模块化 | 无 | Java 平台模块系统 (JPMS) | JDK 9 引入的模块化系统在JDK 17中已非常成熟,提供了更好的封装性和更小的运行时镜像。 |
容器支持 | 差 | 原生容器支持 | JDK 10+ 可以正确检测容器设置的CPU和内存限制,无需额外参数。在JDK 8中需使用 -XX:+UseCGroupMemoryLimitForHeap 等实验性参数。 |
安全性 | 基础安全特性 | 增强: - 强封装:默认阻止通过反射访问内部API - 新的安全算法 - 移除弱加密算法 | JDK 17 的安全性大幅增强,默认配置更安全,但可能需要对一些依赖非法反射的旧库进行升级。 |
内存管理 | 永久代 (PermGen) | 元空间 (Metaspace) | JDK 8 已将 PermGen 移至 Metaspace,但JDK 17 对 Metaspace 的内存分配和回收进行了大量优化。 |
打包与交付 | 仅JRE/JDK | jlink:可创建自定义运行时镜像 jpackage:打包原生安装程序 | 可以创建更小、只包含所需模块的JRE,便于分发,也支持直接打包成exe/msi/dmg/rpm等格式。 |
监控与诊断 | JMC (商业特性) JVisualVM | JFR (开源) JMC (开源) 增强的JFR事件 | JDK Flight Recorder (JFR) 在JDK 11后成为开源功能,提供了极佳的生产环境 profiling 能力。 |
已移除/废弃 | Applet API, PermGen | 移除了大量内容: - Applet API (彻底移除) - Security Manager (废弃) - J2EE & CORBA 模块 - Nashorn JavaScript 引擎 | JDK 17 更加精简,移除了许多过时或不再维护的API,推动生态向现代化发展。 |
总结与建议
方面 | 结论 |
---|---|
性能 | JDK 17 胜出。无论是GC性能(ZGC/Shenandoah)、即时编译器(JIT)优化还是整体吞吐量,JDK 17 相比 JDK 8 都有显著提升。 |
安全性 | JDK 17 胜出。更强的默认封装、移除弱算法、及时的安全补丁,使得JDK 17 更安全。 |
现代化 | JDK 17 胜出。提供了Records、密封类、模式匹配等现代语言特性,让代码更简洁、更易维护。 |
稳定性 | 两者相当。两者都是LTS版本,具有长期的技术支持和向后兼容性保证。但JDK 8 已进入延展支持阶段(Oracle收费),而JDK 17 在主流支持期内。 |
生态兼容性 | JDK 8 胜出(目前)。由于JDK 8 市场占有率最高,几乎所有库和框架都对其有完美支持。迁移到JDK 17 可能需要升级部分第三方库的版本。 |
升级建议:
-
对于新项目:强烈推荐直接使用 JDK 17。这是一个现代化、高性能、免费的起点,可以充分利用最新的语言特性和性能优势。
-
对于现有项目:建议制定计划,逐步从 JDK 8 升级到 JDK 17。虽然可能需要一些代码和依赖库的调整,但所带来的性能提升、安全性增强和开发效率的提高通常是值得的。可以先升级到 JDK 11,再升级到 JDK 17,以平滑过渡。