美文网首页
GC的常用算法简述

GC的常用算法简述

作者: andywangzhen | 来源:发表于2021-04-13 22:16 被阅读0次

前言

最近被问到常用语言的GC原理,由于之前没有这么深入的探究,趁此机会做一个简单的总结。

至于为啥要了解GC,是因为了解了GC原理,你就会知道:

1. GC触发条件有两个,一个是内存不够了,一个是到时间了。

2. GC的过程是会损耗性能的,如何合理利用GC和优化内存呢?留个问题给你。

GC算法

引用计数法

顾名思义,给每一个内存块佩戴一个计数器,表示对象引用次数。当次数减为0即可被GC

标记-清除法

每次GC时,触发堆内存的遍历,把被引用内存做上标记,GC仅清除无标记的内存

缺点:GC时会STW。

复制算法

由于GC后会产生大量的内存碎片,因此GC是创建一块新的内存区域,将被引用内存块放入新内存区域,清除旧的内存区域,并使用新内存区域替代旧内存区域

缺点:内存复制时会占用更大内存空间。

标记-整理法

标记-清除法和复制算法的融合版本,简单讲就是在标记清除后,将剩余内存做一个整理。优点是不占用新的内存,缺点和标记-清除法一样。

分代收集算法

将内存分为新生代和老年代,GC仅清除老年代。

Erlang与Go的GC算法总结

Erlang的内存分为进程内自有内存和进程间共享内存。自有内存采用分代收集算法;共享内存采用引用计数算法。

Go的GC是标记-清除法的升级版本——三色标记法。将长时间的STW替换为短暂的STW。三色标记法标记内存时和用户行为并行运算。

其中各算法的详细原理,就不一一赘述了,相关技术文章很多。建议做简单了解,不必深究,当遇到问题时,可再找回来作为排查和解决问题的一个思路。

相关文章

  • GC的常用算法简述

    前言 最近被问到常用语言的GC原理,由于之前没有这么深入的探究,趁此机会做一个简单的总结。 至于为啥要了解GC,是...

  • GC常用算法及常见分代:Minor GC、Major GC和Fu

    GC常用算法及常见分代:Minor GC、Major GC和Full GC [TOC] GC的概念在20世纪60年...

  • gc常用算法

    标记清除 标记清除主要分为两步 标记,标记需要清除的对象 清除,在内存中清除这些对象 优点 速度快 清理之后存活对...

  • 【JVM】垃圾回收机制(1)--如何判定对象可以回收

    一 垃圾回收机制概述 也没有规定GC如何工作。不过常用的jvm都有GC,而且大多数GC都使用类似的算法管理内存和执...

  • jvm 调优 和gc 算法

    jvm 常用命令 : jmap jstat jinfo jps gc 算法 串行垃圾回收器(Serial ...

  • java常用GC算法

    (1).复制收集算法 针对Young区,依次扫描这个区的所有可达对象(如何确定可达对象,请参考前一节),扫描...

  • Lua GC

    一、GC的原理及其算法设计 不同的语言,对GC算法的设计不同,常见的GC算法是引用计数和Mark-Sweep算法,...

  • chapter-4 GC算法与种类

    GC 算法与种类 ■ GC的概念■ GC算法• 引用计数法• 标记清除• 标记压缩• 复制算法■可触及性■ Sto...

  • 关于GC之二-常用GC算法

    回收 回收是个比较大的话题,有各种各样的算法,针对不同区域,也有不同的算法选择。 常见的GC算法 标记清除(Mar...

  • JVM-垃圾、垃圾回收算法(2)

    GC常用算法 1. 标记清除(Mark-Sweep) 算法相对简单 在存活对象较多的情况,下效率较高。 两次扫描,...

网友评论

      本文标题:GC的常用算法简述

      本文链接:https://www.haomeiwen.com/subject/rnhhlltx.html