【问题标题】:Why I cannot set -Xmx to 1024m in eclipse.ini?为什么我不能在 eclipse.ini 中将 -Xmx 设置为 1024m?
【发布时间】:2012-04-18 10:25:32
【问题描述】:

当我尝试设置 -Xmx1024m 时,我收到消息:

cannot create VM

但在我的电脑上近 1500m 是免费的。怎么可能? 谢谢。

【问题讨论】:

  • 您可能有 1500m 的空闲空间,但它可能过于碎片化,无法为 JVM 分配一个 1 gig 的块。
  • 我不认为这是诊断。这只是最大值。你确定你知道怎么写eclipse.ini吗?你有 -vmargs 吗?
  • @MarkoTopolnik Java 将在启动时保留一个连续的虚拟内存空间,如果虚拟内存过于碎片化并且没有 1 GB 的连续块可用,那么 Java 将停止并出现错误
  • @MarkRotteveel 这很有趣,虚拟内存怎么会碎片化?我在谷歌搜索,但没有得到任何有用的东西。你能帮我找到一个好的来源吗?
  • @MarkoTopolnik 见blogs.oracle.com/moazam/entry/why_can_t_i_allocate(曾经有更好的参考,但在 Sun -> Oracle 网站搞砸之后,我似乎再也找不到它了)。我在这里假设 OP 使用的是 32 位 JVM。

标签: java eclipse memory jvm


【解决方案1】:

我相信 cmets 是正确的,因为内存空间过于碎片化而无法分配足够大的内存块。

查看 Eclipse 错误 https://bugs.eclipse.org/bugs/show_bug.cgi?id=188968

碎片通常归咎于 Windows dll 被加载到地址空间的中间。特别是,启动画面需要加载 user32.dll,这反过来又可以根据您的计算机上安装的内容拉入 3rd 方库。

获得更多内存的一种方法是让 JVM 分叉到第二个进程中,而不是在 eclipse 进程中运行(这是默认设置)。这个wiki page 详细说明了 eclipse.ini 文件的 -vm 设置。您可以通过将 -vm 设置为指向 javaw.exe 来强制在第二个进程中分叉虚拟机。

这应该会有所帮助,因为在第二个进程中分叉 jvm 会在加载图形 dll 以显示启动屏幕之前启动 vm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 2023-04-03
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2011-03-17
    • 2020-12-03
    • 2012-08-14
    相关资源
    最近更新 更多