记一次有关于Jvm垃圾收集器的整理

记一次有关于Jvm垃圾收集器的整理

垃圾回收器

算法:

引用计数法

复制算法

标记清楚

标记整理

垃圾回收的方式

1、Serial:串行回收

2、Parallel:并行回收

3、CMS:并发标记清除

4、G1:G1

截止到java10               之后有ZGC

Seial:串行垃圾回收,单线程垃圾回收的时候会停掉用户的线程进行垃圾回收不适合服务器的环境

Parallel:并行垃圾回收多个垃圾收集线程并行工作也会停掉垃圾回收的时候用户的线程

CMS:用户线程和垃圾回收线程同时执行(不一定是并行,可以是交替执行)不需要暂停用户线程

G1:将堆内存分割成为不同的区域然后对各个区域并发的进行垃圾回收

垃圾收集器(查看默认的垃圾收集器 java -XX:+PrintCommandLineFlags -----> -XX:+UseParallelGC)

7种垃圾收集器(新生代的收集器和老年代的收集器可以互相的激活组合搭配使用及只配置一方就可以默认的选择使用另一方)

新生代

1、Serial收集器:简单高效的最古老的收集器

  -XX:+UseSerialGC   配置之后就会启用   新生代:Serial Copying  ------ 老年代:Serial CMS(Serial Old)     进行垃圾收集

2、ParNew:并行收集器新生代的收集器在垃圾收集的时候也会暂停应用其实就是serial的并行版本      新生代的默认收集器

  -XX:+UserParNewGC 开启后使用  ParNew+Serial CMS(Serial Old)的组合(不推荐组合)   他只会影响新生代不会印象老年代新生代使用Parallel new 并行进行垃圾回收

3、Parallel: 并行垃圾回收

  -XX:+UseParallelGC -XX:+UseParallelOldGC   开启后 新生代老年代都会采用并行垃圾回收     (jdk1.8)Parallel Scavenge + Parallel Compacting(Parallel Old)

  关注Parallel Scavenge可控的吞吐量,自适应的调节策略动态的调整参数提供最合适的停顿时间(jdk1.6之前之关注新生代的吞吐量使用Parallel Scavenge + Serial Old 的组合)

老年代

1、Parallel Old:并行垃圾回收

  -XX:+UseParallelOldGC

2、CMS: 标记清除 算法的实现,是一种获取最短回收收集停顿时间的收集器,并发是指于用户线程一起执行

  -XX:+ConcMarkSweepGC 开启之后会自动激活 -XX:+UserParNewGC 使        CMS + Serial Old(后备收集器备用) + ParNew 一起配合的使用

  工作的四部

    1、初始标记:只是标记一下GC Roots能直接关联的对象,速度很快但仍需要暂停所有的工作线程

    2、并发标记:和用户线程一起工作进行GC Roots的跟踪过程,和用户线程一起工作不需要暂停,主要标记过程,标记全部对象

    3、重新标记:修正在并发标记期间,因用户线程继续运行,而导致标记产生变动的那一部分对象的标记记录,仍需要暂停所有工作的相乘

    由于并发标记时,用户线程依然运行,因此在正式清理前。在做修正。

    4、并发清除:和用户线程一起,清除GC Roots 不可达的对象,和用户线程一起工作,不需要暂停工作线程,基于标记的结构直接清理对象

   由于耗时最长的并发标记和并发清除过程中,垃圾收集线程,可以和用户线程一起并发工作,所以总体来看CMS收集器的没存回收是和用户线程一起并发执行的

  优点:并发收集停顿低       缺点:cpu压力大,标记清除会产生碎片,cms必须要在堆内存用尽之前完成回收

3、Serial Old: Serial 的老年代版本 单线程

  -XX:+UseSerialOldGC

不同厂商不同版本的差别很大      这些垃圾收集器为HotSpot中的收集器

新生代:Serial Copying     Parallel Scavenge      ParNew(Parallel New Gen)    G1

老年代:Serial CMS(Serial Old)    Parallel Compacting(Parallel old)    CMS      G1

注:Serial Old 已经不推荐使用了

原文地址:https://www.cnblogs.com/yangenyu/p/11564415.html

时间: 2024-11-05 14:57:48

记一次有关于Jvm垃圾收集器的整理的相关文章

第六章 JVM垃圾收集器(2)

