Java堆空间

5
你有没有想过为什么在构建Android应用程序时,即使我已经在eclipse参数中添加了-vmargs -Xmx1024M -Xms512M,仍会出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”错误?我想知道我可能犯了什么错误,会在构建时触发这样的错误,因为在构建时只有Eclipse或Maven中的错误才会导致此类错误。我正在使用运行maven install来构建我的应用程序(使用maven android eclipse插件)。Run as->'maven package'在大约1分30秒后也会产生相同的构建失败。我的台式计算机有3GB内存,而我的应用程序并不需要那么多内存。谢谢。

你的应用程序中使用了位图函数吗? - Andro Selva
4个回答

8
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path添加到您的JVM参数中,以便在内存不足时会转储出堆。然后,您可以使用Eclipse Memory Analyserjhat浏览堆并诊断问题所在。 更新:尝试增加您的Maven Android插件的内存。在您的pom.xml中,为插件配置添加一个JVM参数Xmx
<plugin>
  <artifactId>maven-android-plugin</artifactId>
  <configuration>
    <jvmArguments>
      <argument>-Xmx1500m</argument>
    </jvmArguments>
  </configuration>
</plugin>

很抱歉,我无法成功转储堆。这些参数是否应该插入到Eclipse的“运行配置”中的“VM参数”文本框中的相同位置,例如:-Xms1024M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="C:"? - John156
哦,我的天啊,非常感谢!我已经试图解决这个问题好几天了。能否简要解释一下为什么这样做有效,为什么要使用单独的JVM,以及为什么调用进程(如eclipse、jre等)的参数不会自动设置为子进程? - John156
将这些设置传播到“子”进程并没有太多意义。为什么?它们不共享内存,每个虚拟机都有自己的内存。Eclipse可能需要768m,Maven 256m和Android插件1024m。因此,仅仅在所有地方设置最大堆是相当破坏性的。Java如何知道它只应该使用十分之一呢? - Stefan Schubert-Peters
我必须补充一点:在我的看法中,为 Android 应用程序使用这么多内存听起来很奇怪。@dogbane 的建议开始调查为什么需要这么多内存比只是需要更多的洞察力更相关。 - Stefan Schubert-Peters
1
我在哪里可以找到pom.xml文件? - Himanshu
该文件在项目目录中不存在。请指出它应该在哪里... @dogbane - user1545072

2

这个方法真的很聪明,一度让我以为它能解决我的问题。我不知道Eclipse的JVM与编译器的JVM是不同的。所以,为了明确起见,我所做的就是点击运行箭头,然后运行配置,选择我的运行配置,然后转到JRE选项卡,在“VM参数”空白文本框中添加“-Xms1024M -Xmx1024M”,然后应用并运行。但不幸的是,这并没有起作用,问题仍然存在。 - John156
是的,因为我现在意识到你正在使用Maven的Android插件和它的Eclipse集成。这意味着Eclipse编译器设置并不重要,而插件的设置才是关键。 - Stefan Schubert-Peters

1

我遇到了“Conversion to Dalvik format failed: Unable to execute dex: Java heap space”的问题。增加eclipse.ini文件中的所有值并没有帮助我解决这个问题。这个问题发生在我将ADT插件从12升级到16之后。在升级之前,我更改了指向我的现有项目的Android SDK(从连接到以前的ADT的android sdks更改为连接到新ADT的android sdks),这为我解决了问题。希望这可以帮到你。如果对某人有所帮助,请投票支持一下。


0
如果增加不起作用,那么我建议您检查您编写的每个类的行数。如果有很多对象,可能是编译器问题,因此请尝试分区方法和/或将它们复制到新类中,如果一个或多个类具有3000+行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接