【问题标题】:Unable to execute dex: GC overhead limit exceeded in Eclipse无法执行 dex:Eclipse 中超出了 GC 开销限制
【发布时间】:2012-03-17 06:58:17
【问题描述】:

当我下载Git项目OsmAnd并去编译它时, Eclipse 返回了这些错误:

[Dex Loader] Unable to execute dex: GC overhead limit exceeded
[OsmAnd]     Conversion to Dalvik format failed: 
             Unable to execute dex: GC overhead limit exceeded

Google 和 Stackoverflow 说我必须将 -Xms40m -Xmx384m 更改为 eclipse.iniConversion to Dalvik format failed: Unable to execute dex: Java heap space.
我清理了项目并重新启动了 Eclipse,但它没有帮助。

我找到了这个链接:Tips for Android developer: “Conversion to Dalvik format failed: Unable to execute dex: null” 但我不知道我的项目中的哪个.jar 来更改输入。 如果有人可以提供帮助,我可以将项目发送给他们。

【问题讨论】:

    标签: java android out-of-memory dalvik


    【解决方案1】:

    可以通过更改 Eclipse.ini 中的 VM 值来修复它。将值设置为 512 和 1024,如下所示:

    openFile
    --launcher.XXMaxPermSize
    512M
    -showsplash
    org.eclipse.platform
    --launcher.defaultAction
    openFile
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms512m
    -Xmx1024m
    

    图片中的变化区域

    【讨论】:

    • 谢谢。我想知道为什么默认值仍然如此绝对不足,我认为没有人以低于 512/1024 的速度运行 eclipse - 我只是达到了两倍。另外,我希望这些设置存储在我的主目录中的某个配置文件中,而不是每次升级都会覆盖的 ini 文件中。
    • 你需要--launcher.XXMaxPermSize 512m两次吗?
    • 这些数字有什么限制?我应该考虑把它们放多高?
    • @MuhammadRiyaz 这取决于您的操作系统以及您使用的是 32 位还是 64 位 JVM。如果您使用的是 64 位 JVM,则可以安全地将其设置为小于 RAM 大小减去操作系统/其他应用程序开销的任何值。在 32 位 VM 上,您需要将其保持在小于 1500M(在 Linux 上)或 1100M(在 Windows 上),因为 VM 需要分配连续的地址空间,而这对于 32 位应用程序来说是非常有限的资源。
    • -XX:MaxPermSize=1024m -Xms1024m -Xmx2048m 帮助
    【解决方案2】:

    对我来说,以下步骤有效

    1) Open eclipse.ini file
    2)changed
    -Xms40m
    -Xmx512m
    to 
    -Xms512m
    -Xmx1024m
    
    3)Restart eclipse
    

    See here

    【讨论】:

    • 在 OSX 上 eclipse.ini 文件在 Eclipse.app/Contents/MacOS/ 上
    【解决方案3】:

    eclipse.ini 看起来像这样。

    -startup
    plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20140116-2212
    -product
    org.eclipse.epp.package.jee.product
    --launcher.defaultAction
    openFile
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256m
    --launcher.defaultAction
    openFile
    --launcher.appendVmargs
    -vmargs
    -Dosgi.requiredJavaVersion=1.6
    -XX:MaxPermSize=256m
    -Xms40m
    -Xmx512m
    -Xmx1024m
    

    【讨论】:

      【解决方案4】:

      让我假设这个问题是由 Android XML 引起的,因为你经常打开它

      StackOverFlow 上的以下两个问题是相互关联的:

      Every time I click on an Android XML file in Eclipse, it loads data for all API versions

      Unable to execute dex: GC overhead limit exceeded

      除了增加 VM 值或降级到旧 ADT 版本(22.6.2 或 23.2)之外,我找到了另一种解决方案来解决此问题

      注意:

      一些较旧的 ADT 版本不会在您每次打开时都加载 XML,因此不会导致内存溢出导致此 GC 开销限制超出,如第一节所述线程

      解决方案:

      在 Eclipse 的底部会有一个垃圾桶符号,表示 Run Garbage Collector。每当您关闭 android 的 XML 文件时,不要忘记单击 Trash CanRun Garbage Collector 以释放内存。这样您就可以保护工作区免受此类错误的影响:D

      这可能是一个终极解决方案,因为如果你经常打开你的 android XML,特别是如果你像我一样做很多 UI 工作,你就不能将 VM 值增加到超过 RAM 限制:P

      我希望这会帮助到这个帖子的每个人:)

      保持冷静并开启代码

      【讨论】:

        【解决方案5】:

        在出现此错误 12 小时后,更改 eclipse.ini 文件没有成功,我终于找到了正确的解决方案。在我的环境变量中有一个名为“_JAVA_OPTIONS”的变量,其中包含值“-Xmx512M”。将此值更改为与 eclipse.ini (-Xmx4096M) 中相同的值,我再次能够将我的项目导出到 APK 文件。

        【讨论】:

        • 实际上这可能是一个非常重要的提示,您可以从系统变量中删除 _JAVA_OPTIONS(使用快速环境编辑器),否则 proguard 可能会因某种原因开始抱怨。非常感谢维克托
        【解决方案6】:

        我不知道这种变通方法背后的原因,但它一直对我有用,而上述所有方法都不起作用。

        不要从快捷方式或链接启动 Eclipse。始终从 eclipse 文件夹中的 eclipse.exe 打开它,该文件夹包含 eclipse.ini

        注意 - 我只为 linux 尝试过。

        【讨论】:

          【解决方案7】:

          为了避免这个烦人的消息,我不得不改变我的配置如下:

          -startup
          plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
          --launcher.library
          plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-
          
          144807
          -product
          com.android.ide.eclipse.adt.package.adtproduct
          -showsplash
          org.eclipse.platform
          --launcher.XXMaxPermSize
          1024m
          --launcher.defaultAction
          openFile
          -vmargs
          -Dosgi.requiredJavaVersion=1.6
          -XX:MaxPermSize=256m
          -Xms512m
          -Xmx1024m
          

          基于标记为正确的答案,正在更改

          -XX:MaxPermSize=256m
          -Xms512m
          -Xmx1024m
          

          和:

          --launcher.XXMaxPermSize
          1024m
          

          【讨论】:

            【解决方案8】:
            1) Open eclipse.ini file
            2)change
            -Xms40m
            -Xmx512m
            to 
            -Xms512m
            -Xmx1024m
            3)Restart eclipse
            

            同样的 eclipse.ini 文件将位于 Eclipse 中 Eclipse 本身的这个根路径中,例如:

            C:\Users\username\Downloads\adt-bundle-windows-x86_64-20140702\eclipse\eclipse.ini
            

            相同的文件将位于 android studio 项目中:-

            C:\Users\username\AppData\Local\Android\sdk\tools\lib\monitor-x86_64\monitor(Type:Configuration settings)
            

            【讨论】:

              【解决方案9】:

              如果这些答案不起作用(它们不适合我),那么试试这个:

              1) 在工作区中复制 .metadata 文件夹。

              2) 复制后删除您的 .metadata 目录

              3) 打开 Eclipse 并关闭 Eclipse。

              4) 将插件文件夹从旧的 .metadata 复制到新的 .metadata

              5) 将所有项目重新导入您的工作区

              6) 保持冷静并开启代码!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-05-21
                • 1970-01-01
                • 2017-06-12
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多