android 运行或打包出现java.lang.OutOfMemoryError: GC overhead limit exceeded

本文介绍了在使用Android Studio进行APK打包时遇到java.lang.OutOfMemoryError: GC overhead limit exceeded的问题及其解决方法。该问题通常发生在垃圾回收过程中,解决方式是在gradle.properties文件中的org.gradle.jvmargs设置项后添加-XX:-UseGCOverheadLimit来禁用此功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用android studio 打包apk出现java.lang.OutOfMemoryError: GC overhead limit exceeded,查了一下是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。我在JSP导大Excel的时候碰到过。
最终解决方案是,关闭该功能,在gradle.properties文件中找到这一行org.gradle.jvmargs=..这一行在最后面加入 -XX:-UseGCOverheadLimit 然后去掉前面的#号 ,重新编译,OK.

### Matlab 中解决 `java.lang.OutOfMemoryError: GC overhead limit exceeded` 错误 在 Matlab 调用 Java 程序时,可能会遇到 `java.lang.OutOfMemoryError: GC overhead limit exceeded` 错误。这通常表明垃圾回收器花费了过多时间(超过 98% 的 CPU 时间)来尝试回收内存,但回收的内存比例却非常低(小于 2%)。以下是一些解决方案: #### 1. 修改 JVM 参数以增加堆内存 可以通过调整 Matlab 启动时的 JVM 参数来增大堆内存大小。具体方法如下: - 创建编辑文件 `matlab.prf`,该文件通常位于用户主目录下的 `.matlab/R20XXx/` 文件夹中(R20XXx 是 Matlab 的版本号)。 - 在文件中添加以下内容: ```plaintext JavaMemHeapMax=4g ``` 这将设置最大堆内存为 4GB。可以根据实际需求调整值,例如 `8g` `16g`。 此更改需要重启 Matlab 才能生效[^1]。 #### 2. 禁用 `UseGCOverheadLimit` 特性 JDK 1.6 和 JDK 1.7 默认启用了 `-XX:+UseGCOverheadLimit` 参数。此参数会在垃圾回收占用过多时间且回收内存较少时抛出 `OutOfMemoryError` 异常。可以通过禁用此特性来避免此类错误: - 编辑 `matlab.prf` 文件,添加以下内容: ```plaintext JvmOptions=-XX:-UseGCOverheadLimit ``` 这样可以关闭 `UseGCOverheadLimit` 特性,允许程序继续运行即使垃圾回收效率较低[^3]。 #### 3. 调整垃圾回收器类型 某些情况下,默认的垃圾回收器可能不适合特定任务。可以尝试切换到其他垃圾回收器,例如 G1 垃圾回收器: - 在 `matlab.prf` 文件中添加以下内容: ```plaintext JvmOptions=-XX:+UseG1GC ``` G1 垃圾回收器旨在减少长时间的停顿,并适合大内存环境下的应用。 #### 4. 检查 Matlab 和 Java 的兼容性 确保 Matlab 使用的 JDK 版本与系统兼容。如果使用的是较旧版本的 Matlab JDK,可能会导致兼容性问题。建议升级到最新版本的 Matlab 和 JDK[^4]。 #### 5. 优化代码以减少内存消耗 检查 Matlab 和 Java 代码,寻找可能导致内存泄漏高内存消耗的部分。例如: - 避免创建过多的大对象。 - 及时释放不再使用的对象。 - 减少循环中的临时变量分配。 #### 示例代码:设置 JVM 参数 以下是一个示例脚本,用于动态修改 Matlab 的 JVM 参数: ```matlab function setJavaVMOptions() % 设置 JVM 参数 options = '-Xmx4g -XX:-UseGCOverheadLimit'; java.lang.System.setProperty('sun.java.command', ['matlab ' options]); end ``` 调用此函数后,重新启动 Matlab 以使更改生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值