Android Dalvikvm 内存管理理解

news/2024/7/20 12:36:59 标签: 移动开发, 内存管理, 数据结构与算法

网上非常多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,到底是怎样实现的。

这几天猛看了 Dalvikvm 的源码,说一下我的理解:


在大层面上讲跟理论一样,jvm 把内存分成了一些区,




关于各区的说明參见。

http://blog.csdn.net/lengyuhong/article/details/5953544


对于hello world 这样简单程序,发现dalvikvm也就用了一个heap, 就是Eden区了。


dalvikvm 使用 mmap 创建共享内存(堆是多个线程共享的),就是Eden区,再用dlmalloc 中的( mspace_free,mspace_calloc等) 来自己对它进行管理(也就不在调用OS的内存分派了,这样做可能是由于性能能够预測)

代码在:dalvik/vm/alloc/HeapSource.cpp#dvmHeapSourceStartup

值得注意的是,除了使用dlmalloc,dalvikvm 还是用了2个bitmap的来相应整个堆,一个叫liveBitmap, 一个叫markBitmap 是为了做gc的。

1在gc过程中,先把markbitmap清0

2在sweepscan过程中,找到每一object指针,就在相应markbitmap位置置位,这是一个深度优先(使用了stack)搜索算法

3在liveBitmap中有但markbitmap没有标记的对象就是该在sweep时用mspace_free 来释放

4markbitmap成了了liveBitmap 表明live objects

进入下一次循环


因为对象有大有小,而bitmap 是依照object的最小的size来映射一个bit的, 因此肯定有浪费的空间, 但为了现实marksweep 的高效,这点浪费还是值得的。


新建对象 


(  注意:一般 new创建对象多用汇编实现,但也调用到dvmAllocObject)


垃圾回收顺序图







转载于:https://www.cnblogs.com/zfyouxi/p/4494015.html


http://www.niftyadmin.cn/n/789820.html

相关文章

FY2E HDF格式数据处理绘图

圆盘标称投影数据时静止气象卫星常见的数据产品,比如FY2E静止气象卫星就有很多这样的产品(可以从国家卫星气象中心网站上下载)。所谓的圆盘标称投影就是Geostationary投影,主要的投影参数有中央经度和卫星高度。这里给出一个示例脚…

java回收机制详解

gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 垃圾收集的目的在于清除不再使用的对象。gc通过…

VisualStudio2013 代码查看优化 对齐线

http://jingyan.baidu.com/article/363872eccef5276e4ba16f91.html转载于:https://www.cnblogs.com/Look_Sun/p/4495063.html

jvm原理机制

java虚拟机 一、什么是Java虚拟机 Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 1.为什么要使用Java虚拟机 Java语言的一个非常重要的特点就是与平台的无关性。而…

java的引用和C++的指针有什么区别

大多数的C程序员转学java的时候,都有这样一个疑问,java的引用就是C的指针吗。其实不完全对,他们之间既有前四外绿的联系, 也有很大的区别。 java的引用和C的指针都是指向一块内存址的,通过引用或者指针完成对 内存数据…

Label自适应高度的用法及设置倒角

UILabel *label [[UILabel alloc] init];//根据内容动态计算label的高度label.text "Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions";//1.获取label当前使用的字体UIF…

uml

http://justsee.iteye.com/blog/808799 UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现…

辗转相除算法原理

在学算法的过程中,总是以辗转相除算法求最大公约数开始。但是一直搞不懂辗转相除算法的原理,(表示很惭愧,还不如小学生),转载记录一下 在中国古代就有一个很好的算法来计算a,b的最…