在某些手机上,Android应用程序使用的RAM大于最大堆大小

时间:2011-10-19 18:05:16

标签: android memory size heap sony

我有一个在大多数手机上运行正常的应用程序(例如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 个答案:

答案 0 :(得分:0)

本机代码的内存使用量不受Java堆大小的限制,因此应用程序很容易超出该限制。虽然这确实意味着Android在后台运行时更有可能杀死你的应用程序,但只要你没有超过设备上的可用内存就不会有问题。

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

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