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

2022-09-01 23:53:48

当启动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

答案 1

我在应用程序中有这些症状,结果发现它与内存泄漏有关。我曾经注册从活动到单例对象的回调。活动正在等待回调的销毁。


答案 2

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


推荐