Android上的本机堆的最大大小?

Vik*_*tor 12 memory android memory-management android-ndk

如果我理解正确,一个android进程有两个堆 - 一个由VM管理,一个是本机.

VM堆的大小不能超过16mb(至少,某些手机上的此值可能会更高).

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

16 MB限制似乎不是硬限制,因为应用程序可以通过NDK分配超过16mb,但是当使用大量内存时,操作系统将开始杀死其他进程以及可能的前台进程.

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

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

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

fad*_*den 4

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

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

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