由java.lang.ref.FinalizerReference引起的内存泄漏

时间:2012-12-03 02:59:06

标签: java android

当启动com.android.gallery3d并按回键约2000次时,我得到了java.lang.OutOfMemoryError的异常。 转储在android 4.0.4中的com.android.gallery3d堆。使用MAT进行分析,发现java.lang.ref.FinalizerReference被嵌套调用。什么可能导致这个嵌套调用?

android.app.ContextImpl @ 0x418f8c98
android.media.AudioManager @ 0x419495c8
android.media.AudioManager$1 @ 0x41949688
java.lang.ref.FinalizerReference @ 0x419496a8
java.lang.ref.FinalizerReference @ 0x419496e8
java.lang.ref.FinalizerReference @ 0x41949800
java.lang.ref.FinalizerReference @ 0x41949848
java.lang.ref.FinalizerReference @ 0x41949890
java.lang.ref.FinalizerReference @ 0x419498d8
java.lang.ref.FinalizerReference @ 0x41949920
java.lang.ref.FinalizerReference @ 0x419499b0
java.lang.ref.FinalizerReference @ 0x419499f8
java.lang.ref.FinalizerReference @ 0x41949a40
java.lang.ref.FinalizerReference @ 0x41949a88
java.lang.ref.FinalizerReference @ 0x41949ad0
java.lang.ref.FinalizerReference @ 0x4194a5a8
java.lang.ref.FinalizerReference @ 0x4194af48
java.lang.ref.FinalizerReference @ 0x4194b878

2 个答案:

答案 0 :(得分:5)

我的应用程序中出现了这些症状,结果发现内存泄漏。 我曾经将一个活动的回调注册到一个单例对象。活动的破坏正在等待回调。

答案 1 :(得分:0)

在我的情况下,我在自定义SurfaceView的重写onDraw方法中创建了一个新的(虽然很小)对象。