Android堆大小在不同的手机/设备和操作系统版本
有谁知道Android手机上的堆大小是否是根据操作系统版本设置的固定值,或者如果这是手机制造商可以决定的设置?
堆大小是否与电话上的RAM数量成比例?
我只find文章,人们说应用程序的堆大小是16M。 不过,这些文章有点老了。 从我看到的一个例子来看,在一个特定的模型上堆大小从20M到24M不等。 这款手机拥有768M的RAM。
有谁知道Android手机上的堆大小是否是根据操作系统版本设置的固定值,或者如果这是手机制造商可以决定的设置?
从技术上讲,这是电话制造商可以决定的一个设置。 Android是开源的。 我不记得有关堆栈大小要求的兼容性定义文档,尽pipe我最近没有看。
堆大小是否与电话上的RAM数量成比例?
不,它倾向于更多地基于屏幕分辨率,因为更高分辨率的屏幕倾向于操纵更大的位图,所以Google提出了堆大小的build议,希望设备制造商能够遵守。
我只find文章,人们说应用程序的堆大小是16M。
在[android] "heap size"
上searchStackOverflow可以find答案 。
从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
- macros碁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
不仅电话制造商,而且创buildAndroid操作系统版本的任何人都可以根据设备的具体要求,指定允许的最大堆大小。 一些Android根源(如CyanogenMod)甚至允许用户自己select堆大小作为设置。
您可以使用该方法检测允许的最大堆大小
Runtime.getRuntime().maxMemory();
有关此主题的更多信息,请点击此处 。
如果您的应用程序通常需要超过16MB的堆,build议的方法是在您的清单中设置最低的操作系统版本级别,以确保绝大多数下载应用程序的用户至less拥有所需的金额,然后查找这是一种降低function的方法,可以根据需要减less堆的需求,降低到16MB的基本级别,对于那些less于堆的最佳用户数的less量用户而言。
下面是一些显示手机内存与操作系统版本(基于当前的,不是原始的,操作系统)的关联的数字。 我相信至less有1GB内存的手机几乎总是会有16MB以上的堆。 请注意,这里的百分比是支持指定内存的手机型号数量,而不是使用的手机总数,这可能会偏向某些型号。 这些数字是通过将input插入到以下手机查找程序(其中包括1500个Android手机型号)获得的,所以只能查看数字: http : //www.gsmarena.com/search.php3
具有至less1GB 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
应用程序允许使用的“VM预算”因设备而异。 平板电脑通常允许比手机更大的预算。
以下是我为各种设备find的一些虚拟机预算大小。
- G1 = 16 Mb
- Droid = 24 Mb
- Nexus One = 32 Mb
- Xoom = 48 Mb
- GalaxyTab = 64 Mb。
(注意:如果你发现不同,请告诉我)
您应该能够使用以下方法检查最大虚拟磁盘大小:
getprop dalvik.vm.heapsize
在Androidterminal(connectbot或adbshell等)。 可以重新读写并在build.prop文件中设置堆大小。 (确保你有恢复安装,所以你可以重新设置,如果你不小心使它太小,它不会启动)。
实际上有一个定义的最小应用程序内存取决于屏幕大小和密度:
移动设备通常具有受限制的系统资源。 Android设备可以为单个应用程序提供低至16MB的内存。 Android兼容性定义文档(CDD),第3.7节。 虚拟机兼容性为各种屏幕尺寸和密度提供了所需的最小应用程序内存。 应该优化应用程序以在此最小内存限制下执行。 但是,请记住,许多设备configuration了更高的限制。
引自: 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:
屏幕分类为中密度或低密度的设备实现必须configurationDalvik为每个应用程序分配至less16MB的内存 。 屏幕分类为高密度或超高密度的设备实现必须configurationDalvik为每个应用程序分配至less24MB的内存 。 请注意,设备实现可能比这些数字分配更多的内存。
对于现代版本,有一个表取决于屏幕密度等:
对于Android 4.2,来自该表的示例行:
小/正常/大尺寸和xhdpi密度:64MB
对于Android 6,请解压缩:
小/正常xhdpi:80MB
小/普通xxhdpi:128MB
小/正常xxxhdpi:256MB
在这些文档中还有一个表格,用于其他Android 2.x,4.x,5.x和6版本(请参阅上面的CDD链接)。
参考这个谷歌链接可以轻松find特定设备的屏幕密度等: https : //design.google.com/devices/
这些数据正在为我工作。 select模拟器平板电脑Android TV RAM 1536MB VM HEAP 16MB内存800MB Studio -managed 100