为什么 Windows 10 上的一个 java 程序有 2 Java 个平台二进制文件 运行?

Why are there 2 Java platform binaries running for one java program on Windows 10?

我有这个简单的java命令行应用程序

public static void main(String[] args) throws IOException {
        System.out.println("Hello World !");
        System.in.read();
}

当我在 Windows 10 启动它时,Windows 任务管理器显示 java.exe 的两个实例作为 Windows 命令提示进程的子进程:

  1. Java(TM) 平台 SE 二进制文件 来自

C:\Program Files\Common Files\Oracle\Java\javapath_target_383000\java.exe

  1. 打开JDK 平台二进制文件 来自

C:\Program Files\Java\jdk-15.0.1\bin\java.exe

一个 JVM 实例应该足以 运行 这个程序,为什么有两个?

编辑:我针对 JDK 1.8.0(而不是 JDK 15.0.1)编译了这个程序,现在只显示 Java(TM) Platform SE 二进制文件.

这是 Windows 上 Java 的 Oracle 安装程序的一项功能。安装程序将文件夹 C:\Program Files\Common Files\Oracle\Java\javapath_target 添加到 PATH 变量。此文件夹包含指向另一个文件夹中 java.exe 可执行文件的符号链接。此可执行文件通过检查注册表和 JAVA_HOME 来检测 latest/configured JRE 版本的位置。然后它调用实际 JRE 的 java.exe。因此,当您在控制台中调用 java 时,第一个 java.exe 不是真正的 JVM,而是一个简单的本机应用程序。为避免使用此机制,只需在 PATH 环境变量中将 javapath_target 文件夹替换为 JRE 的文件夹即可。有关更详细的说明,另请参阅 答案。