一.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算法介绍及工作原理和优缺点的更多相关文章

  1. 简要总结ajax工作原理及优缺点

    虽然在实际的项目中使用多种ajax请求,但就其工作原理,优缺点尚未深入总结, 参考:http://www.cnblogs.com/SanMaoSpace/archive/2013/06/15/3137 ...

  2. AJAX工作原理及其优缺点

    1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...

  3. AJAX的工作原理及其优缺点

    1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它使用:使用XHTML ...

  4. keepalived介绍及工作原理

    keepalived介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防 ...

  5. [转]AJAX工作原理及其优缺点

    1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它使用:使用XHTML ...

  6. Lombok简介、使用、工作原理、优缺点

    1.Lombok简介官方介绍 Project Lombok is a java library that automatically plugs into your editor and build ...

  7. SharePoint Client Object Model API 介绍以及工作原理解析

    CSOM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用CSOM来代替),从名字来看,我们可以简单的看出,该API是面向客 ...

  8. servlet 容器,工作原理,优缺点

    转自http://blog.sina.com.cn/s/blog_b5a157500101ld71.html servlet:是以java技术为基础,应用于服务器端的程序组件,本质就是java代码,用 ...

  9. Ajax的工作原理以及优缺点

    Ajax的工作原理 : 相当于在客户端与服务端之间加了一个抽象层(Ajax引擎),使用户请求和服务器响应异步化,并不是所有的请求都提交给服务器,像一些数据验证和数据处理 都交给Ajax引擎来完成,只有 ...

随机推荐

  1. Json处理方式记录

    1.可以直接使用Parse方法 JObject jObject = JObject.Parse(res); string mediaId = jObject["media_id"] ...

  2. Redis存储对象(序列化和反序列化)

    代码以及实例: package com.hp.test; import redis.clients.jedis.Jedis; import java.io.*; public class Test3 ...

  3. qq获取验证码接口

    测试 获取验证码 import smtplib from email.mime.text import MIMEText from email.utils import formataddr #定义参 ...

  4. 如何配置nginx达到只允许域名访问网址,禁止ip访问的效果

    需求:接入阿里云的waf对网站进行防护,但是如果直接通过IP地址访问网站即可绕过阿里云waf,于是希望禁止通过ip访问网站 修改nginx配置文件 在server段里插入如下内容即可 if ($hos ...

  5. redis位操作

    setbit 设置指定key的偏移量处的值 key:键值 offset:二进制数据的偏移量(注意从左开始为第0位) value:要设置的值(0或1) getbit 获取对应key的offset处的值 ...

  6. [水题日常]Luogu1113 杂务

    这几天又在颓. 我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x 如果有错误还请指出~ 写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的 QAQ完全 ...

  7. 听说特斯拉花了4个月研发出新ERP,然后很多人都疯了

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 最近这件事儿在SAP圈里炒的挺火的,最主要是因为这几个关键词: 放弃SAP.4个月.自研ERP: 这则新闻一出来,很多人都兴高采烈,都要疯了 ...

  8. 网站开发学习Python实现-Django项目部署-介绍(6.2.1)

    @ 目录 1.第一步:找源码 2.第二步:在windows中更改代码 2.第三步:同步到linux中 3.第三步:部署 4.第四步:运行 关于作者 1.第一步:找源码 从github上找一个djang ...

  9. Acunetix 11手动导入Burp suite抓取的网页

    设置爬取 因为Burp的代理默认配置拦截所有请求,需要先来关闭这个功能,在Proxy标签页面中,选择Intercept子标签页面,点击 Intercept is on按钮. 使用配置好代理服务器的浏览 ...

  10. Qt QChart 创建图表

    Qt QChart 创建图表 @ 目录 Qt QChart 创建图表 效果 流程 代码 1. 饼图 2. 柱图 3. 折/曲线图 4. 区域图 效果 流程 graph LR q(value 数据) q ...