当前位置: 首页 > 面试题库 >

Android内存泄漏?

宋新知
2023-03-14
问题内容

我认为我的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

问题答案:

这里有几篇文章和帖子,可能有助于您走上正确的路:

__Android SDK随附的 分配跟踪器 非常有用。阅读Romain
Guy的文章。它帮助我找到了非常讨厌的漏洞。它还可以帮助您编写更好的软件。例如,我学会了创建更少的对象,使用更多的StringBuilder和缓存更多的东西:
哪种Android工具和方法最适合发现内存/资源泄漏?

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

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

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

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



 类似资料:
  • 我担心从泄漏金丝雀回来的信息。它显示了在UI上声明的所有变量,如片段中的材料按钮、材料卡片视图、文本视图、图像视图等,都导致了内存泄漏。我不知道为什么会这样。

  • 我正在Android应用程序中使用一些本机库,我想在某个时间点从内存中卸载它们。当装入本机库的类的类装入器被垃圾回收时,库被卸载。灵感:本土卸载。 如果ClassLoader用于加载某些类(可能导致内存泄漏),则不会收集垃圾。 本机库只能在应用程序中的一个ClassLoader中加载。如果仍然有旧的ClassLoader挂在内存中的某个地方,并且一个新的ClassLoader试图在某个时间点加载相

  • 我正在使用libgdx制作一个实时壁纸应用程序,根据时间改变资产。对于e、 g从早上6点到下午6点,我有“早上图形”,之后我有“晚上图形”,从下午6点到早上6点。 我构建资产的方式如下 我有12个AtlasRegion类型的静态数组,1个静态纹理区域变量和1个静态纹理变量。 我有两个静态函数load晨()和loadEnight()用于加载资产。 在funcions中,我加载如下 对于所有数组,如果

  • 我在继续我的游戏超过8次后,我得到了OutOfMemory错误,因为堆逐渐填充。在使用MAT分析我的游戏堆时,我知道以下2个原因: 关键词Android.Graphics.Bitmap Byte[] 关键词java.lang.Object[]Android.content.res.resources 请提出解决方案

  • 我有一个潜在的内存泄漏在我的代码,我正在试图找到一个解决方案。我使用的是Android框架的spring。更具体的是 为了使一个即时装订。然而,当我进行内存分析时,我得到了以下结论: 由“Dalvik.System.PathClassLoader@0x43692B80”加载的1.628个“com.products.product”实例占用1.363.064(22,20%)字节。这些实例是从“jav

  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工具来分析应用内存泄漏,最后再做总结。 篇幅有些长,大家可以分几节来看! Java