java - Android内存泄漏?

标签 java android memory-leaks

我认为我的 android 应用程序正在泄漏内存。不过,我不确定这是否是问题所在。

应用程序在打开时经常崩溃,并且 logcat 在尝试加载位图图像时显示“内存不足”异常。

崩溃后,我重新打开应用程序,它工作正常。 Logcat 显示了很多“gc”,并且每隔一段时间 JIT 表就会向上调整大小,从不向下调整,直到应用程序因内存不足错误而崩溃。

这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。

这是我的应用程序的 adb shell meminfo。

** MEMINFO in pid 2691 [com.example.deepcliff] **
                    native   dalvik    other    total
            size:    23264     8839      N/A    32103
       allocated:    12503     3826      N/A    16329
            free:      168     5013      N/A     5181
           (Pss):     2512     1395    13815    17722
  (shared dirty):     2088     1844     5008     8940
    (priv dirty):     2412      224    11316    13952

 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        2    AssetManagers:        2
   Local Binders:       55    Proxy Binders:       13
Death Recipients:        1
 OpenSSL Sockets:        0

 SQL
               heap:      129         MEMORY_USED:      129
 PAGECACHE_OVERFLOW:        9         MALLOC_SIZE:       50

 DATABASES
      pgsz     dbsz   Lookaside(b)  Dbname
         1       14             10  webview.db
         1        6             18  webviewCache.db

 Asset Allocations
    zip:/data/app/com.example.deepcliff-2.apk:/resources.arsc: 17K

最佳答案

这里有几篇文章和帖子,可能会帮助您走上正轨:

Allocation tracker,Android SDK 自带的非常有用。阅读 Romain Guy 的文章。它帮助我找到了非常讨厌的泄漏。它还可以帮助您编写更好的软件。例如。我学会了创建更少的对象,使用更多的 StringBuilder,并缓存更多:
What Android tools and methods work best to find memory/resource leaks?

有时您的应用程序非常困惑,以至于您必须重新设计整个应用程序。以下是官方的很好的提示(我最喜欢的是避免创建不必要的对象):
http://developer.android.com/guide/practices/design/performance.html


这是一篇关于解决内存问题的优秀文章:
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html

关于避免内存泄漏的官方文章:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

另请阅读:tool to check memory leaks in android


其他人已经指出了位图。这是一篇描述该问题的文章:http://zrgiu.com/blog/2011/01/android-bitmaps-and-out-of-memory-errors/

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

相关文章:

java - 从另一个 fragment 调用一个 fragment ,然后替换其布局

memory-leaks - Kotlin 伴随对象内存泄漏?

c - 如何使用Valgrind构建动态库?

java - 动态删除 Java Swing 容器(我的代码在按下按钮时挂起)

java - PHP 和 Clojure (Java) 代码之间的原始 MD5 base64 编码字符串对于某些字符的不同结果

java - 如何在移动 Sprite 时重新绘制小程序?

java - 将 Material 持久底板高度设置为屏幕高度的一半?

java - Android应用:transformClassesWithDexForDebug

java - 即使应用程序被杀死,我们也会发生内存泄漏吗?

java - 将所有 BigDecimal 操作设置为特定精度?