Android 版本是不是有最小堆大小?

Posted

技术标签:

【中文标题】Android 版本是不是有最小堆大小?【英文标题】:Is there a minimal heap size for Android versions?Android 版本是否有最小堆大小? 【发布时间】:2012-12-31 19:22:18 【问题描述】:

许多帖子都谈到了 android 堆大小,到目前为止,我发现最大堆大小的唯一共同点是它至少为 16MB,但这是自 API 3 以来的限制。对于使用更多内存,人们会建议使用 NDK 或任何超出“正常”Android 开发的东西。

是否有任何 Android 版本要求设备具有更大的堆大小,以便我可以开始假设更大的堆大小并且不再那么便宜的内存?

是否还有关于清单内大堆标志(来自 API 11 - 蜂窝)的要求,还是设备甚至可能忽略它的模糊要求?

只是 Android 硬件这些年来改进了很多,但我们仍然需要如此便宜的内存,即使设备现在有超过 1GB 的内存。奇怪的是,我们不能要求操作系统为我们提供特定数量的堆大小并承诺我们不会再使用这些。

【问题讨论】:

【参考方案1】:

好的,我终于找到了答案(感谢this post):

所有 android 版本(包括 5 个)的最低限度是 16MB。

每个 android 版本的要求可以在这里阅读:

http://source.android.com/compatibility/downloads.html

您可以通过打开 CDD 文件并搜索“运行时兼容性”(或旧版本的“虚拟机兼容性”)来了解它们。另外,您可以通过搜索“内存和存储”找到最低 RAM 要求,但我认为这只是系统本身的要求。

因此,例如,在 4.0.3 - 5 上,最小堆大小为:

16MB:使用 ldpi/mdpi 的小/正常,或使用 ldpi 的大 32MB:使用 tvhdpi/hdpi 的小/正常,或使用 mdpi 的大 64MB:small/normal 使用 xhdpi,或者 large 使用 tvdpi/hdpi,或者 xlarge 使用 mdpi。 96MB:small/normal with 400dpi, or xlarge with tvhdpi/hdpi 128MB:使用 xxhdpi 的小/正常,或使用 xhdpi 的大 192MB:560dpi 的小/正常,400dpi 的大,或 xhdpi 的 xlarge。 256MB:使用 xxxhdpi 的小/正常,或使用 xxhdpi 的大 288MB: xlarge 400dpi 384MB:560dpi 的大,或 xxhdpi 的 xlarge 512MB:大,带有 xxxhdpi 576MB: xlarge 560dpi 768MB:带有 xxxhdpi 的 xlarge

我找不到 3.x 版本的最小堆大小,但它可能与 4.0.3 相同。

对于 2.1 - 2.3 ,最小堆大小为:

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

意思:

中等屏幕或 ldpi - 16MB hdpi 或 xhdpi - 24MB

我找不到版本 1.6 的最小堆大小,但它可能与 2.1 相同。

另外,我不知道大堆标志应该为每个 android 版本(自 3.0 起)做什么。

【讨论】:

链接到确切部分here

以上是关于Android 版本是不是有最小堆大小?的主要内容,如果未能解决你的问题,请参考以下文章

实现最小堆类

优先队列的实现(最小堆)

堆和堆排序

将二叉堆的根和根的子代与堆的数组长度进行比较如何帮助确定您是不是有最小堆?

最小堆排序MinHeap

dijkstra(最短路)和Prim(最小生成树)下的堆优化