Native heap 和Dalvik heap 学习总结
最近在开发flutter app,发现flutter app的内存使用和之前android java app 有很大区别,flutter app 运行时Native heap占大头,android java app运行时, dalvik heep 占大头。
于是重新学习了一遍android内存知识,大致总结如下
1,进程的地址空间分为stack和heap,
stack是栈,由操作系统控制, 函数地址、参数,内部变量都在栈上,栈不大,一般几MB
heap是堆,由程序员控制,所以malloc, new, free 这些操作符来申请、释放堆内存,所以容易出现申请了但不释放等内存泄漏情况
2,native进程,是由c/c++分配的,/system/bin下面的所有程序运行在native进程中
dalvik进程,是由java程序的dalvik虚拟机分配的,dalvik虚拟机的宿主进程是由fork()系统创建的,所以每个java进程都是运行在一个native进程中
android系统的应用程序基本都是java程序
3,OOM
程序运行时经常会出现OOM现象,这个oom并不是没有ram可以用了,而是因为Dalvik heap的使用超过了系统允许的上限,即vm heap 的最大值
Android google之所以这样设计是为了让更多app常驻内存,不用每次启动都要加载资源浪费时间。
4,Ram真的不足
OOM并不是表示Ram不足,但是一旦ram真的不足,即多个app在后台运行时, 系统将会首先杀死优先级不高的app来释放内存
5,如何查看ram使用信息
adb shell cat /proc/meminfo
D:\>adb shell cat /proc/meminfo
MemTotal: 807776 kB
MemFree: 62648 kB
MemAvailable: 186472 kB
Buffers: 2552 kB
Cached: 121752 kB
SwapCached: 140 kB
Active: 211812 kB
Inactive: 270664 kB
Active(anon): 166164 kB
Inactive(anon): 202052 kB
Active(file): 45648 kB
Inactive(file): 68612 kB
Unevictable: 9180 kB
Mlocked: 0 kB
SwapTotal: 511996 kB
SwapFree: 499492 kB
Dirty: 36 kB
Writeback: 0 kB
AnonPages: 367276 kB
Mapped: 50232 kB
Shmem: 864 kB
Slab: 51064 kB
SReclaimable: 23028 kB
SUnreclaim: 28036 kB
KernelStack: 14368 kB
PageTables: 9464 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 915884 kB
Committed_AS: 20248668 kB
VmallocTotal: 1048576 kB
VmallocUsed: 94208 kB
VmallocChunk: 852292 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
6,查看单个进程的内存使用情况
D:\>adb shell dumpsys meminfo com.wocheng.wcy
Applications Memory Usage (kB):
Uptime: 1270811 Realtime: 1270811
** MEMINFO in pid 6768 [com.wocheng.wcy] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 43062 43060 0 20 55264 40004 3403
Dalvik Heap 4258 4252 0 4 4508 4297 211
Dalvik Other 4153 4132 0 76
Stack 296 296 0 0
Other dev 5 0 4 0
.so mmap 7930 464 7092 608
.jar mmap 28 0 28 0
.apk mmap 16 0 4 0
.ttf mmap 734 0 328 0
.dex mmap 4755 400 4088 0
Other mmap 8 4 4 0
GL 46452 46452 0 0
Unknown 12224 12224 0 4
TOTAL 123921 111284 11548 712 59772 44301 3614
7,bitmap为什么容易导致OOM
Bitmap的申请是在dalvik heap上,,所以过多的bitmap会造成oom
8,内存错误过程
Dalvik heap增加到vm heap 最大值,出现OOM
当ram增加到最大值,而且无其他app内存释放使用时,会唤醒memory killer
9, flutter 的内存使用主要在native heap 和GL上, 不太容易OOM,但是使用过多的话容易造成memory killer 引起的闪退
Native heap 和Dalvik heap 学习总结相关推荐
- 算法学习 (门徒计划)2-2 堆(Heap)与优先队列 学习笔记
算法学习 (门徒计划)2-2 堆(Heap)与优先队列 学习笔记 前言 堆(Heap)的概念和基础操作 基础概念 基础操作 入堆与上滤 出堆与下滤 自定义类实现堆 优先队列 经典例题,堆的基础应用 l ...
- MAT工具学习,incoming reference和outgoing reference,Shallow Heap和Retained Heap
MAT工具学习 incoming reference和outgoing reference Shallow Heap和Retained Heap 常用工具 一般思路 incoming referenc ...
- Heap Allocation Profiles (heap=sites)
Heap Allocation Profiles (heap=sites) 基于JDK-6,使用的类不同,展示的信息可能不同,内容一样的javac -J-agentlib:hprof=heap=sit ...
- java heap 参数_java heap space解决方法和JVM参数设置
因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 java.lang.OutOfMemoryError: Java heap space 这样的错误. 在网上一查可能是JAVA的堆栈设置 ...
- Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?
原文在这里: Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思? MAT是一款非常强大的JVM内存映像分析工具,对分析内存相关的问题非常有用,MAT报告中对 ...
- java heap 查看_JAVA HEAP查看简单办法
JAVA HEAP查看简单办法 最近在看JVM有关东西,发现一个简单和free的HEAP DUMP查看方式(基于SUN JDK) 先使用 jmap -dump:live,format=b,file=h ...
- 全能Android HOOK框架 JNI NATIVE JAVA ART DALVIK
OneHook 目前比较流行的几个安卓HOOK方案,都有功能上的欠缺,有的不支持art模式,有的不支持jni层,有的不支持侵入HOOK. 所以OneHook诞生了! 这是一个同时支持ART和Dalvi ...
- 全能HOOK框架 JNI NATIVE JAVA ART DALVIK
OneHook 目前比较流行的几个安卓HOOK方案,都有功能上的欠缺,有的不支持art模式,有的不支持jni层,有的不支持侵入HOOK. 所以OneHook诞生了! 这是一个同时支持ART和Dalvi ...
- java heap 参数_java heap space解决方法和JVM参数设置--- JVM参数设置和程序优化篇
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
最新文章
- jQuery 1.9 移除了 $.browser 的替代方法
- applet打包的MANIFEST.MF配置
- 发现WinSRV2003SP1并没有包含ASP+Access的BUG更新
- 什么是Memcache
- python安装tensorflow_tensorflow安装过程-(windows环境下)---详解(摆平了很多坑!)...
- 生日蜡烛——第七届蓝桥杯C语言B组(省赛)第二题
- 报表被老板吐槽又多又丑?因为你没有掌握这些动态报表的技巧
- 应用程序错误 应用程序发生异常w3wp.exe
- ZooKeeper 3.0.0发行说明
- Java基础04 编译与反编译
- 计算机组成原理期末考试题目及答案,计算机组成原理期末考试试题附标准答案.doc...
- 施工日志管理软件app_启用ERP装修管理软件的必要性
- oracle e18,oracle 体系结构
- wordpress如何压缩HTML代码
- Xcode6与Xcode5之间的细节差别(Precompile Prefix Header)
- demo VelocityTracker
- android指纹测试,Android指纹识别
- 屏幕不光只看尺寸 各材质屏幕实战解析
- 推荐:(链接)幽默男女--绝对搞笑!!(每日更新)
- 如何让android的service一直在后台运行?,保持service一直在后台运行
热门文章
- 亲密接触中国SaaS应用(中)
- C++:重载运算符“+”,用于复数加法运算。(如c1+c2,i+c1,c1+i(i为整数))
- python手机解释器_用Python实现一个Python解释器
- linux网络存储备份,备份基础:Linux异构网络共享光盘刻录(下)
- 小学生认识计算机网络教案,小学计算机教案
- Puppet应用配置的工作原理
- 为什么选择 Intellij IDEA 作为日常开发工具
- Verizon宣布完成对AOL的44亿美元收购
- 2021年全球干细胞收入大约2832.7百万美元,预计2028年达到5673.4百万美元,2022至2028期间,年复合增长率CAGR为11.3%
- java中abstract什么意思中文_ABSTRACT中文什么意思