【发布时间】:2015-08-05 15:21:54
【问题描述】:
使用 jvm.dll 和 java.exe 作为 Eclipse 运行的 JVM 有什么区别?
免责声明
我将这个问题连同答案一起发布,因为我发现这些信息很有用,并希望与他人分享。
【问题讨论】:
使用 jvm.dll 和 java.exe 作为 Eclipse 运行的 JVM 有什么区别?
免责声明
我将这个问题连同答案一起发布,因为我发现这些信息很有用,并希望与他人分享。
【问题讨论】:
好的,只是为了解决一个困惑:在 Windows 上全新安装的 Eclipse 没有在 eclipse.ini 文件中指定 -vm 配置。
让我们看看官方 Equinox Launcher documentation 在没有指定 -vm 时是怎么说的(强调我的):
当没有指定
-vm时,启动器首先在eclipse 根目录的JRE 目录中查找虚拟机,然后在搜索路径中查找。如果 在任一位置都可以找到 Java,然后我们在 Window 上查找 JVM 共享库(jvm.dll,libjvm.so 在 *nix 平台上)相对于该 Java 可执行文件。
- 如果找到 JVM共享库,我们会加载它并使用 JNI 调用 API 来启动 vm
- 如果没有找到 JVM 共享库,我们执行 Java 启动器以在新进程中启动 vm
如您所见,jvm.dll 是首先搜索的,只有在没有找到的情况下,才使用 Java 启动器(即 java.exe 或javaw.exe) 被使用。
当使用 jvm.dll Eclipse 使用 JNI Invocation API 来
在当前进程中启动虚拟机。您将在任务管理器中只看到一个进程:
eclipse.exe
当使用 javaw.exe(或 java.exe)时,Eclipse 会执行该 Java 在新进程中启动虚拟机的启动器。您将在任务管理器中看到两个进程:
javaw.exe 将是 eclipse.exe 进程的 子进程(子进程)。
所以选择取决于你。
最推荐使用的选项之一是指定特定的 JVM 以供 Eclipse 运行。这样做可以确保您绝对确定将在哪个 JVM Eclipse 中运行,并使您免受系统更改的影响,这些更改可能会改变您系统的“默认”JVM。在这里阅读更多:Specifying the JVM
【讨论】: