在jvm.dll和java.exe(或javaw.exe)上运行Eclipse之间的区别

inf*_*k01 5 eclipse windows jvm

使用jvm.dlljava.exe作为运行Eclipse的JVM有什么区别?


免责声明
我已将此问题与答案一起发布,因为我发现此信息很有用,并希望与他人共享。

inf*_*k01 5

未指定-vm时如何启动Eclipse

好的,只是为了解决一个混乱:Windows上的Eclipse全新安装在eclipse.ini文件中没有指定-vm配置。

让我们看看Equinox Launcher 官方文档中有关未指定-vm时的情况的说明(强调我的情况):

如果未指定-vm,则启动器首先在eclipse根目录的JRE目录中查找虚拟机,然后在搜索路径中查找。如果在任一位置都找到Java,则我们将寻找相对于该Java可执行文件的JVM 共享库(Window 上的jvm.dll,* nix平台上的libjvm.so)。

  • 如果找到了JVM 共享库,我们将其加载并使用JNI调用API来启动虚拟机。
  • 如果未找到JVM共享库,我们将执行Java启动器以新流程启动vm。

如您所见,首先搜索的是jvm.dll,只有在未找到的情况下,才使用Java启动器(即java.exe或javaw.exe)。


使用jvm.dlljavaw.exe(或java.exe)之间的区别

  • 当使用jvm.dll时, Eclipse使用JNI Invocation API 在当前进程中启动vm 。您将在任务管理器中仅看到一个进程:
    eclipse.exe

  • 当使用javaw.exe(或java.exe)时,Eclipse执行该Java Launcher以在新进程中启动vm 。您将在任务管理器中看到两个进程:
    1)eclipse.exe
    2)javaw.exe(如果已配置,则为java.exe

    javaw.exe的将是子进程中的(子进程)的eclipse.exe进程。

因此,选择取决于您。阅读下面的文章,它很好地解释和说明了使用jvm.dlljavaw.exe的可能后果:Eclipse.exe和Windows进程


其他想法

最推荐使用的选项之一是为Eclipse 指定一个特定的JVM。这样做可以确保您完全确定将在哪个JVM Eclipse中运行,并使您免受可能更改系统的“默认” JVM的系统更改的影响。在此处了解更多信息:指定JVM