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

有没有人知道 Android 手机的堆大小是否是一个常数值,取决于操作系统版本中设置了什么,或者这是手机制造商可以决定的设置?

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

我只找到过有人说应用程序的堆大小是16M 的文章。然而,这些文章有点旧了。在我看来,作为一个例子,堆大小在一个特定的模型上从20M 到24M 不等。这部手机有768M 内存。

91306 次浏览

有没有人知道 Android 手机的堆大小是否是一个常数值,取决于操作系统版本中设置了什么,或者这是手机制造商可以决定的设置?

从技术上讲,这是一个手机制造商可以决定的设置。Android 是开源的。虽然我最近没有看过,但是我不记得有哪个兼容性定义文档详细说明了堆大小的要求。

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

不,它更倾向于基于屏幕分辨率,因为更高分辨率的屏幕倾向于操作更大的位图,所以谷歌提出了堆大小的建议,希望设备制造商会遵守。

我只找到过有人说应用程序的堆大小是16M 的文章。

[android] "heap size"上搜索 StackOverflow 将显示 这个答案

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

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

  • G1 = 16 Mb
  • Droid = 24Mb
  • Nexus One = 32 Mb
  • Xoom = 48 Mb
  • Galaxy Tab = 64 Mb.

(注意: 如果您有不同的发现,请让我知道)

从 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
  • 三星 Galaxy Note N7000(4.1.2) = heapstartsize = 8m,heapgrowth thlimit = 64m,heapsize = 256m
  • Samsung Galaxy S III 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/512 MB
  • Google Nexus 5(4.4,xxhdpi) = 8/192/512 MB
  • 三星Galaxy S6 SM-G920W8(7.0) = 8/256/512MB

平板电脑(Android 版本) :

  • Samsung Galaxy Tab 总纲图-p1000(2.2) = 48MB
  • Samsung Galaxy Tab 8.9 GT-P7300(3.2) = 5/64/288MB
  • Samsung Galaxy Tab 10.1 GT-P7500(3.2) = 5/64/288MB
  • Samsung Galaxy Tab 310.1 GT-P5200(4.2,mdpi) = 8/96/256MB
  • 宏基 Iconia A500(3.2.1) = 5/48/256MB
  • Kindle Fire HD 7”(4.0.3) = 5/48/256MB
  • 华硕主变压器 TF201(4.1.1) = 5/48/256MB
  • Nexus10(4.4.3)16/192/512MB

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

可以使用该方法检测允许的最大堆大小

Runtime.getRuntime().maxMemory();

关于这个主题的其他信息可以在 给你中找到。

如果你的应用程序通常需要超过16MB 的堆,一个建议的方法是在你的清单中设置一个最低的操作系统版本级别,确保绝大多数下载你的应用程序的人至少有你需要的数量,然后找到一种方法来优雅地降低你的功能,根据需要减少你的堆需求,降低到16MB 的基本级别,对于少数用户,低于你的最佳堆数量谁通过筛选。

下面是一些显示手机 RAM 与操作系统版本(基于当前,而不是原来的操作系统)关联的图。我相信一部至少拥有1GB 内存的手机几乎总是拥有超过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

您应该能够使用以下方法检查最大 vm 堆大小:

getprop dalvik.vm.heapsize

在 Android 终端(Connectbot 或 adb shell 等)。还可以重新挂载 read-write 并在 build.prop 文件中设置堆大小。(确保已经安装了恢复程序,这样如果不小心把它设置得太小,它就不会启动)。

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

移动设备通常有受限的系统资源 设备可以只有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 版本,我们可以直接链接到运行时内存部分: Https://source.android.com/compatibility/android-cdd.html#3_7_runtime_compatibility

对于 Android 2.3:

屏幕分类为 < strong > media-or 的设备实现 必须配置 Dalvik 以分配至少16MB 的内存 屏幕分类为 高密度或超高密度必须配置 Dalvik 来分配 每个应用程序至少有24MB 的内存 实现可能分配比这些数字更多的内存。

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

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

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

对于 Android 6,摘录如下:

小/正常 xhdpi: 80MB

小/正常 xxhdpi: 128MB

小/正常 xxxhdpi: 256 MB

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

参考这个谷歌链接,可以很容易地找到特定设备的屏幕密度等: Https://design.google.com/devices/

这些数据对我很有用。 选择模拟器平板 Android 电视 内存1536 MB VM 堆16 MB 内部存储800 MB 工作室管理的100