不同手机/设备和操作系统版本上的Android堆大小

时间:2011-03-18 10:07:48

标签: android heap

有没有人知道Android手机上的堆大小是否是根据操作系统版本中设置的常量值,或者这是电话制作人可以决定的设置?

堆大小是否与手机上的RAM量成正比?

我只找到了人们说应用程序的堆大小为16M的文章。但是,这些文章有点陈旧。从我看来,作为一个例子,在一个特定型号上,堆大小从大约20M到24M不等。这款手机有768M的RAM。

7 个答案:

答案 0 :(得分:121)

从build.prop文件中提取的更多设备信息(adb -d pull /system/build.prop):

手机(Android版):

  • HTC Wildfire(2.2.1)= 16MB
  • HTC Wildfire S(2.3.5)= 20MB
  • HTC Salsa(2.3.3)= 20MB
  • HTC Desire(2.3.3)= 32MB
  • HTC Desire S(2.3.5)= 32MB
  • Sprd - Richview - S111(2.3.5)= 32MB
  • 三星Galaxy S GT-I9000(2.2)= 48MB
  • 三星Galaxy R GT-I9103(2.3.5)= 64MB
  • 三星Galaxy Y GT-S5360(2.3.5)= 64MB
  • Samsung Galaxy Note N7000(4.1.2)= heapstartsize = 8m,heapgrowthlimit = 64m,heapsize = 256m
  • 三星Galaxy S3 GT-I9300(4.3,xhpdi)= 8/64 / 256MB
  • 三星Galaxy S4 GT-I9505(4.4,xxhpdi)= 8/128 / 512MB
  • Google Galaxy Nexus(4.3)= 8/96 / 256MB
  • Google Nexus 4(4.4,xhdpi)= 8/192 / 512MB
  • Google Nexus 5(4.4,xxhdpi)= 8/192 / 512MB
  • 三星Galaxy S6 SM-G920W8(7.0)= 8/256 / 512MB

平板电脑(Android版):

  • 三星Galaxy Tab GT-P1000(2.2)= 48MB
  • 三星Galaxy Tab 8.9 GT-P7300(3.2)= 5/64 / 288MB
  • 三星Galaxy Tab 10.1 GT-P7500(3.2)= 5/64 / 288MB
  • 三星Galaxy Tab 3 10.1 GT-P5200(4.2,mdpi)= 8/96 / 256MB
  • Acer Iconia A500(3.2.1)= 5/48 / 256MB
  • Kindle Fire HD 7“(4.0.3)= 5/48 / 256MB
  • Asus Transformer Prime TF201(4.1.1)= 5/48 / 256MB
  • Nexus 10(4.4.3)16/192/512 MB

答案 1 :(得分:49)

  

有没有人知道Android手机上的堆大小是否是根据操作系统版本中设置的常量值,或者这是电话制作人可以决定的设置?

从技术上讲,这是电话制作人可以决定的设置。 Android是开源的。我不记得兼容性定义文档是否列出了堆大小要求,尽管我最近没有看过。

  

堆大小是否与手机上的RAM量成正比?

不,它往往更多地基于屏幕分辨率,因为更高分辨率的屏幕往往想要操纵更大的位图,因此Google会提出堆大小建议,希望设备制造商能够遵守这些建议。

  

我只找到了人们说应用程序的堆大小为16M的文章。

[android] "heap size"上搜索StackOverflow会出现this answer

答案 2 :(得分:20)

不仅手机制造商,而且任何创建Android OS版本的人都可以根据其设备的特定要求指定允许的最大堆大小。一些Android根源,例如CyanogenMod,甚至允许用户自己选择堆大小作为设置。

您可以使用

方法检测允许的最大堆大小
Runtime.getRuntime().maxMemory();

有关此主题的其他信息,请访问here

如果您的应用通常需要超过16MB的堆,建议的方法是在您的清单中设置最低操作系统版本级别,以确保绝大多数下载您的应用的人至少拥有您需要的数量,然后找到一种优雅地降低功能的方法,以便根据需要降低堆需求,最低可达16MB的基本级别,适用于少量通过筛子的最佳堆数的用户。 / p>

