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