为什么在Windows10上有两个java平台二进制文件运行一个java程序?

vuktfyat  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(538)

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

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

在windows 10上启动时,windows任务管理器会将两个java.exe示例显示为windows命令提示符进程的子进程:
java(tm)平台se二进制文件
c:\program files\common files\oracle\java\javapath\u target\u 383000\java.exe
openjdk平台二进制文件
c:\program files\java\jdk-15.0.1\bin\java.exe

人们应该认为jvm的一个示例应该足以运行这个程序,那么为什么有两个呢?
编辑:我根据jdk1.8.0(而不是jdk15.0.1)编译了这个程序,现在只显示java(tm)平台se二进制文件。

nlejzf6q

nlejzf6q1#

这是oracle windows上java安装程序的一项功能。安装程序将添加文件夹 C:\Program Files\Common Files\Oracle\Java\javapath_targetPATH 变量。此文件夹包含指向另一个文件夹中java.exe可执行文件的符号链接。此可执行文件通过检查注册表和java\u home来检测最新/配置的jre版本的位置。然后调用实际jre的java.exe。因此,第一个java.exe不是一个真正的jvm,而是一个简单的本机应用程序,当您在控制台中调用java时,它会被执行。为了避免使用这种机制,只需将javapath\u目标文件夹替换为path环境变量中jre的文件夹。有关更详细的描述,请参见此答案。

相关问题