MemoryFile偷取安卓内存

Posted lipeil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MemoryFile偷取安卓内存相关的知识,希望对你有一定的参考价值。

参考链接:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0111/3859.html

MemoryFile memoryFile = new MemoryFile(null, inputStream.available());
memoryFile.allowPurging(false);
OutputStream outputStream = memoryFile.getOutputStream();
outputStream.write(1024);

MemoryFile 分配的内存不占用Java堆内存,在4.4系统以下甚至不占用App内存。4.4以上系统App内存统计计入了Ashmem内存,包含了这部分。

MemoryFile是android在最开始就引入的一套框架,其内部实际上是封装了android特有的内存共享机制Ashmem匿名共享内存,简单来说,Ashmem在Android内核中是被注册成一个特殊的字符设备,Ashmem驱动通过在内核的一个自定义slab缓冲区中初始化一段内存区域,然后通过mmap把申请的内存映射到用户的进程空间中(通过tmpfs),这样子就可以在用户进程中使用这里申请的内存了,另外,Ashmem的一个特性就是可以在系统内存不足的时候,回收掉被标记为”unpin”的内存,这个后面会讲到,另外,MemoryFile也可以通过Binder跨进程调用来让两个进程共享一段内存区域。由于整个申请内存的过程并不再Java层上,可以很明显的看出使用MemoryFile申请的内存实际上是并不会占用Java堆内存的。

 

以上是关于MemoryFile偷取安卓内存的主要内容,如果未能解决你的问题,请参考以下文章

如何偷Android的内存-Tricking Android MemoryFile

如何「偷」Android 的内存?

如何「偷」Android 的内存?

java 代码片段【安卓】

片段从一开始就没有显示 |安卓工作室

安卓。片段 getActivity() 有时返回 null