Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序堆大小_Android_Heap Memory - Fatal编程技术网

Android应用程序堆大小

Android应用程序堆大小,android,heap-memory,Android,Heap Memory,Android如何确定应将特定数量的堆分配给应用程序 例如,如果应用程序大小为13MB,并且应用程序加载到 带有ram 512的MDPI设备为其分配20mb的堆大小 如果加载到 HDPI带有512MBram的设备分配50mbram 如果加载到 HDPI带有1MBram的设备仍然分配50mbram 为了 XHDPI具有1gbRam的设备分配68mb 以及 XXHDPI具有2GBram的设备,它分配堆大小134mb 我的问题是 Android如何计算和分配应用程序的大小 这种分配取决于RAM大小或

Android如何确定应将特定数量的堆分配给应用程序

例如,如果应用程序大小为13MB,并且应用程序加载到

带有ram 512的MDPI设备为其分配20mb的堆大小

如果加载到

HDPI
带有
512MB
ram的设备分配
50mb
ram

如果加载到

HDPI
带有
1MB
ram的设备仍然分配
50mb
ram

为了
XHDPI
具有
1gb
Ram的设备分配
68mb

以及

XXHDPI
具有
2GB
ram的设备,它分配堆大小
134mb

我的问题是

  • Android如何计算和分配应用程序的大小
  • 这种分配取决于RAM大小或设备类型(如mdpi、hdpi等),还是取决于两者
  • 这取决于操作系统版本吗
  • android操作系统使用什么特定公式来计算和分配应用程序的内存

    • 这不是真正的计算。根据需要从底层操作系统分配堆内存,最高可达VM特定的限制。您看到的是分配的堆大小


      不同设备的不同主要是因为更高分辨率的位图需要更多的内存。

      我想看一下

      分配和回收应用程序内存

      以下是关于Android如何分配然后回收内存的一些事实 从您的应用程序:

      每个进程的Dalvik堆被限制为一个虚拟堆 内存范围。这定义了逻辑堆大小,它可以随时间增长 需要(但仅限于系统为每个 应用程序)。堆的逻辑大小与堆的数量不同 堆使用的物理内存。检查应用程序堆时, Android计算一个称为比例集大小(PSS)的值,该值 与其他用户共享的脏页和干净页的帐户 进程,但数量与应用程序数量成比例 分享那只公羊。这个(PSS)总数是系统认为的 您的物理内存占用。有关PSS的更多信息,请参阅 调查您的RAM使用指南。Dalvik堆没有 压缩堆的逻辑大小,这意味着Android不会 对堆进行碎片整理以关闭空间。安卓系统只能缩小规模 当堆末尾有未使用的空间时,逻辑堆大小。 但这并不意味着堆使用的物理内存不能 收缩垃圾收集后,Dalvik走到堆中,发现 未使用的页面,然后使用madvise将这些页面返回到内核。 因此,大数据块的成对分配和释放应该会产生结果 回收所有(或几乎所有)使用的物理内存。然而, 从较小的分配中回收内存的效率可能要低得多 因为用于小分配的页面仍可能与共享 还没有被释放的东西

      限制应用程序内存

      为了维护一个功能齐全的多任务环境,Android设置了 每个应用程序堆大小的硬限制。确切的堆大小限制 根据设备可用RAM的多少,设备之间的差异不同 总的来说。如果您的应用程序已达到堆容量并尝试 如果分配更多内存,它将收到OutOfMemoryError

      在某些情况下,您可能需要查询系统以准确地确定 当前设备上有多少堆空间可供使用 例如,确定有多少数据可以安全地保存在缓存中。你 可以通过调用getMemoryClass()查询系统中的此数字。这 返回一个整数,该整数指示可用于 你的应用程序的堆。下面将进一步讨论这一点,在“检查多少”下 你应该使用的内存

      只需提取您想要的信息:

    • 确切的堆大小限制因设备而异,具体取决于大小 RAM设备总体上可用

    • 您可以深入研究源代码以了解堆内存的使用情况 计算过了,但我不确定你会从中得到什么

    • 堆内存可能会因操作系统版本的不同而有所不同 服务和操作系统资源使用方面的许多差异将影响 从中取出后,一个设备有多少RAM可用 总公羊数

    • 如果您真的在寻找关于内存堆的深入信息,我会使用内存调试工具

      如果您在运行时调用maxmemory(),您将得到一个上限,这意味着它来自一些计算,很明显,没有任何计算,它不会提供任何空间,因此我与您进行了分解,它不是真正计算的运行时。maxmemory()返回特定于VM的限制。这是由设备制造商设置的配置设置。