android - Android ZXing 库是否存在内存泄漏?

标签 android memory-leaks garbage-collection zxing eclipse-memory-analyzer

我使用 ZXing 库编写了一个 Android 应用程序,但出现了 java.lang.OutOfMemoryError

首先,我确定错误出在我这边,所以我根据 Patrick Dubroy Google I/O 2011: Memory management for Android Apps 使用了 Eclipse 内存分析器 (MAT)以及其他几个关于如何追踪内存泄漏的教程,例如 Android Memory Leaks OR Different Ways to Leak .

在 MAT 中,我发现随着时间的推移,数百个 com.google.zxing.common.BitMatrix 实例占用了我的大部分堆内存。

令人惊讶的是,我在原来的ZXing测试程序“CaptureActivity”中遇到了同样的问题!

经过一番调查后,我发现 DecodeHandler 类中的 Activity 引用可能会阻止垃圾收集器释放 BitMatrix。但我经验太少,无法验证这一点。此外,令我惊讶的是,我在原始 ZXing 库(2.1 版)中发现了这个问题。

任何人都可以重现这种现象或以前经历过这种现象吗?

最佳答案

我认为您走在正确的轨道上。您需要继续查看 MAT 堆配置文件以确定用户代码的哪一部分持有对 DecodeHandler 的引用并传递到 BitMatrix。尝试跟踪来自 BitMatric 的传入引用,计算支配树并检查泄漏嫌疑人。

尝试分析应用程序以查看代码的哪一部分负责 BitMatrix 分配,并尝试将其追溯到应用程序代码。

CaptureActivity的例子出现同样的问题,可能是库使用错误导致的,并不一定证明库有内存泄漏。例如,可以在示例保持不变的情况下更新库。

关于android - Android ZXing 库是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930032/

相关文章:

java - 如何在android上正确使用mvc?

memory - Tomcat ThreadWithAttributes 导致内存泄漏

python - 有什么办法可以防止在循环中打开多个 gz 文件时出现 MemoryError 吗?

Java List.clear() 与 List = null

java - 大堆上最坏情况垃圾收集持续时间大约是多少

java - 尝试在空对象引用上调用虚拟方法

安卓 Lint : ignore library projects

c# - Windows 窗体应用程序中的内存泄漏

android - 由于 Firebase 中 ValueEventListener 的匿名实现而导致内存泄漏

android - 计算与作为 2D 线段的倾斜或倾斜墙碰撞后移动球的角度