5-Dalvik垃圾收集机制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
5-Dalvik垃圾收集机制Cocurrent GC的更多相关文章
- Dalvik虚拟机的垃圾收集机制
垃圾收集机制是Java虚拟机共有的特性, 这里介绍Dalvik虚拟机的垃圾收集机制特点. 在android2.3之前,有以下几个特点: 1. 垃圾收集线程在执行的时候,其它线程都停止. 2. 一次 ...
- JAVA垃圾收集机制剖析
1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽 ...
- java内存机制和GC垃圾回收机制
Java 内存区域和GC机制 转载来源于:https://www.cnblogs.com/zhguang/p/3257367.html 感谢 目录 Java垃圾回收概况 Java内存区域 Java对象 ...
- JAVA的垃圾回收机制(GC)
1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 2.什么时候 ...
- .Net Discovery 系列之七--深入理解.Net垃圾收集机制(拾贝篇)
关于.Net垃圾收集器(Garbage Collection),Aicken已经在“.Net Discovery 系列”文章中有2篇的涉及,这一篇文章是对上2篇文章的补充,关于“.Net Discov ...
- .Net Discovery系列之三 深入理解.Net垃圾收集机制(上)
前言: 组成.Net平台一个很重要的部分----垃圾收集器(Garbage Collection),今天我们就来讲讲它.想想看没有GC,.Net还能称之为一个平台吗?各种语言虽然都被编译成MSIL,但 ...
- .net垃圾收集机制【转】
在.NET Framework中,内存中的资源(即所有二进制信息的集合)分为"托管资源"和"非托管资源".托管资源必须接受.NET Framework的CLR( ...
- 浅析JAVA的垃圾回收机制(GC)
1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...
- [转帖]JVM—深入理解内存模型与垃圾收集机制
JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...
随机推荐
- java 如何使的float保留2位或者多位小数
方法1: float f = 34.232323; BigDecimal b = new BigDecimal(f); float f1 = b.set ...
- 重学css3(概览)
css3新特性概览: 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 5.文字阴影 6.开放字体类型 7.圆角 8.边框图片 9.盒子阴影 10.媒体查询 浏览器内核又可以分成两 ...
- Python02 变量
变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...
- json代码驾照考题批量加入MySQL数据库 ps.executeUpdate()永远只能悲催的加一条数据 去掉id主键自增 用foreach循环数据库只能出现一条语句
package com.swift; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStrea ...
- 洛谷P2908 [USACO08OPEN]文字的力量Word Power
题目描述 Farmer John wants to evaluate the quality of the names of his N (1 <= N <= 1000) cows. Ea ...
- Java - 类加载的时候,是有缺省同步锁的
类加载的时候,是有缺省同步锁的
- mysql主从复制及双主复制
之前做过一次在单台机器上的多实例的mysql,这次分开做,使用两台主机. 这里使用的主机地址分别为: MASTER:192.168.214.135 SLAVE : 192.168.214.128 这 ...
- 添加SQL字段
通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数增加字段: alter table [表名] add 字段名 smallin ...
- 南阳 ACM16 矩形嵌套 动态规划
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ...
- COGS:313. [POI2001] 和平委员会
313. [POI2001] 和平委员会 ★★☆ 输入文件:spo.in 输出文件:spo.out 评测插件时间限制:1 s 内存限制:128 MB 题目描述 根据宪法,Bytelan ...