由于有很多库和类,我不得不放弃许多应用程序,所以最终我遇到了这个内存错误。最近,我开始使用JProfiler。但是,仍然没有不导致应用程序变大,现在又发生了这种情况。查看我的设置:
在gradle.properties中
org.gradle.jvmargs=-Xmx16g -XX:MaxPermSize=16g -XX:+HeapDumpOnOutOfMemoryError
GRADLE_OPTS=-Xmx16g
在gradle(app)
中dexOptions { javaMaxHeapSize "16g" }
听起来这些值给它们1G或100G没什么区别。那么这并不重要,那是什么?这是JProfiler中的承诺大小,只有230 MB。在运行该应用程序之前,已经使用了80MB!查看图片:
此提交的大小是发生内存不足错误的地方。如您在图片中看到的。当我按下运行按钮但它没有运行时,会发生内存错误,但与此同时,在JProfiler中,使用的大小接近已提交的大小,而当它足够接近繁荣时,就会出现错误。 那么,如何增加这个承诺的大小呢?现在我的设备剩余的内存不是1.55 GB。那这是什么?我不应该创建一个hello world应用程序。我编写了完全干净的代码,但我并没有导致此应用完美运行,没有慢的东西,没有溢出的东西。但是,当我添加更多库时,甚至还没有使用它们!我收到内存错误。这是堆漫步者:
对我来说看起来很正常.char和String在顶部是我该怎么办?请帮助我。谢谢!
答案 0 :(得分:0)
我不知道gradle的细节,但是设置MaxHeapSize
的标准开关是-Xmx
;查看此处可能会有所帮助:Run application via gradlew with -Xmx and -Xms。
如果您正在谈论运行该应用程序(而不是“构建”),则可以尝试先构建最终的JAR并将其作为独立的应用程序运行(通过java -Xmx... -jar
)。
您收到任何特定的OOM错误吗?
顺便说一句。根据您发布的-XX:MaxPermSize
,似乎您使用的是Java 8之前的旧版本(或者您未正确设置JVM args)。您应该考虑升级。