【问题标题】:Why are there 2 Java platform binaries running for one java program on Windows 10?为什么在 Windows 10 上为一个 Java 程序运行 2 个 Java 平台二进制文件?
【发布时间】:2021-04-01 01:31:24
【问题描述】:

我有这个简单的 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) Platform SE 二进制来自

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

  1. OpenJDK 平台二进制文件来自

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

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

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

【问题讨论】:

  • 它们很可能是运行两个不同 Java 程序的两个不同的运行 Java 进程!
  • @Seelenvirtuose : 不 - 因为当程序退出时,它们都消失了
  • 是的,因为一个Java程序只能在一个Java进程中运行!所以它必须是别的东西。你的假设是错误的!
  • 这个 Windows 命令 shell 中肯定只有一个 Java 程序在运行
  • where java 打印什么?也许 javapath_target_383000 版本是一个不必要的包装器,它会启动另一个。

标签: java jvm windows-10


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多