试着把.net的GC讲清楚(2)
上篇文章说了一些基本概念的东西,然后还有很多东西概念没有头绪,这篇文章我试着解释
GC的回收算法详细步骤?
上篇]文章讲了.net GC的算法是Mark and Compact,不过到底是怎么执行的,我这几天查了资料,找到一篇博客说明了,它分为了几个阶段
Mark phase
这个阶段没得说,就是标记存活对象的,不考虑Weak Reference(弱引用)对象
Plan phase
这个阶段是决定是执行Compact还是直接执行Sweep(上篇讲到猜测LOH执行的是的Mark and Sweep,其实是不正确的)
Relocate phase
这个阶段是Plan phase决定Compact后,开始对需要移动的对象进行地址重新计算,注意这个时候并不移动,只是重新计算地址
Compact phase
这个阶段开始移动对象。
Sweep phase
移动完成对象了还需要Sweep?是因为,GC把所有的对象都修改为了连续的,其中一些对象被回收后还是在存活对象之间。Sweep就是使用Free Object把这些空白的内存填充起来,并添加到一个叫Free list里面。
为什么要用Free object创建填充?不是很清楚,猜测是为了下次回收的时候一块把连续的内存回收了。
为什么会有LOH?
LOH存在的意义也就是为了性能;大对象太大了,移动花费时间太长了,所以做了一个LOH专门存储大对象,这样对他们就区别对待了。
上篇文章说过,>=85000字节就分配到LOH中,为什么是85000?这几天找了很多,发现了是因为在GC申请内存的时候,每次向操作系统申请的一个内存块大小为8k(Allocation Quantum),估摸着跟这个数值有关。
LOH其它一些信息
再次看到一个新颖的说法,说是LOH的gen是3,而不是2,待定
workstation,server GC模式到底区别是啥?
- workstation GC:这么说吧,它非常的保守的进行内存什么的管理,有点像守财奴,一点点的申请,所以GC申请内存小点。
- Server GC:就是那种暴发户,往大了申请内存,越多越好,所以可以预见到Server GC模式下,内存耗费是非常惊人的,在查找资料的时候有人在docker中运行.net core的程序,占用内存太大了被重启,改了workstation gc后内存就大幅下降。
其它的concurrent其实就是gc线程是和用户线程可以并行执行的,提高了程序性能,减少了GC时的等待时间
参考
试着把.net的GC讲清楚(2)的更多相关文章
- 试着把.net的GC讲清楚(1)
什么是GC? GC(garbage collection)是对内存管理中回收已经不用的内存的一种机制,我们熟知的java和.net都有自己的GC机制,是内存管理的一部分. 为什么会有GC呢?是因为动态 ...
- 试着把.net的GC讲清楚(3)
前两篇写的都是gc的一些概念和细节,这些东西对自己以后写代码有什么用,本篇我就准备将这些内容. root 第一篇文章中讲了GC在遍历存活对象的时候,都是从root开始的,root是一些对象的引用,例如 ...
- 《你不知道的JavaScript下卷》知识点笔记
1. [1, 2, 3] == [1, 2, 3] 返回false [1, 2, 3] == “1, 2, 3” 返回true 2. 如果 < 比较的两个值都是字符串, 就像在b < c中 ...
- 试着讲清楚:js代码运行机制
一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...
- 深入浅出聊优化:从Draw Calls到GC
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
- PHP新的垃圾回收机制:Zend GC详解
概述 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果re ...
- GitHub上那些值得一试的JAVA开源库--转
原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...
- 转:面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
转自:http://jeromecen1021.blog.163.com/blog/static/18851527120117274624888/ 面试题目: 地球人都知道,Java有个东西叫垃圾收集 ...
- 优化 从Draw Calls到GC
原文出处: 慕容小匹夫的博客(@慕容小匹夫) 欢迎分享原创到伯乐头条 前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章 ...
随机推荐
- python爬虫知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- div流加载
var hasNext=true;//触发开关,防止多次调用事件 var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度) var nScrollTop = 0; //滚动 ...
- vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成
由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...
- python简单词频统计
任务 简单统计一个小说中哪些个汉字出现的频率最高 知识点 文件操作 字典 排序 lambda 代码 import codecs import matplotlib.pyplot as plt from ...
- ASP.NET导出word实例
ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中,由于数据是动态的,所以需要在后台拼出想要的的格式,翻遍了网页找出了一个比较满意的代码,感谢那位高手.代 ...
- 关于jwplayer 处理进度条禁止快进的处理方法。
今天在处理一个关于jwplayer 第一次播放禁止快进,但是可以后退的一个需求.开始在网上去查一些方法,有几个方法是换皮肤,禁止点击,但是和我的初衷不是很一致,还有一种方式是官网查看了API接口的方 ...
- mybatis-自定义typeHandler
场景一:有个java.util.Date在存入数据库的时候自动转换为timestamp时间戳,从数据库取值的时候把时间戳自动转换为java.util.Date 表结构 CREATE TABLE `us ...
- HX711初步处理记录
参考文档为极客工坊大神记录 http://www.geek-workshop.com/forum.php?mod=viewthread&tid=2315&highlight=hx711 ...
- Eclipse设置代码自动提示
Eclipse只需几步简单的设置就可以像idea那样代码自动提示了,喜欢的小伙伴可以赶紧动手设置,提升效率. 第一步:打开Eclipse --> Window --> Preference ...
- tomcat启动报错
[toc]启动错误 does not exist or is not a readable directory 问题:tomcat启动报错:does not exist or is not a rea ...