无法执行 dex:Eclipse 中超出了 GC 开销限制

Posted

技术标签:

【中文标题】无法执行 dex:Eclipse 中超出了 GC 开销限制【英文标题】:Unable to execute dex: GC overhead limit exceeded in Eclipse 【发布时间】: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 和 *** 说我必须将 -Xms40m -Xmx384m 更改为 eclipse.ini。 Conversion 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 来更改输入。 如果有人可以提供帮助,我可以将项目发送给他们。

【问题讨论】:

【参考方案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 引起的,因为你经常打开它

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

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) 保持冷静并开启代码!

【讨论】:

以上是关于无法执行 dex:Eclipse 中超出了 GC 开销限制的主要内容,如果未能解决你的问题,请参考以下文章

带有连接的 Sparkjob 中超出了 GC 开销限制

线程“main”中的异常java.lang.OutOfMemoryError:GWT应用程序中超出了GC开销限制

Unable to execute dex: GC overhead limit exceeded

Eclipse 在控制台中显示以下消息:无法执行 dex

无法使用弹性接收器连接器将数据从融合平台发送到 Elasticsearch。异常:错误处理程序中超出了容差

Python - RecursionError:比较错误中超出了最大递归深度[重复]