首页 > 解决方案 > 很多库导致原因:java.lang.OutOfMemoryError

问题描述

我有很多应用程序被搁置并放弃了,因为它们有很多库和类,所以最终我得到了这个内存错误。最近我开始使用 JProfiler。但是仍然没有帮助不导致它应用程序变得有点大,现在又发生了这种情况。查看我的设置:

在 gradle.properties 中

org.gradle.jvmargs=-Xmx16g -XX:MaxPermSize=16g -XX:+HeapDumpOnOutOfMemoryError
GRADLE_OPTS=-Xmx16g

在 gradle(应用程序)中

dexOptions { javaMaxHeapSize "16g" }

听起来这些值没有任何区别,给它们 1G 或 100G.T 这并不重要,那么什么是?T 这是 JProfiler 中的承诺大小,它只有 230 MB。在运行应用程序之前,已经使用了 80MB!查看图片:

闲置的: 在此处输入图像描述

内存错误: 在此处输入图像描述

这个提交的大小是 Out-Of-Memory 错误发生的地方。正如你在图片中看到的那样。当我按下运行按钮并且它没有运行时会发生这种情况,它会给出内存错误,但同时在 JProfiler 中,使用的大小接近提交的大小,当它足够接近时,错误就会出现。那么如何增加这个提交的大小呢?现在不是我的设备剩余内存约为 1.55 GB。那这是什么?我不应该创建一个 hello world 应用程序。我编写了完全干净的代码,我并没有导致这个应用程序完美地运行,没有什么慢没有溢出。但是当我添加更多的库时,甚至还没有使用它们!我得到内存错误。这是堆遍历器:

在此处输入图像描述

对我来说看起来很正常。char 和 String 位于顶部我该怎么做?请帮助我。谢谢!

标签: javaandroidjvmout-of-memory

解决方案


我不知道 gradle 的细节,但设置的标准开关MaxHeapSize-Xmx; 看这里可能会有所帮助:使用 -Xmx 和 -Xms 通过 gradlew 运行应用程序

如果您正在谈论运行应用程序(而不是“构建它”),您可以尝试先构建最终 JAR 并将其作为独立应用程序运行(通过java -Xmx... -jar)。

您是否收到任何特定的 OOM 错误?

顺便提一句。根据-XX:MaxPermSize您发布的内容,您似乎使用的是非常旧的 Java 8 之前的版本(或者您没有正确设置 JVM 参数)。你应该考虑升级。


推荐阅读