上一章记录了几种常见的垃圾收集器,见<第五章 JVM垃圾收集器(1)> 1.G1 说明: 从上图来看,G1与CMS相比,仅在最后的"筛选回收"部分不同(CMS是并发清除),实际上G1回收器的整个堆内存的划分都与其他收集器不同. CMS需要配合ParNew,G1可单独回收整个空间 原理: G1收集器将整个堆划分为多个大小相等的Region G1跟踪各个region里面的垃圾堆积的价值(回收后所获得的空间大小以及回收所需时间长短的经验值),在后台维护一张优先列表,每次根据允许的

JVM垃圾收集器

1.垃圾回收器类型 1.串行垃圾回收器(Serial Garbage Collector) 2. 并行垃圾回收器(Parallel Garbage Collector) 3. 并发标记扫描垃圾回收器(CMS Garbage Collector) 4. G1垃圾回收器(G1 Garbage Collector) 1.串行垃圾回收器(Serial Garbage Collector) 串行垃圾回收器通过持有应用程序所有的线程进行工作.它为单线程环境设计,只使用一个单独的线程进行垃圾的回收,通过冻结所

【006】【JVM——垃圾收集器总结】

 JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论,垃圾收集据是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现没有规定,不同的厂商.不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,一般都会提供参数供用户根据自己的所用特点和要求组合出各个年代所使用的收集器.下面是基于JDK 1.7 Update 14 之后的HotSpot 虚拟机垃圾收集器.如果两个收集器之间有连线就说明它们可以搭配使用.直到现在还没有最好的收集器,更加设有万能的收集器,只是对具体应用

JVM垃圾收集器(1)

此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- 复制 Parallel Scavenge(并行回收GC)-- 复制 Serial Old(MSC)(串行GC)-- 标记-整理 CMS(并发GC)-- 标记-清除 Parallel Old(并行GC)--标记-整理

JVM垃圾收集器-Parallel Scavenge收集器

今天我给大家讲讲JVM垃圾收集器-Parallel Scavenge收集器 Parallel Scavenge收集器 ? ? ? ?Parallel Scavenge收集器也是一个新生代收集器,它也是使用复制算法的收集器,又是并行的多线程收集器,看上去和ParNew都一样,那它有什么特别之处呢? ? ? ??Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标是

5种JVM垃圾收集器特点和8种JVM内存溢出原因

先来看看5种JVM垃圾收集器特点 一.常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Serial ParNew Parallel Scavenge 老年代收集器: Serial Old CMS Parallel Old 堆内存垃圾收集器:G1 每种垃圾收集器之间有连线,表示他们可以搭配使用. 二.新生代垃圾收集器 (1)Serial 收集器 Serial 是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集.Serial 进行垃圾收集时,不仅只用一条线程执行垃圾收集工作,

jvm 垃圾收集器分析

jvm 垃圾收集器分析 jvm 垃圾收集器分析   新生代收集器 老年代收集器 优点 缺点 serial收集器 V   1.jdk1.3开始的单线程收集器 2.client模式下很好的选择. 3.复制算法 1.单线程,收集时需要暂停所有线程(stop the world) parNew收集器 V   1.serial的多线程版 2.server模式下 3.可与CMS收集器工作 4.线程数与cpu数相同 1.单CPU下不会比serial收集器性能好   Parallel Scavenge 收集器

深入了解JVM垃圾收集器

程序计数器.JVM栈.本地方法栈这三个内存区域和线程是一一对应的,并且每一个线程的这三个区域相互独立互不干扰.他们都随着线程的产生而产生,线程的灭亡而灭亡.JVM栈和本地方法栈中的栈帧都随着方法的加载而入栈,随着方法的结束而出栈. 栈帧的大小是在程序员写类的时候就确定下来的.因此这三种区域的内存大小都具备确定性,当方法结束或线程结束后,这些内存空间就会自动被回收掉,所以JVM无需考虑这些区域的内存回收问题. 堆内存和方法区的内存分配和回收就不一样了,因为一个接口中的多个实现类所需要的内存可能不一

【JVM】JVM垃圾收集器、垃圾收集算法、无用对象

Java 常见的垃圾收集器有哪些 实际上,垃圾收集器(GC,Garbage Collector)是和具体 JVM 实现紧密相关的,不同厂商(IBM.Oracle),不同版本的JVM,提供的选择也不同.接下来,我来谈谈最主流的 Oracle JDK. Serial GC 它是最古老的垃圾收集器,"Serial"体现在其收集工作是单线程的,并且在进 行垃圾收集过程中,会进入臭名昭著的"Stop-The-World"状态.当然,其单线程设计也意味着精简的 GC 实现,无需