GC Garbage Collectors
本质
一、算法
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相关推荐
- java不同垃圾回收器_细述 Java垃圾回收机制→Types of Java Garbage Collectors
本文非原创,翻译自Types of Java Garbage Collectors 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的是Java程序员不需要手动写垃 ...
- GC garbage collection 垃圾回收机制
GC garbage collection 垃圾回收机制 1 找到内存空间中的垃圾. 2.回收垃圾,让程序员可以再次利用. 满足这样的程序就是GC GC的评价性能的标准: 1吞吐量2 最大暂停时 ...
- JAVA GC(Garbage Collection)及OOM那些事
2019独角兽企业重金招聘Python工程师标准>>> JAVA运行时内存区域 程序计数器 一块很小的内存空间 当前线程所执行的字节码的行号指示器 当前线程私有 不会出现OutOfM ...
- FTL——垃圾回收GC (Garbage Collection)
本文章内容来源<深入浅出SSD 固态存储核心技术 原理与实战.pdf> 简介 由于闪存需要先擦除后才能写入,由于闪存块不能覆盖写,当写人一笔新的数据时,不能直接在老地方更改(闪存不允许在一 ...
- 细述 Java垃圾回收机制→Types of Java Garbage Collectors
本文将会介绍各种不同类型的Java垃圾回收器.垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程. Java有四种类型的垃圾回收器, Serial Garbage Collect ...
- GC ------ Garbage Collection
之前一直没搞懂这个GC,今天终于有点理解了.所谓GC,大概可以理解为一个过程. GC是一个内部程序,由以下步骤组成: 1.将所需数据从活动扇区(填充扇区)复制到其他扇区(新扇区),执行扇区切换,即新扇 ...
- gc java root_深入理解Java中的Garbage Collection
前提 最近由于系统业务量比较大,从生产的GC日志(结合Pinpoint)来看,需要对部分系统进行GC调优.但是鉴于以往不是专门做这一块,但是一直都有零散的积累,这里做一个相对全面的总结.本文只针对Ho ...
- Java Garbage Collection Basics--转载
原文地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html Overview Purpose ...
- JVM调优系列:(四)GC垃圾回收
跟踪收集算法: 复制(copying): 将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间 ...
最新文章
- Spring Boot实战:过滤器、拦截器与切片
- 构建之法 第6~7章读后感和对Scrum的理解
- python入门指南许半仙txt-影帝的脑子坏了 第23章
- eyoucms的添加内容发布
- boost::spirit模块实现一个雇员结构的解析器的测试程序
- 产品经理在早期如何快速学习?
- 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
- OpenShift 4 - 为Gogs构建一个Operator
- 全球开源正当时,第 19 届中日韩三国 IT 局长 OSS 会议暨东北亚开源软件推进论坛圆满落幕
- 为什么打不过滴滴的Uber也要做无人驾驶?
- java settings文件夹_JAVA工具例大全--Setting文件读取配置参数
- 页面里引入电子表字体
- octobercms mysql_OctoberCMS插件形成数据库关系(OctoberCMS plugin form database relationships)...
- win10语音助手服务器,深入了解“小娜”Win10语音助手详解
- matlab加速度转化为位移,加速度转换成位移的matlab代码及说明
- 微信 Windows 版本干了件大事!
- 包装类型与引用类型的使用场景
- Excel シートインポート、Excel シートエクスポート
- CG系统提交Java程序_Cg使用说明 第一章 介绍
- linux分区出现hfs,如何在Ubuntu中将HFS分区挂载为读/写?