【问题标题】:Maximum size of native heap on Android?Android上本机堆的最大大小?
【发布时间】:2011-08-18 08:40:45
【问题描述】:

如果我理解正确的话,一个 android 进程有两个堆——一个由 VM 管理,一个由本机管理。

VM 堆的大小不能超过 16mb(至少,这个值在某些手机上可以更高)。

但是本机堆的最大大小呢?

16 mb 限制似乎不是硬性限制,因为应用程序可以通过 NDK 分配超过 16 mb 的空间,但是当内存量很大时,操作系统会开始杀死其他进程,可能还会杀死前台进程用来。

操作系统何时开始以这种方式运行?当原生堆 + VM 堆大小超过 16mb 时?

Debug.getNativeHeapSize() 给出了原生堆的大小,但是有没有一个函数可以检查组合的原生 + VM 堆大小?

很想听听知道这是如何工作的人的消息!

【问题讨论】:

    标签: android memory memory-management android-ndk


    【解决方案1】:

    Android 内存管理中没有“死亡线”。当系统需要杀死进程以回收内存时,它会考虑许多不同的因素,包括进程的重要性(取决于它是否在前台,或为前台应用程序提供服务等因素)以及它有多少内存使用。

    如果您的进程处于空闲状态,并且占用的内存比其他任何东西都多,那么它很可能首先被杀死。

    确切的算法随着时间的推移发生了一些变化,系统不对特定行为做出任何保证。

    【讨论】:

    • 好的,这很有道理。猜测是 16mb + X 总内存使用量会导致进程有被杀死的风险,即使它在前台。 X 的大小可能因操作系统版本等而异。
    猜你喜欢
    • 2011-11-13
    • 2012-12-31
    • 2013-02-18
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多