代码之家  ›  专栏  ›  技术社区  ›  Angle.Bracket

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

  •  -1
  • Angle.Bracket  · 技术社区  · 5 年前

    我有一个简单的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二进制文件

    Files\Oracle\Java\javapath\u target\u 383000\Java。exe

    1. OpenJDK平台二进制文件 从…起

    enter image description here

    人们应该认为JVM的一个实例应该足以运行这个程序,那么为什么有两个呢?

    0 回复  |  直到 5 年前
        1
  •  2
  •   rmunge    5 年前

    这是Oracle Windows上Java安装程序的一项功能。安装程序将添加该文件夹 C:\Program Files\Common Files\Oracle\Java\javapath_target PATH 变量此文件夹包含指向java的符号链接。exe可在另一个文件夹中执行。此可执行文件通过检查注册表和JAVA_主页来检测最新/配置的JRE版本的位置。然后它调用java。实际JRE的exe。所以第一个java。exe不是一个真正的JVM,而是一个简单的本机应用程序,当您在控制台中调用java时,它会被执行。为了避免使用这种机制,只需在PATH环境变量中用JRE的文件夹替换javapath_目标文件夹。有关更详细的说明,请参见 this 答复

    推荐文章