目录
虚拟内存也会被耗尽
作为Android开发者的我们,一定经历过APP从32位从64位架构的切换。目前国内市场还是存在32架构的要求的,并没有全面禁止,32位架构有一个缺点是,可分配给用户空间的虚拟内存太少了(一般一半留给内核空间,可配置)所以往往导致虚拟内存不足引发OOM。切换成64位架构后,在ARM64上,4kb的页大小情况下默认能分配给进程的虚拟内存大小是2^39次方,其实64位并不能完全分配完,但是39次方这个量级依旧比32位可用的虚拟内存大小大得多,因此往往我们升级为64位架构适配后,虚拟内存不足的问题会被缓解 ,这里比较有意思的是,只是缓解,如果你的应用是长时间存在的话,依旧会触发到因为虚拟内存不足导致的OOM,即使虚拟内存很大了,比如存在大量虚拟内存泄漏的情况。
我们可以看到的例子,比如mmap分配失败了,因为native Thread创建需要mmap创建一层栈空间,又或者是其他调用mmap分配内存时失败
java.la