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

Eri*_*vik 71 heap android

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

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

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

spa*_*ist 122

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

手机(安卓版):

  • 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,heapgrowthlimit = 64m,堆大小= 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
  • 谷歌Nexus 4(4.4,xhdpi)= 8/192/512MB
  • 谷歌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
  • 华硕Transformer Prime TF201(4.1.1)= 5/48/256MB
  • Nexus 10(4.4.3)16/192/512 MB

  • 值得注意的是,清单应用程序属性`android:largeHeap ="true"`似乎将可用堆空间从"heapgrowthlimit"值增加到"heapsize"值.但这取决于设备. (11认同)
  • 这些值是heapstartsize,heapgrowthlimit,heapsize.有关详细信息,请参阅http://www.jeffmixon.com/examining-build-prop-tweaks-for-android-ics-a-comprehensive-guide-part-1/. (7认同)
  • 从xdadeveloper中的帖子到h2g2:heapstartsize是初始化时新的Dalvik VM堆的大小.heapgrowthlimit是普通Dalvik VM堆的大小限制.heapsize是在应用程序清单中指定android:largeHeap = true的Android应用程序的大小限制. (2认同)

Com*_*are 51

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

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

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

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

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

搜索StackOverflow [android] "heap size"会显示此答案.


Car*_*arl 20

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

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

Runtime.getRuntime().maxMemory();
Run Code Online (Sandbox Code Playgroud)

有关此主题的更多信息,请参见此处.

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

  • @NoBugs:不幸的是,Google Play商店目前没有提供过滤哪些设备可以根据堆大小查看您的应用的方法,因此必须使用不太精确的标准来尝试为大多数用户实现此效果.通常,以后的OS版本将位于具有较大堆大小的设备上.因此,指定更高版本应该会导致大多数设备具有更多可用堆.遇到该规则的例外情况时,应用程序应优雅地降级. (2认同)

NoB*_*ugs 11

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

getprop dalvik.vm.heapsize
Run Code Online (Sandbox Code Playgroud)

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


dus*_*ine 9

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

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

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

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


Mat*_*der 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链接).

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