Dalivik垃圾回收收机制Cocurrent GC简介
在C/C++中,开发者需要手动地管理在堆中分配的内存,但是这往往导致很多问题。
1、 内存分配之后忘记释放,造成内存泄漏。
2、 非法访问那些已经释放了的内存,引发程序崩溃。
没有一个好的C/C++应用程序开发框架,一般的开发者根本无法驾驭内存问题,因为程序大了之后,很容易造成失控。最要命的是,内存被破坏的时候,并不一定就是程序崩溃的时候,它就是一颗不定时炸弹,说不准什么时候会被引爆,查找原因也是非常困难的。Java 语言运行在虚拟机上,虚拟机可以自动回收那些不再使用了的Java Object,也就是那些不再被引用了的Java Object。 这就是Java语言的一种重要特性--垃圾自动收集机制。 垃圾回收机制将开发者从内存问题中解放出来,极大地提高了开发效率,以及提高了程序的可维护性。这也是Android为什么会选择Java而不是C/C++来作为主要应用程序开发语言的原因之一。就是为了能够让开发远离内存问题,而将精力集中在业务上,开发出更多更好的APP来,从而迎头赶超iOS。Android系统内存也存在大量的C/C++代码,这只要考虑性能问题, 不过,为了避免出现内存问题,在Android系统内部的C++代码,大量地使用了智能指针来自动管理对象的生命周期。选择Java来作为Android应用程序的开发语言,可以说是技术与商业之间一个折衷,事实证明,这种折衷是成功的。
在GingerBread(android2.3)之前,Dalvik虚拟使用的垃圾收集机制有以下特点:
1. Stop-the-world,也就是垃圾收集线程在执行的时候,其它的线程都停止;
2. Full heap collection,也就是一次收集完全部的垃圾;
3. 一次垃圾收集造成的程序中止时间通常都大于100ms。
GingerBread(android2.3)---Kit Kat(4.4),Dalvik虚拟使用的垃圾收集机制得到了改进
1. Cocurrent GC : 也就是大多数情况下,垃圾收集线程与其它线程是并发执行的
2. Partial collection,也就是一次可能只收集一部分垃圾;
3. 一次垃圾收集造成的程序中止时间通常都小于5ms。
Kit Kat(4.4以上版本),Android开始使用ART替代Dalivk虚拟机, ART的垃圾回收机制有一次做了优化
特点和Dalivik基本一致,效率上比Dalivik更优!!!
图1 Dalvik虚拟机垃圾收集机制的基本概念
图2 Dalvik虚拟机的堆
Dalvik虚拟机执行完成一次垃圾收集之后,我们通常可以看到类似以下的日志输出:
D/dalvikvm(9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms copy
图3 Heap Bitmap
1、在Dalvik虚拟机中,使用一个unsigned long数组来描述一个Heap Bitmap。
图4 Card Table
图5 Mark Stack
Dalivik垃圾回收收机制Cocurrent GC简介相关推荐
- Java GC(垃圾回收)机制知识总结
Java GC系列 Java关键术语 Java HotSpot 虚拟机 JVM体系结构 Java堆内存 启动Java垃圾回收 Java垃圾回收过程 垃圾回收中实例的终结 对象什么时候符合垃圾回收的条件 ...
- 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例
53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...
- JVM 垃圾回收算法机制及其实现原理
前言 对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.JV ...
- python得垃圾回收机机制gc
一.为什么要有垃圾回收 解释器在执行到定义变量得语法时,会申请内存空间来存放变量得值,但是由于内存空间是有限得,所以这就涉及到了内存回收问题了,当一个变量值没有用了(简称垃圾),这种时候就应该回收掉这 ...
- python 类定义 垃圾_什么是python对象摧毁?python中的对象摧毁(垃圾回收)机制是什么?...
在这篇文章之中我们来了解一下python对象摧毁(垃圾回收),对于刚刚接触到python这一编程语言的朋友来说,对于python对象摧毁(垃圾回收)的了解应该比较少,并且不清楚关于python垃圾回收 ...
- GC(垃圾回收)保守式GC
垃圾回收算法可以分为两类,保守式GC和准确式GC.保守式GC指的是:不能识别指针和非指针的GC,而保守就保守在:将非指针指向的对象视为活动对象并且不废弃处理.准确式是指:能够识别保守式GC和准确式GC ...
- JVM(三)GC垃圾回收以及四种GC算法
JVM(三) 学习视频链接,以示尊重:https://www.bilibili.com/video/BV1iJ411d7jS?p=4 图片来源:https://blog.csdn.net/weixin ...
- 【垃圾回收】喂,GC你晓得伐?
<子曰>就是孔子说的富有哲理的话,你晓得伐? 子曰:"学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?" 曾子曰:"吾日三省吾身:为人 ...
- 垃圾回收之ZGC/Shenandoah GC
1.特点 1)GC 最大停顿时间不超过 10ms 2)堆内存支持范围广,小至几百 MB 的堆空间,大至 4TB 的超大堆内 存(JDK13 升至 16TB) 3)与 G1 相比,应用吞吐量下降不超过 ...
最新文章
- 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
- 第五轮学科评估再提“破五唯”
- java oschina_简单说说 OSChina 的技术架构
- 程序编码应保持良好的规范(C#)
- python 内建函数 str() 和 repr() 的区别
- Android 系统(256)---camera如何dump image buffer大全
- seo按天扣费系统_网站seo优化多少钱,SEO快速排名按天扣费怎么样
- css里面设置body背景图片满屏
- Spring Boot 之 RESRful API 权限控制
- php 获取TZ时间格式
- Java商店管理系统
- LaTeX 安装及环境配置
- 6v电源控制12v继电器
- 小米弹性调度平台Ocean
- Java爬虫 --- 爬取王者荣耀英雄图片
- 1.13 新概念 否定疑问句 半否定 全否定
- 探索 OkHttp 原理
- SAP BASIS经验书
- 华为手机拍照那么厉害,为什么就你拍的不好看?原来是因为这些功能
- c/c++ 洛谷 P1007 独木桥