本质

一、算法


1、哪些是垃圾?

引用计数法:reference count

Python中使用了。

个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。

漏洞:循环引用

根可达性算法:Root Searching

如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。

例:main函数中的成员变量,顺着引用开始找,找不到的都是垃圾

2、什么时候清除?

3、用什么方式清除?

标记清除 Mark-Sweep:

缺陷:内存碎片化,泄漏

拷贝 Copying:

漏洞:浪费内存

标记整理 Mark-Compact:

漏洞:性能低

分代算法:

堆内存逻辑分区

二、垃圾收集器


三种算法都有毛病,三种的综合应用,诞生了各种各样的垃圾回收器

MinGC YGC

MaGC FullGC

垃圾收集器随着内存大小的不断增长而演进

内存分代:

JDK1.8之前使用分代模型

新生代采用复制算法,老年代使用标记清除和标记整理算法。

Serial + Serial Old:

针对几兆-几十兆

STW:a stop-the-world,copying collector which uses a single GC thread

Serial单线程STW垃圾回收 年青代 老年代

Parallel Scavenge + Parallel Old:(ps+po):jdk1.8默认垃圾回收器

几十兆-上百兆1G

Parallel并行多线程

Concurrent GC:

GC线程和业务线程同时运行

初始标记(需要STW):只需要找到根root上的对象

并发标记:业务GC并行(一定会有标错)

重新标记(需要STW):清理上一步标错的

并发清理:清除上一步标错的

三色标记法算法:

ParNew+CMS:(1.5,1.6,1.7)

几十G

CMS方案:incremental Update的非常隐蔽的问题:并发标记,产生漏标

CMS的remark阶段,必须从头扫描一遍

内存不分代:

Epsilon:(jdk11诞生)

什么都不干,仅作记录,作用:1、开发JVM的人做debug用;2、内存超级大根本用不完可以使用

G1:(1.7诞生但不成熟,1.8可使用)

逻辑上分代,物理上不分代

G1的内存区域不是固定的E或者O

分区算法:部分回收(每个区大小为1-32,2的倍数)

一边清理一部分区域,一边占用一部分区域,特别大的对象放Humongous区域,也不够了开始FullGC

毛病:一次回收需要回收整个逻辑上的年青代(STW时间过长)

ZGC:zero paused GC(jdk11引入)

甲骨文官方支持

颜色算法:Colored Pointer+Load Barrier

分区更灵活(1M、2M、8M等),逻辑上不再分代,每100ms触发一次GC,每次找到特别满的区域进行清除

Shenandoash (jdk12引入):

开源领域贡献

GC Garbage Collectors相关推荐

  1. java不同垃圾回收器_细述 Java垃圾回收机制→Types of Java Garbage Collectors

    本文非原创,翻译自Types of Java Garbage Collectors 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的是Java程序员不需要手动写垃 ...

  2. GC garbage collection 垃圾回收机制

    GC  garbage collection   垃圾回收机制 1 找到内存空间中的垃圾. 2.回收垃圾,让程序员可以再次利用. 满足这样的程序就是GC GC的评价性能的标准: 1吞吐量2 最大暂停时 ...

  3. JAVA GC(Garbage Collection)及OOM那些事

    2019独角兽企业重金招聘Python工程师标准>>> JAVA运行时内存区域 程序计数器 一块很小的内存空间 当前线程所执行的字节码的行号指示器 当前线程私有 不会出现OutOfM ...

  4. FTL——垃圾回收GC (Garbage Collection)

    本文章内容来源<深入浅出SSD 固态存储核心技术 原理与实战.pdf> 简介 由于闪存需要先擦除后才能写入,由于闪存块不能覆盖写,当写人一笔新的数据时,不能直接在老地方更改(闪存不允许在一 ...

  5. 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    本文将会介绍各种不同类型的Java垃圾回收器.垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程. Java有四种类型的垃圾回收器, Serial Garbage Collect ...

  6. GC ------ Garbage Collection

    之前一直没搞懂这个GC,今天终于有点理解了.所谓GC,大概可以理解为一个过程. GC是一个内部程序,由以下步骤组成: 1.将所需数据从活动扇区(填充扇区)复制到其他扇区(新扇区),执行扇区切换,即新扇 ...

  7. gc java root_深入理解Java中的Garbage Collection

    前提 最近由于系统业务量比较大,从生产的GC日志(结合Pinpoint)来看,需要对部分系统进行GC调优.但是鉴于以往不是专门做这一块,但是一直都有零散的积累,这里做一个相对全面的总结.本文只针对Ho ...

  8. Java Garbage Collection Basics--转载

    原文地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html Overview Purpose ...

  9. JVM调优系列:(四)GC垃圾回收

    跟踪收集算法: 复制(copying): 将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间 ...

最新文章

  1. Spring Boot实战:过滤器、拦截器与切片
  2. 构建之法 第6~7章读后感和对Scrum的理解
  3. python入门指南许半仙txt-影帝的脑子坏了 第23章
  4. eyoucms的添加内容发布
  5. boost::spirit模块实现一个雇员结构的解析器的测试程序
  6. 产品经理在早期如何快速学习?
  7. 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
  8. OpenShift 4 - 为Gogs构建一个Operator
  9. 全球开源正当时,第 19 届中日韩三国 IT 局长 OSS 会议暨东北亚开源软件推进论坛圆满落幕
  10. 为什么打不过滴滴的Uber也要做无人驾驶?
  11. java settings文件夹_JAVA工具例大全--Setting文件读取配置参数
  12. 页面里引入电子表字体
  13. octobercms mysql_OctoberCMS插件形成数据库关系(OctoberCMS plugin form database relationships)...
  14. win10语音助手服务器,深入了解“小娜”Win10语音助手详解
  15. matlab加速度转化为位移,加速度转换成位移的matlab代码及说明
  16. 微信 Windows 版本干了件大事!
  17. 包装类型与引用类型的使用场景
  18. Excel シートインポート、Excel シートエクスポート
  19. CG系统提交Java程序_Cg使用说明 第一章 介绍
  20. linux分区出现hfs,如何在Ubuntu中将HFS分区挂载为读/写?

热门文章

  1. Oracle EBS 12.2.7系统克隆教程
  2. bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼
  3. python使用tkinter万年历
  4. iOS10 适配 ATS(app支持https通过App Store审核) 韩俊强的博客
  5. keystone的详细功能
  6. github上如何删除自己的仓库
  7. 认知智能三大技术体系之类脑模型简介
  8. 使用oc的block方法回调
  9. 为什么有了IP地址还要有MAC地址??
  10. 用户画像(Persona )简介