【发布时间】:2015-05-22 00:22:07
【问题描述】:
长期以来,我一直在尝试修复我的应用程序中的内存泄漏,但我一直陷入死胡同。该应用程序以图像为中心,因此我使用 Picasso 库来处理缓存和内存使用。我将高内存使用(我的应用程序高达 100-170mb)传递给 Picasso 的糟糕内存管理,但我做了一些测试并禁用了 Picasso 的内存缓存,它加载了我所有的图像,并且没有非常明显的下降在 RAM 使用中。它仍在使用 90 到 170 mb 以上的 RAM。我做了一个完整的堆转储到一个 hprof 文件中,并用 MemoryAnalyzer 打开它来查看: http://i.gyazo.com/6b8d884852fa7cae546fc4cad1fc44c9.png.
如果我转到 GC 根路径,它显示没有根,也没有父级。在这 25 个海量字节数组中,超过 50,000,000 字节的任何一个都没有链接,我真的不知道从哪里开始寻找它的原因。 您对错误可能是什么以及任何可能的修复有任何建议吗?
非常感谢您帮助我!
【问题讨论】:
-
Java 是一种垃圾收集语言。在其他应用程序施加内存压力之前,您可能无法恢复该内存,然后该内存将被其他应用程序使用,而不是释放。换句话说,它可能不是内存泄漏。
-
虽然它可能不是泄漏,但我的应用程序仍在使用 100-170 mb 的 RAM,它会导致许多 OOM
-
使用LeakCanary查看是否有泄漏。
-
@Emmanuel 已安装并使用 LeakCanary,但没有找到任何东西。我已经遇到了 2 次 OOMS,但没有任何报告,所以我认为我的问题与内存泄漏无关,而是内存滥用。我的问题仍然存在!
-
@ccrama : 你是怎么解决你的问题的.. 我也面临同样的问题.. 我用过 LeakCanary .. 没有找到!你能建议stackoverflow.com/questions/39503505/…
标签: android arrays memory byte ram