GC之标记压缩清除算法

标记清除算法

  • 优点:不需要额外的空间!
  • 缺点:两次扫描,严重浪费时间,会产生内存碎片。

标记压缩

再优化:

标记清除压缩

先标记清除几次

再压缩~

推荐这些文章:

JVM垃圾回收机制(堆区)

GC是什么(分代收集算法)

次数上频繁收集Young区 Minor Gc
次数上较少收集Old区 Full GC
基本不动Perm区

使用的算法
年轻代中使用的是Minor GC,这种GC算法采用的是复制算法(Copying)
老年代使用的是标记清除压缩(Mark-Sweep-Compact)

...

【C# .Net GC】手动监视和控制对象的生命周期

 
这个话题还未做详细研究,暂时用不到,只是粗略看了一下。
使用System.Runtime.InteropServices.GCHandle类来手动控制对象的生命周期
(个人感觉这里可能有一些问题...只是草稿而已..还请高手指正)
1.GCHandle.Alloc
  传递一个Object和一个GCHandleType枚举给Alloc方法以控制Object的生命周期,返回一个GCHandle
  1) GCHandleType.Weak 此标志位允许你监视对象生命周期,当对象被标记为不可到达的时候,这个对象的Finalize方法可能执行也可能没有执行,这个对象可能依然存在于内...

什么是浮动垃圾 CMS为什么要重新标记 G1是怎么优化重新标记的过程的

1 浮动垃圾 如图,GC 线程便利对象树(实际是图),遍历过了A ,然后遍历过了B,遍历到了C,但是还没有遍历完C的儿子D,这时候如果 A.B=null; 那么B就变成了浮动垃圾,本次GC 过程B不会被清除。只能下次清除。

 
 
 
2 GC 三色标记算法过程中,白色的节点指向 黑色的节点 怎么办? 
  直接把黑色变成灰色,这是浮动垃圾吗?不是,因为黑色节点变成了灰色,GC线程每次暂停后开始都会重灰色线程开始,也就是说黑色变成灰色以后,会重新便利这个灰色和下面的非黑色节点。
 
 
3 三色算法为什么要重新标记,便利灰色节点的...

JVM基础学习(二):内存分配策略与垃圾收集技术

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来

垃圾收集概述
Java内存模型中的堆和方法区是垃圾收集技术所需要关注的终点,因为其他的区域会跟随线程的结束而自动回收。
而需要解决垃圾收集的首要目标便是解决如何判断一个对象已经不需要了从而自动进行回收;判断对象是否可以进行回收的算法可以分为引用计数算法与可达性分析算法。
对于Redis有一些了解的同学应该知道Redis的对象内存回收算法便是使用的引用计数算法;而JVM都是使用的可达性分析算法,在此我们只讨论可达性分析算法。
可达性分析算法
可达性分析算法简而言之便是从一些称为“GC ...

GC垃圾回收过程

GCROOT:栈、本地方法栈、方法区 直接或间接引用的,不能被删除,和GCROOT无关的对象可直接删除
垃圾回收算法:

标记-清理:

标记与GCROOT无关的对象,删除;

缺点:会产生内存碎片,如果下次进来的对象和GC掉的对象大小不同,就不会使用该块内存

标记-整理:

标记与GCROOT无关的对象,删除并将所有对象前移,减少内存碎片;

缺点:所有对象前移,代价太大

复制:

将内存分为2块,1块中标记与GCROOT无关的对象,复制所有无标记的对象到2块,然后清理整个1块

缺点:需要2倍内存

实际GC过程
内存划分如下,分为

YOUNG 区...

【C# .Net GC】垃圾回收算法

GC算法有哪些:
1、标记-清除算法2、压缩算法3、分代清除算法
标记-清除算法
标记不可达对象,然后将其清除。
标记对象的工作有两种模式:

同步 :标记工作开始之处,就暂停所有线程,开始标记工作。在CLR启动GC之前,除了触发垃圾回收的线程以外的所有托管线程均会挂起。目的是防止线程在clr检查期间访问对象并修改其状态。
并发 :起一个低优先级的线程执行标记工作,直到找到有为0的对象,再暂停所有线程,进行垃圾回收工作 在 .NET Core 中,服务器/工作站垃圾回收既可以是非并发也可以是后台执行。

 
垃圾回收算法
1、开始一次垃圾回收时候,GC会检查第一代(有过第一代)占用...

JVM垃圾回收常见算法

一. 引用计数法

原理
假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的计数器的值为0,就说明对象A没有引用了,可以被回收
优点
实现简单,而且效率较高
缺点
无法解决循环引用的问题

二. 标记清除法

原理
标记清除算法是将垃圾回收分为2个阶段,分别是标记和清除
标记:从根节点开始标识引用的对象
清除:未被标识引用的对象就是垃圾对象,可以被清理

优点
标记清除算法解决了引用计数算法中的循环引用的问题,没有从root节点引用的对象都会被回收

缺点
效率较低,标记和清除两个动作都需要遍历所有的对象,并且在...

JVMGC机制三种底层基础算法思路

Mark-Sweep(标记清除)
顾名思义,对垃圾进行标记然后删除。但是由于删除垃圾的原位置无法再添加新数据,会产生碎片化的问题。
Mark-Compact(标记压缩)
顾名思义,是MS算法的优化,在标记并删除垃圾的同时对有用数据重新规划占用的内存空间,使其聚集在内存最前面,规整地利用好空间,进行了数据空间的压缩。
但效率比Copying算法低。
Copying(复制)
顾名思义,使用内存时仅限使用整体内存空间的一半,当进行垃圾清扫时,将有用数据移至未使用的另一半空间中,再将原来存放数据的空间清空。
缺点是浪费空间。优点是快。

...

性能测试连载 (21)-jvm 内存空间与 gc 机制

https://pan.baidu.com/s/1df1HDkFzChYNAbsSazizpw 提取码:hhn7jmeter 全系列文档资料
https://pan.baidu.com/s/1rD3H9EGbu0u11E8ofpAl3A 提取码:8q65性能测试初级到高级系列资料
jvm 内存空间分析
 

 

JVM 内存包括区域Heap(堆区)  New Generation(年轻代)  Eden 伊甸园  Survivor From  Survivor To  Old Generation(老年代)方法区  Permanent Genera...

Golang-垃圾回收原理解析

go 垃圾回收

本文基于整个go的gc发展,来研究其gc的演变过程,不单针对某个版本的gc,因为go的gc一直在演变

一.GO GC的发展历史

go v1.1 : 标记清除法,整个过程都需要STW
go v1.3 : 标记清除法,标记过程仍然需要STW,但是清除过程并行化,gc pause约为几百ms
go v1.5 : 引入插入写屏障技术的三色标记法,仅在堆空间启动插入写屏障,全部扫描后需要STW重新扫描栈空间,gc pause耗时降到10ms以下
go v1.8 : 引入混合写屏障技术的三色标记法,仅在堆空间启动混合写屏障,不需要在GC 结束后对栈空间重新扫描,gc pause时间...

文章标题:GC之标记压缩清除算法
文章链接:https://www.dianjilingqu.com/51428.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>