gpt4 book ai didi

android - Nexus 的最大堆大小?

转载 作者:行者123 更新时间:2023-11-29 01:54:43 25 4
gpt4 key购买 nike

我正在使用 Galaxy Nexus(i9250) 进行开发和测试。我注意到一个奇怪的事实——有时当总堆大小为 64mb 并且分配的堆大小在 56-60mb 左右时,应用程序会崩溃。但有时我注意到即使内存飙升到 80mb,应用程序也没有崩溃。

最初我认为范围 nexus 的设备的最大堆大小为 64mb(现在我意识到这是错误的)。所以我的问题是设备可以使用的最大堆大小是多少。如果它是基于设备的变量,那么堆大小取决于什么因素。我知道这是一个常见的问题。谁能指导我找到正确的答案。提前致谢!

注意:我没有在我的代码中使用 LargeHeapSize = true;

最佳答案

考虑到,您的应用每次出现 "OutOfMemoryError"

时都会崩溃

DVM 首先分配一个小堆,在每个垃圾回收周期之后,它检查空闲堆并将其与总堆内存进行比较,并在差异太小的情况下添加更多内存。因此,根据操作系统对 Dalvik VM 的要求,Heap 可以在运行时增加或减少。

因此,当系统中有足够的可用内存时,您的应用程序不会在内存飙升至 80mb 时崩溃。(假设 64MB 不是堆大小的硬性限制)

是的,每个设备的堆大小都有一个硬性限制,可以通过使用 "LargeHeapSize = true" 来增加,但是随着堆大小的增加,这在应用程序性能方面可能代价太大与垃圾收集过程所花费的时间成正比(因为 GC 现在必须遍历更大堆中的更多对象)。所以这是一个很大的“不,不”,除非你确切地知道你想要更大的堆大小是什么以及为什么。

堆大小取决于什么因素:

  • 堆大小主要取决于你所用设备的分辨率使用,因为更高的分辨率需要更大的图像/位图大小来适应in.(更多像素 = 需要更多内存来合并)

  • 虽然,我没有通过任何书面证明..根据我的了解堆大小还取决于 RAM 大小。因为,更大
    RAM 大小将允许更灵活的多任务处理和更少
    获得“OutOfMemoryError”

  • 的机会

如果您需要知道可以使用的堆内存的确切数量,ActivityManager.getMemoryClass()。此方法返回一个整数,指示可用于您的应用程序堆的兆字节数

ActivityManager.getLargeMemoryClass() 用于更大的堆大小

关于android - Nexus 的最大堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com