在某些手机上,android 应用程序使用的 RAM 超过了最大堆大小

Posted

技术标签:

【中文标题】在某些手机上,android 应用程序使用的 RAM 超过了最大堆大小【英文标题】:android app uses more RAM than max heap size on some phones 【发布时间】:2011-12-11 04:10:25 【问题描述】:

我有一个在大多数手机(例如 Nexus **)上运行良好的应用程序:内存使用量永远不会超过 24MB。 但是在我的索尼爱立信 Xperia Arc 上,运行几天后,它使用了超过 70MB 的 RAM(根据设置->应用程序->运行服务)。

Runtime.getRuntime().maxMemory() 说我的手机的最大堆大小只有 32MB。

有什么方法可以查明我的应用在这部手机上的情况吗?

这是此应用的 adb meminfo:

C:\>adb -d shell dumpsys meminfo 4606
Applications Memory Usage (kB):
Uptime: 409334045 Realtime: 585217200

** MEMINFO in pid 4606 [com.*****************] **
                    native   dalvik    other    total
            size:    60796    10695      N/A    71491
       allocated:    54057     6091      N/A    60148
            free:     6706     4604      N/A    11310
           (Pss):    56549     1129     8385    66063
  (shared dirty):     2128     1304     4964     8396
    (priv dirty):    56496      892     8156    65544

 Objects
           Views:        0        ViewRoots:        0
     AppContexts:        0       Activities:        0
          Assets:        3    AssetManagers:        3
   Local Binders:        5    Proxy Binders:       14
Death Recipients:      222
 OpenSSL Sockets:        2

 SQL
               heap:      425         MEMORY_USED:      425
 PAGECACHE_OVERFLOW:       81         MALLOC_SIZE:       50

 DATABASES
      pgsz     dbsz   Lookaside(b)  Dbname
         1       54            223  *.db
         1       27            198  **.db
         1        5             24  ***.db
         1       11             56  ****.db

C:\>

【问题讨论】:

【参考方案1】:

本机代码的内存使用不受 Java 堆大小的限制,因此应用程序很容易超过该限制。虽然这确实意味着 android 更有可能在后台杀死您的应用程序,但只要您不超过设备上的可用 RAM,这应该不是问题。

如果您在一部手机上看到不同的内存使用情况,而另一部却没有(并且两个应用程序以相同的方式进行交互),那么我猜想制造商在该特定手机上定制的 Android 版本具有内存您正在触发的泄漏。如果是这种情况,那么您无能为力。不过,查看您自己的代码以确保内存泄漏不是您的错,这并没有什么坏处。

话虽如此,在现代设备上,70MB 并不值得担心。您在大多数手机上应该是安全的,因为您保持在 ~150MB 以下。

【讨论】:

半天后就到了85MB,下次查的时候被系统杀掉了(内存占用降到20MB,PID也变了)。 我确实收到市场评论说这个应用程序在他的手机上超过 150MB。

以上是关于在某些手机上,android 应用程序使用的 RAM 超过了最大堆大小的主要内容,如果未能解决你的问题,请参考以下文章

我的 apk 没有安装在某些手机上,而安装在其他手机上

在某些安卓设备上显示白屏而不是谷歌地图

Android 活动未在某些设备上启动(错误膨胀类)

android - 谷歌地图未在某些设备上显示

在某些 Android 设备上未发现 Chromecast 设备

适用于某些智能手机的 Google Play 隐形应用