Android:我有内存泄漏吗?

时间:2012-05-13 03:20:20

标签: android memory heap native

我正在研究一个lwp,随着时间的推移,通过UI(设置,应用程序,运行)报告的内存使用量显示内存使用量不断增加(从~18M开始,在我开始之前已经攀升到高达90M) 。这看起来非常糟糕,让我找不到内存泄漏。所以我使用了ddms,它表明虽然应用程序显示内存使用量增加,但Dalvik分配的堆大约为13.7M,并且随着时间的推移变化不超过~500K。好的,所以它必须在本机堆上。我包含了Debug.getNativeHeapSize()和Debug.getNativeHeapAllocatedSize()的日志,它们都报告了~5M的本机堆+/- ~2M,因为UI显示了不断增加的内存使用量。除了Dalvik和本地人之外还有哪些内存使用?所以我读了Diane Hackborn的优秀帖子here,并意识到我还有很多东西需要学习。我使用了adb shell dumpsys meminfo,结果如下:

** MEMINFO in pid 6856 **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native     1118     1116     1076     5072     3452       59
       Dalvik     4102    16204     3584    15111    14077     1034
       Cursor        0        0        0                           
       Ashmem        2        4        0                           
    Other dev    33344      292      820

“其他开发者”的巨大33M“Pss”加上Native / Pss和Dalvik / Pss大致是UI报告的内存使用情况。读Diane的帖子,我不知道我是否应该担心我的内存使用情况。我可以看到“Pss / Other dev”值随着时间的推移而攀升但我的本机和Dalvik堆仍然存在于ddms和Debug.getNativeHeapSize()报告的位置。我很困惑,不知道我是否应该关注,除了用户会看到我的lwp正在消耗这个疯狂的“记忆”量,据我所知,它实际上并没有泄漏。

有谁知道这里发生了什么?这是关于Galaxy Nexus,ICS 4.0.2。

编辑:我随后尝试通过让其他/ Pss爬升直到应用程序在UI中达到~200M的报告使用量来崩溃应用程序。它确实崩溃了:

E/IMGSRV  ( 8337): :0: __map: Map device memory failed
W/GraphicBufferMapper( 8337): registerBuffer(0x3364c0) failed -14 (Bad address)
F/libc    ( 8337): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
I/DEBUG   (  114): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

所以我有一些东西要修复,我不知道从哪里开始,因为我在dalvik或本机堆上看不到任何问题。

0 个答案:

没有答案