GC算法介绍及工作原理和优缺点
一.GC定义与作用
GC就是垃圾回收机制的简写 GC可以找到内存中的垃圾,并释放和回收空间,GC里的垃圾是什么 如下图所示:

GC算法是什么:GC是一种机制,垃圾回收器完成具体的工作 工作的内容就是查找垃圾释放空间,回收空间算法就是工作时查找和回收
所遵循的规则。常见GC算法有引用计数,标记清除,标记整理,分代回收。
二.GC算法的工作原理及优缺点
1.引用计数算法实现原理
核心思想:设置引用数,判断当前引用数是否为0 引用关系改变时修改引用数字,比如有一个对象指向它 他的引用计数+1 多个对象
引用,引用计数累加引用计数累加,当没有对象引用时引用计数为0 GC立即进行回收,下面通过代码来分析下工作原理:

上述代码中,从全局角度出发,user1,user2及meauList 计数都不为0 ,num1和num2,当函数fn()执行完成后全局作用访问不到num1
和num2,所以说num1和num2计数为0,会被GC回收。当所有的代码执行完成后,user1和user2也不为0,因为被meauList数组中引
用,所以计数+1
2.引用计数算法的优缺点
优点:
最大限度的减少程序暂停,内存有一定的上限,当内存即将爆满时,引用计数会立马找到数值为0的计数空间对其进行释放,这样就保
证了内存不会有暂满的时候。
缺点:
1.时刻监听着引用数值是否需要修改,时间开销比较大
2.无法回收循环引用的对象 具体用代码实现如下图所示:

如上图所示:当fn执行完成后,obj1和obj2都是局部变量,按说是要被回收的,但是后面obj1.name=obj2,obj2.name=obj1有着互相被
引用的关系,所以说数值并不为0,就没有办法对这两个空间进行回收了,从而造成了内存空间的浪费,这也就是对象之间的循环引
用。
3.标记清除算法实现原理
核心思想:分标记和清除 二个阶段完成,
第一个阶段 遍历所有对象找标记活动对象(可达对象)。
第二个阶段 把那些没有被标记的对象进行清除 同时也会抹掉第一个阶段的标记 便于我们GC下次正常的工作把回收的空间放到一个
空闲列表的上面,方便我们的程序后续直接在这里申请空间。
用图示方式进行举例说明:

如上图所示A B C为全局变量,D E被A和C引用 所以ABCDE都是可达对象 第一步会被标记上,第二阶段 查询没有被标记的对象 如上
图中的a1和b1为未标记的,全局作用域内查询不到,则会被GC清除掉。
4.标记清除算法的优缺点
优点:
可以回收循环引用的对象,如上图所示,比如a1和b1为函数内部的局部变量,就失去了与全局global的连接,不可达的对象在标记阶段就
不可标记,在第二个阶段会被清除,而在引用计数算法中有引用的关系 所以计数不为0 所以不能被清除
缺点:
如下图所示,我们从根去查找 红色区域为一个可达对象,左右两侧分别为两个不可达的对象,在第二轮的清除操作中会被清除掉,再
把剩余空间添加到空闲列表之上,这就有一个问题了,比如最左侧的是B对象,中间的可达对象为A对象,最右侧的为C对象,BC对象
存储语言信息,比如大小和地址,我们称之为头。还有一个我们存放数据的称之为域,看上去是释放了3个域的大小,但是中间间隔着
A对象,其实他们还是分散的,也就是地址不连续,如果说操那个申请列表申请1.5个域大小的空间,左侧超出了浪费,右侧直接就不够
,称之为空间的碎片化。

5.标记整理算法的实现原理
标记整理可以看做标记清除的一个增强操作,标记阶段的操作与标记清除一致,第二个阶段在标记清除阶段会先执行整理,移动对
象位置,这样可以避免分散的地址的不连续的小空间,如下图所示:


GC算法介绍及工作原理和优缺点的更多相关文章
- 简要总结ajax工作原理及优缺点
虽然在实际的项目中使用多种ajax请求,但就其工作原理,优缺点尚未深入总结, 参考:http://www.cnblogs.com/SanMaoSpace/archive/2013/06/15/3137 ...
- AJAX工作原理及其优缺点
1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...
- AJAX的工作原理及其优缺点
1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它使用:使用XHTML ...
- keepalived介绍及工作原理
keepalived介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防 ...
- [转]AJAX工作原理及其优缺点
1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它使用:使用XHTML ...
- Lombok简介、使用、工作原理、优缺点
1.Lombok简介官方介绍 Project Lombok is a java library that automatically plugs into your editor and build ...
- SharePoint Client Object Model API 介绍以及工作原理解析
CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...
- servlet 容器,工作原理,优缺点
转自http://blog.sina.com.cn/s/blog_b5a157500101ld71.html servlet:是以java技术为基础,应用于服务器端的程序组件,本质就是java代码,用 ...
- Ajax的工作原理以及优缺点
Ajax的工作原理 : 相当于在客户端与服务端之间加了一个抽象层(Ajax引擎),使用户请求和服务器响应异步化,并不是所有的请求都提交给服务器,像一些数据验证和数据处理 都交给Ajax引擎来完成,只有 ...
随机推荐
- 面试官:小伙子,你给我简单说一下RocketMQ 整合 Spring Boot吧
前言 在使用SpringBoot的starter集成包时,要特别注意版本.因为SpringBoot集成RocketMQ的starter依赖是由Spring社区提供的,目前正在快速迭代的过程当中,不同版 ...
- 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: 上一篇文章提到了生产环境中你可以使用binlog ...
- 20201207-2 openpyxl 库与模块导入
1-1 import openpyxl # 通过文件路径,打开工作簿 wb1 = openpyxl.load_workbook('./demo_excel.xlsx') # 用 Workbook() ...
- Linux(CentOS7)安装Nginx(附简单配置)
1. 安装make yum -y install gcc automake autoconf libtool make 2. 安装gcc yum -y install gcc gcc-c++ 3. 安 ...
- [日常摸鱼]bzoj1001狼抓兔子-最大流最小割
题意就是求最小割- 然后我们有这么一个定理(最大流-最小割定理 ): 任何一个网络图的最小割中边的容量之和等于图的最大流. (下面直接简称为最大流和最小割) 证明: 如果最大流>最小割,那把这些 ...
- [OI笔记]NOIP2017前(退役前)模拟赛的总结
好久没写blog了- 在noip2017前的最后几天,也就是在我可能将要AFO的前几天写点东西吧- 记录这最后几个月打的那些大大小小的模拟赛 一些比赛由于不允许公开所以就没有贴链接跟题面了- 2017 ...
- 附029.Kubernetes安全之网络策略
目录 环境构建 基础环境构建 网络测试 安全策略 策略配置 策略测试 ingress方向测试 egress方向测试 to和from行为 默认策略 环境构建 基础环境构建 [root@master01 ...
- 简单的堆排序-python
AA = raw_input().strip().split(' ') A = [] ###############初始化大堆############### def fixUp(A): k = len ...
- PHP可回调类型
一些函数如usort和call_user_func()可以作为用户自对应函数做为回调参数,回调函数不止是简单的函数,还可以是对象的方法(类方法),包括静态方法. 用户自定义函数作为回调函数的参数,PH ...
- Ubuntu使用Nginx 部署你的静态网页
首先使用Putty 登录填写名称 unbutu 然后获取管理员权限 sudo -i 首先更新APT库sudo apt-get updatesudo apt-get upgrade 安装 git,su ...