如何使用PhantomReference报告Android / Java中的内存泄漏

时间:2015-10-15 12:53:50

标签: java android memory-leaks phantom-reference

在重建了我曾经写过的旧代码之后,然后忘记了,现在重写了......我把它放在这里作为所有人使用的维基: - )

所以,基本上:如果你在复杂的Android应用程序中有内存泄漏,包含图像和交叉引用。您将如何找到哪种(类型)物体泄漏? Android SDK提供了一些(非常难学和使用)工具。可能还有更多我不知道的东西。然而,Java确实提供了PhantomReference作为这样做的一种手段,即使经历了设置所需类所需的混乱也可以做很多工作(并且讨厌...... JDK-8034946)。

但这样做最简单/最有效的方法是什么?我的解决方案如下。

2 个答案:

答案 0 :(得分:1)

LeakCanary是第三方库,可自动检测内存泄漏,添加依赖项后,您可以将以下行添加到应用程序类中:

{
    "success": "no",
    "error": "validation_failed",
    "validation_errors": [
        {"name": "too long"},
        {"id": "invalid format, must be String"}
    ]
}

该库提供了一个很好的通知&泄漏的痕迹,你也可以定义自己的参考观察者(虽然默认的看起来工作得相当好。)

答案 1 :(得分:0)

我在一个课程中的解决方案:“MemCheck”

要监控任何对象,只需致电:

Date

这将“监控”分配的对象数量,最重要的是 - “已取消分配”。

要在任何所需时间记录泄漏,请致电:

MemCheck.add( this ); // in any class constructor

作为替代方案,设置MemCheck.periodic = 5(秒数)。 这将每5秒报告一次内存中被监视对象的数量。它还可以方便地记录已用/可用内存。

所以,MemCheck.java:

MemCheck.countAndLog();