所解释的问题似乎是一个普遍的问题,并且已经提出了不同的解决方案,其中许多方法都起作用。 One example of this discussion can be found here

我的问题更多是关于为什么而不是如何。

我们也一直在努力解决此问题,发现如果使用javaw.exe启动eclipse,则会出现问题,但是如果使用jvm.dll调用Eclipse,则不会出现问题。即使在两种情况下,eclipse.ini都保持不变。

为了解释我的情况,我将使用从命令行使用单个eclipse.exe参数启动-vm的示例。作为参考,以下是我们正在使用的eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx1280m
-XX:MaxPermSize=512m
-Dderby.stream.error.field=java.lang.System.err


您可以看到,分配请求的内存对于堆(1280m)和PermGen(512m)都是很大的。如果无法重现该问题,则可以尝试增加内存,直到出现错误为止。

您可以使用三种不同的命令行:

eclipse.exe -vm ..\jre\bin\javaw.exe
eclipse.exe -vm ..\jre\bin
eclipse.exe -vm ..\jre\bin\client\jvm.dll


仅第一个导致错误(javaw.exe)。其余两个选项成功启动eclipse。减少eclipse.ini中的内存需求也可以明显解决该问题。

所以我的问题是,当其他两个命令行正常工作时,为什么javaw.exe失败?选择这些不同的路径有什么区别?一个参数是否比其他参数更严格?

环境:Eclipse:3.8-win32,JRE:7u7-win32,Windows 7 x64

最佳答案

我无法解释为什么将Eclipse指向可执行文件失败,但是dll无法失败,但是我可以提供this来解释问题。要点是,在Windows上,JVM需要为您的堆分配连续的内存块,如果不能,则无法启动。

也许this page将有助于弄清楚为什么指向dll似乎可行。否则,我会问Eclipse Equinox forum

07-24 18:57
查看更多