以下是一些显示手机RAM与操作系统版本(基于当前而非原始操作系统)关联的图。我相信拥有至少1GB RAM的手机几乎总是有超过16MB的堆。请注意,此处的百分比是支持指定内存的手机型号的数量,而非使用的手机总数,这可能与某些型号相差甚远。这些数字是通过将输入插入下面的手机取景器(包括1500个Android手机型号)获得的,所以只有大概数字:http://www.gsmarena.com/search.php3

按当前操作系统版本(不是发布时的版本),具有至少1GB内存的手机型号的百分比:

Phones running         Percent of models having at least 1GB of RAM   Percentage of all models
4.4 and up             100 percent                                    1.5
4.3 and up             100 percent                                    2.9
4.2.x and up           74 percent                                     18.7
4.1.x and up           71 percent                                     37
4.0 and up             62 percent                                     60
2.3.x and up           57 percent                                     71
2.2 and up             44 percent                                     93
2.1 and up             44 percent                                     97
ALL OS VERSIONS:       41.5 percent                                   100

答案 3 :(得分:10)

您应该能够使用以下方法检查max vm heapsize:

getprop dalvik.vm.heapsize

在Android终端(connectbot或adb shell等)。可以重新安装读写并在build.prop文件中设置堆大小。 (确保已安装恢复,因此如果您不小心将其重新设置,则可以重新设置它,它不会启动)。

答案 4 :(得分:9)

允许应用程序使用的“VM预算”因设备而异。平板电脑通常允许比手机更大的预算。

以下是我为各种设备找到的一些VM预算大小。

  • G1 = 16 Mb
  • Droid = 24 Mb
  • Nexus One = 32 Mb
  • Xoom = 48 Mb
  • GalaxyTab = 64 Mb。

(注意:如果你发现不同,请告诉我)

答案 5 :(得分:9)

实际上有一个定义的最小应用程序内存取决于屏幕大小和密度:

  

移动设备通常具有受限制的系统资源。 Android的   设备可以为单个设备提供少至16MB的内存   应用。 Android兼容性定义文档(CDD),   第3.7节。虚拟机兼容性提供所需的最低要求   适用于各种屏幕尺寸和密度的应用程序内存。   应优化应用程序以在此最小内存下执行   限制。但是,请记住,许多设备配置更高   限制。

引自:http://developer.android.com/training/displaying-bitmaps/index.html

但正如其他人所说,每个设备制造商都会决定设备的实际价值,因此它可能大于此(但不会更小)。

上面提到的兼容性定义文档(CDD)列出了每个版本的android的最低要求: https://source.android.com/compatibility/cdd.html

对于最新版本的Android,有一个html verison可用,我们可以直接链接到那里的运行时内存部分: https://source.android.com/compatibility/android-cdd.html#3_7_runtime_compatibility

对于Android 2.3:

  

设备实施,屏幕分类为中 - 或   低密度必须配置Dalvik分配至少16MB的内存   每个应用程序。屏幕分类为的设备实现   高密度或超高密度必须配置Dalvik进行分配   每个应用程序至少24MB的内存。请注意该设备   实现可以分配比这些数字更多的内存。

对于现代版本,有一个表格,它取决于屏幕密度等:

对于Android 4.2,该表中的示例行:

  

小/正常/大尺寸和xhdpi密度:64MB

对于Android 6,提取:

  

小/正常xhdpi:80MB

     

小/正常xxhdpi:128MB

     

小/正常xxxhdpi:256MB

在这些文档中还有其他Android 2.x,4.x,5.x和6版本的表格(参见上面的CDD链接)。

请参阅此Google链接,以便轻松查找特定设备的屏幕密度等: https://design.google.com/devices/

答案 6 :(得分:0)

此数据对我有用。 选择Emulator Tablet Android TV RAM 1536MB VM HEAP 16MB 内部存储800MB Studio -managed 100