上篇文章说了一些基本概念的东西,然后还有很多东西概念没有头绪,这篇文章我试着解释

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)的更多相关文章

  1. 试着把.net的GC讲清楚(1)

    什么是GC? GC(garbage collection)是对内存管理中回收已经不用的内存的一种机制,我们熟知的java和.net都有自己的GC机制,是内存管理的一部分. 为什么会有GC呢?是因为动态 ...

  2. 试着把.net的GC讲清楚(3)

    前两篇写的都是gc的一些概念和细节,这些东西对自己以后写代码有什么用,本篇我就准备将这些内容. root 第一篇文章中讲了GC在遍历存活对象的时候,都是从root开始的,root是一些对象的引用,例如 ...

  3. 《你不知道的JavaScript下卷》知识点笔记

    1. [1, 2, 3] == [1, 2, 3] 返回false [1, 2, 3] == “1, 2, 3” 返回true 2. 如果 < 比较的两个值都是字符串, 就像在b < c中 ...

  4. 试着讲清楚:js代码运行机制

    一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...

  5. 深入浅出聊优化:从Draw Calls到GC

    前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...

  6. PHP新的垃圾回收机制:Zend GC详解

    概述 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果re ...

  7. GitHub上那些值得一试的JAVA开源库--转

    原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...

  8. 转:面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”

    转自:http://jeromecen1021.blog.163.com/blog/static/18851527120117274624888/ 面试题目: 地球人都知道,Java有个东西叫垃圾收集 ...

  9. 优化 从Draw Calls到GC

    原文出处: 慕容小匹夫的博客(@慕容小匹夫)   欢迎分享原创到伯乐头条 前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章 ...

随机推荐

  1. 【开发技术】JAutodoc使用指南

    JAutodoc使用指南 下载地址:http://sourceforge.net/projects/jautodoc/?source=directory 使用方法:http://wenku.baidu ...

  2. 【开发技术】对文件内容进行加密-java

    http://hi.baidu.com/java0804ms/item/111ea834fbd4d2f596f88d5a 实现效果:对文件内容进行加密,使之直接打开成为乱码,不以明文显示 实现步骤:1 ...

  3. Css雪碧图

    Css雪碧图: CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分. 原理 ...

  4. 记一些安卓app反编译修改的记录

    2017-12-2209:00:40 好几天没有写过博客了,因为马上要期末考试,只能暂且放下我的小玩物,专心复习我的期末考试. 今天突然想设置一个安卓的栏目,记录下自己从高中就爱玩的一些东西,像刷机呀 ...

  5. 关于手残,搞废我的OLED屏幕的 追悼会

    2017-12-1913:36:41 昨天按照B站的资料利用esp12F做了一个天气站,可预报天气,惭愧的是模型做好了,照片还没拍就夭折了,可怜了我20块的屏幕,我心伤悲,莫知我哀呀! 本来调试已经成 ...

  6. Log4j扩展使用--自定义输出

    写在前面的话 log4j支持自定义的输出.所有的输出都实现了自Appender接口.一般来说,自定义输出值需要继承AppenderSkeleton类,并实现几个方法就可以了. 写这篇博客,我主要也是想 ...

  7. 自己用的一套reset.css,打算整理一下方便以后用,持续更新中,各位大神,不喜勿喷

    *{margin: 0; padding: 0;border:none;}img{vertical-align: top;width: 100%;border: none;}ul,li{list-st ...

  8. 解决Flink输出日志中时间比当前时间晚8个小时的问题

    Flink安装在CentOS7上,默认时间是UTC时间,查看Flink日志,发现输出时间比当前时间晚8个小时. 通过如下命令,调整成北京时间 cp /usr/share/zoneinfo/Asia/S ...

  9. cursor的moveToNext()与moveToFirst()

    String sql = "select count(*) as c from sqlite_master where type ='table' and name ='" + t ...

  10. 04_Javascript初步第二天(上)

    全局函数 isFinity() - 检测是否是无穷值(+infinity,-infinity,NaN返回false): isNaN() - 检测是否为数值 encodeURI(uri) - 将字符串编 ...