无法执行 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 Can 或 Run 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 开销限制的主要内容,如果未能解决你的问题,请参考以下文章
线程“main”中的异常java.lang.OutOfMemoryError:GWT应用程序中超出了GC开销限制
Unable to execute dex: GC overhead limit exceeded