
装 JDK 就够了,别单独装 JRE
如果你是写 Java 代码的人,只装 JDK 即可,它天然包含一套完整可用的 JRE。装两个独立的 JRE(比如系统级 C:\Program Files\Java\jre1.8.0_333 和 JDK 内置的 jdk-17.0.2\jre)不仅没用,还容易让 java 命令指向错版本,尤其在多 JDK 共存时。
- Windows 下安装 JDK 时,默认会把
jre/bin/java.exe复制到System32,导致你改了PATH也未必生效——实际跑的是系统目录里的那个 - IDE(如 IntelliJ、Eclipse)默认读取
JDK_HOME或项目配置的 SDK,但终端里敲java -version可能和 IDE 用的不是同一个 JRE - 检查当前生效的
java:运行where java(Windows)或which java(macOS/Linux),再对比echo %JAVA_HOME%或echo $JAVA_HOME
javac 和 java 不是同一个命令,也不一定来自同一目录
javac 必须来自 JDK/bin;而 java 命令可以来自 JDK/jre/bin,也可以来自独立 JRE 的 bin,甚至 Windows System32。这是最常被忽略的“看似能运行、实则环境混乱”的根源。
- 删掉
JDK/bin后,javac直接报错'javac' is not recognized;但java可能照常运行——这不代表你有 JDK,只说明系统某处有 JRE - 验证是否真有 JDK:执行
javac -version。如果失败,哪怕java -version显示 17,你也只是个“运行用户”,不是开发者 - Gradle/Maven 构建失败报
Could not determine java version from '17.0.2'?大概率是JAVA_HOME指向了 JRE 而非 JDK 根目录
JDK 自带的 JRE 为什么有两个 jvm.dll?
在 JDK/jre/bin/client 和 JDK/jre/bin/server 下都存在 jvm.dll,这不是冗余,而是 JVM 的两种运行模式:client(启动快、适合桌面小应用)和 server(优化强、适合长期运行服务)。现代 JDK(8u261+、JDK 9+)已默认移除 client 模式,只保留 server,但目录结构仍保留兼容性。
- 你不需要手动选哪个
jvm.dll——JVM 启动时自动根据参数(如-server)或平台决定加载路径 - 若看到错误
Error: could not open <code>JDK/jre/bin/server/jvm.cfg,通常是误删了jre子目录,或用 7-Zip 等工具解压 JDK 时破坏了内部结构 - JDK 17+ 已彻底删除
client文件夹,所以如果在最新版 JDK 里找不到它,不是你装错了,是它本来就没有
普通用户到底要不要装 JRE?现在基本不用
Oracle 自 JDK 8u202 起就不再为 JRE 单独提供下载;OpenJDK 社区版(如 Temurin、Zulu)也只发布 JDK。所谓“只运行不开发”的场景,如今更常见的是通过容器镜像(如 eclipse-temurin:17-jre)或打包工具(jlink、jpackage)生成最小化运行时,而不是装一个完整 JRE。
立即学习“Java免费学习笔记(深入)”;
- Windows 用户双击
.jar文件打不开?不是缺 JRE,而是文件关联被破坏,或系统没有注册java.exe的 MIME 类型;修复比重装 JRE 更有效 - 企业内网部署 Java 客户端软件,要求“用户零配置”?推荐用
jpackage打包成原生安装包(exe/msi/dmg),自带精简 JRE,不依赖用户环境 - 别信“绿色版 JRE”——没有签名、无更新通道、易被杀软误报,风险远大于收益
javac 能用、java -version 和 javac -version 输出一致、JAVA_HOME 指向 JDK 根目录,你就站在开发侧。其他所有“JRE 是否独立”“该不该删 jre 文件夹”之类的问题,都是路径没理清导致的幻觉。










