Java垃圾回收之老年代垃圾收集器
1、Serial Old 收集器(-XX: +UseSerialOldGC, 标记-整理算法)
1.1 单线程收集,进行垃圾收集时,必须暂停所有工作线程
1.2 简单高效,Client模式下默认的老年代收集器
2、Parallel Od收集器(-XX: +UseParallelOldGC ,标记-整理)
2.1 JDK6 之后才有这个收集器,多线程,吞吐量优先,如果注重CPU资源和吞吐量的场合,可以使用这个组合 Parallel Scavenge + Parallel Old 收集器
3、CMS收集器(这个收集器,占据了老年代收集器的半壁江山。-XX:+ UseConcMarkSweepGC ,标记-清除算法,有碎片产生)
优点:几乎可以和用户线程做到同时工作,本质还是要STOP-THE WORLD,只是停顿时间短
如果在老年代中存活更多存活率高的对象,使用CMD收集器更适合
收集流程:(一边掉垃圾一边打扫)
初始标记:stop-the-world,从垃圾回收的根对象开始,只是扫描和根对象有关联的对象并做标记。虽然暂停了所有的线程工作,但是停顿时间很短。
并发标记:并发追随标记,程序不会停顿
并发预清理:查找执行并发标记阶段从年轻代晋升到老年代的对象
重新标记:暂停虚拟机,扫描CMS堆中的剩余对象
并发清理:清理垃圾对象,程序不会停顿
并发重置:重置CMS收集器的数据结构
4、G1收集器(-XX:+UseG1GC , 复制+标记-整理算法)
Garbage First 收集器的特点
4.1 并发和并行
4.2 分代收集
4.3 空间整合
4.4 可预测的停顿
说明:这个收集器的内存布局与其他收集器有很大区别
将整个JAVA堆内存划分成多个大小相等的Region
年轻代和老年代不再物理隔离
额外知识:JDK11 有 Epsilon GC 和 ZGC (研发阶段)
问题:为什么年轻代中的Parallel Scavenge收集器不能和老年代中的CMS收集器一起工作呢?
---》因为Parallel Scavenge收集器(G1)都没有使用传统的GC收集器代码框架,都是另外独立开发的。
而Serial,parNew,CMS都有使用了部分相同的收集器代码框架,所有他们三个是兼容的。
(CMS是hotsport在jdk5才出来的真正意义上是并行收集器,第一次让垃圾收集线程和用户线程一起工作。)
Java垃圾回收之老年代垃圾收集器的更多相关文章
- JVM(十一),垃圾回收之老年代垃圾收集器
十一.垃圾回收之老年代垃圾收集器 1.Serial Old收集器(标记整理算法-单线程-Client模式下) 2.Paraller Old收集器(标记整理算法-多线程-) 3.CMS收集器(标记清除算 ...
- [JVM-3]Java垃圾回收(GC)机制和垃圾收集器选择
哪些内存需要回收? 1.引用计数法 这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1:当引用失效时,计数器值-1.任何时刻计数值为0的对象就是不可能再被使用的.这 ...
- Java虚拟机垃圾回收(三) 7种垃圾收集器
Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java ...
- Java虚拟机垃圾回收(三): 7种垃圾收集器(转载)
1.垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法.火车算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚 ...
- JVM(三) 垃圾回收时间点和垃圾收集器
收集器组合章节来自第一篇参考文章,非原创,作者总结地非常好! 分代收集相关概念来自参考文章第二篇,非原创 第二篇参考资料的文章质量很高,推荐阅读! 分代收集(Ge ...
- 看图说说JVM老年代垃圾收集器
注:G1垃圾收集器是目前最前沿的GC收集器,未来将取代CMS垃圾收集器,可以作为整个Heap的收集器使用,不限于老年代!!!
- GC垃圾回收 | 深入理解G1垃圾收集器和GC日志
来源:并发编程网链接:http://ifeve.com/深入理解G1垃圾收集器/ G1 GC是Jdk7的新特性之一.Jdk7+版本都可以自主配置G1作为JVM GC选项:作为JVM GC算法的一次重大 ...
- java垃圾回收算法和垃圾收集器
垃圾收集算法.垃圾回收算法.java垃圾收集器 目录1. 垃圾收集算法1)引用计数法2)根搜索法2. 垃圾回收算法1)复制算法2)标记-清除算法3)标记-整理算法4)分代收集算法3. java垃圾收集 ...
- Java虚拟机5:Java垃圾回收(GC)机制详解
哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象.那么如何找到这些对象? 1.引用计数法 这个算法的实现是,给对象中添 ...
随机推荐
- CodeForces 712B Memory and Trident (水题,暴力)
题意:给定一个序列表示飞机要向哪个方向飞一个单位,让你改最少的方向,使得回到原点. 析:一个很简单的题,把最后的位置记录一下,然后要改的就是横坐标和纵坐标绝对值之和的一半. 代码如下: #pragma ...
- HDU6031:Innumerable Ancestors(二分+倍增数组)
传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2* ...
- hdoj3665【简单DFS】
题意: 略. 思路: n就10而已,没有环,搜一下就好了.. #include <bits/stdc++.h> using namespace std; typedef long long ...
- LeetCode.896-单调数组(Monotonic Array)
这是悦乐书的第345次更新,第369篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第210题(顺位题号是896).如果数组单调递增或单调递减,则数组是单调的.如果对于所有 ...
- 组合数学1.4&3.10 By cellur925
本文引用于清华大学出版社卢开澄.卢华明<组合数学第五版>. 今天我们稍微讨论下圆排列以及$n$对夫妻的问题. 1.4圆周排列 这个问题是:从$n$个人中取$r$个在圆周上,我们用$Q(n, ...
- hdu3938 Portal 离线+并查集
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int ...
- 进程与线程(2)- python实现多进程
python 实现多进程 参考链接: https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/ python中实现多进程 ...
- Codeforces Round #418 (Div. 2) B
Description Sengoku still remembers the mysterious "colourful meteoroids" she discovered w ...
- LCA UESTC 92 Journey
题目传送门 题意:先给一棵树,然后有一条额外的边,问u走到v从现在最短的路走和原来不加边走的路节省了多少距离 分析:首先跑不加边的树的LCA,这样能求出任意两点的距离,那么现在x和y多连了一条边,如果 ...
- 转:从《The C Programming Language》中学到的那些编程风格和设计思想
这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html 读书不是目的,关键在于思考. 很早就在水木上看到有人推荐& ...