有没有人知道Android手机上的堆大小是否是根据操作系统版本中设置的常量值,或者这是电话制作人可以决定的设置?
堆大小是否与手机上的RAM量成正比?
我只找到了人们说应用程序的堆大小为16M的文章。但是,这些文章有点陈旧。从我看来,作为一个例子,在一个特定型号上,堆大小从大约20M到24M不等。这款手机有768M的RAM。
答案 0 :(得分:121)
从build.prop文件中提取的更多设备信息(adb -d pull /system/build.prop):
手机(Android版):
平板电脑(Android版):
答案 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预算大小。
(注意:如果你发现不同,请告诉我)
答案 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