Java虚拟机七种垃圾收集器比较

1、Serial收集器曾经是虚拟机新生代收集的唯一选择,是一个单线程的收集器,在进行收集垃圾时,必须stop the world,它是虚拟机运行在Client模式下的默认新生代收集器。

2、Serial Old是Serial收集器的老年代版本,同样是单线程收集器,使用标记整理算法。

3、ParNew收集器是Serial收集器的多线程版本,许多运行在Server模式下的虚拟机中首选的新生代收集器,除Serial外,只有它能与CMS收集器配合工作。

4、Parallel Scavenge收集器也是新生代收集器,使用复制算法又是并行的多线程收集器,它的目标是达到一个可控制的运行用户代码跟(运行用户代码+垃圾收集时间)的百分比值。

5、Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和标记整理算法。

6、Concurrent Mark Sweep 收集器是一种以获得最短回收停顿时间为目标的收集器,基于标记清除算法。

过程如下:初始标记,并发标记,重新标记,并发清除,优点是并发收集,低停顿,缺点是对CPU资源非常敏感,无法处理浮动垃圾,收集结束会产生大量空间碎片。

7、G1收集器是基于标记整理算法实现的,不会产生空间碎片,可以精确地控制停顿,将堆划分为多个大小固定的独立区域,并跟踪这些区域的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域(Garbage First)。

版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/lingzhm

时间: 2024-08-11 05:52:05

Java虚拟机七种垃圾收集器比较的相关文章

聊聊JAVA虚拟机中的垃圾收集器

前言 JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上.了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性.这篇文章通过分析JAVA虚拟机内存模型,介绍垃圾收集器常用算法和收集器类别,使得垃圾收集器的配置和使用变得不再遥不可及. JAVA虚拟机内存模型 JAVA虚拟机内存可以划分为:虚拟机栈.本地方法栈.JAVA堆内存.方法区(包含运行时常量池).程序计数器.直接内存. 虚拟机栈 虚拟机栈是线程私有的,生命周期跟线程相同.也就是说一个线

JVM常见的七种垃圾收集器的简单比较

1.Serial收集器曾经是虚拟机新生代收集的唯一选择,是一个单线程的收集器,在进行收集垃圾时,必须stop the world,它是虚拟机运行在Client模式下的默认新生代收集器. 2.Serial Old是Serial收集器的老年代版本,同样是单线程收集器,使用标记整理算法. 3.ParNew收集器是Serial收集器的多线程版本,许多运行在Server模式下的虚拟机中首选的新生代收集器,除Serial外,只有它能与CMS收集器配合工作. 4.Parallel Scavenge收集器也是新

JVM(HotSpot)7种垃圾收集器

7种垃圾收集器作用于不同的分代,如果两个收集器之间存在连续,就说明他们可以搭配使用. 从JDK1.3到现在,从Serial收集器->Parallel收集器->CMS->G1,用户线程停顿时间不断缩短,但仍然无法完全消除. 1.Serial收集器(串行收集器) Serial收集器是最基本.发展历史最悠久的收集器,曾是(JDK1.3.1之前)虚拟机新生代收集的唯一选择. Serial收集器是一个单线程的收集器.“单线程”的意义不仅仅是它只会使用一个CPU或一条收集器线程去完成垃圾收集工作,更

Rust语言——无虚拟机、无垃圾收集器、无运行时、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争

2006年,编程语言工程师Graydon Hoare利用业余时间启动了Rust语言项目.该项目充分借鉴了C/C++/Java/Python等语言的经验,试图在保持良好性能的同时,克服以往编程语言所存在的问题.其最大的特点在于保持较高的运行效率.深入的底层控制和广泛应用范围的同时,解决了传统C语言和C++语言中的内存安全问题.2009年,Mozilla接手Rust项目,创建了以Graydon为首的专业全职开发团队,并且开放了该项目的源代码.2012年1月,第一个面向公众的预览版本--v0.1 发布

HotSpot的7种垃圾收集器组合

HotSpot共有7种垃圾收集器,3个新生代垃圾收集器,3个老年代垃圾收集器,以及G1,一共构成7种可供选择的垃圾收集器组合. 新生代与老年代垃圾收集器之间形成6种组合,每个新生代垃圾收集器都对应2种组合. Serial Old(MSC)可以与所有新生代收集器进行组合,共3种组合JVM仅指定新生代垃圾收集器的情况下,默认老年代采用Serial Old垃圾收集器(带压缩):-XX:+UseSerialGCSerial (DefNew) + Serial Old(Serial Mark Sweep

Java虚拟机9:垃圾收集(GC)-4(垃圾收集器)

1.前言 垃圾收集器是前一章垃圾收集算法理论知识的具体实现了,不同虚拟机所提供的垃圾收集器可能会有很大差别,另外我们必须提前说明一个道理:没有最好的垃圾收集器,更加没有万能的收集器,只能选择对具体应用最合适的收集器.这也是HotSpot为什么要实现这么多收集器的原因,下面我们以HotSpot为例讲解.在写之前,先介绍几个概念. 1.1.并行和并发的区别 这个区别之前在你专门的一节介绍过,这里再重点提一下:这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,可以这么理解这两个名词: 1

(七)垃圾收集器

一.垃圾收集器之Serial serial收集器 serial收集器是最基本发展最悠久的收集器.serial收集器是一个单线程的收集器,但他的"单线程"的意义并不仅仅只会使用一个cpu或者一条线程去完成垃圾收集工作,更重要的是在他进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束. serial/serial Old收集器运行示意图 serial的优点:简单有效(与其他收集器的单线程比),对于限定单个cpu的环境来说,serial收集器由于没有线程交互的开销,专心做垃圾收集自然可

两个变量交换的四种方法(Java) 七种方法(JS)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public static void main(String[]args) 5 { 6 int x =5,y=10; //定义两个变量 7 8 int temp = x; //定义第三临时变量temp并提取x值 9 x = y; //把y的值赋给x 10 y = temp; //然后把临时变量temp值赋给y

Java虚拟机6:垃圾收集(GC)-2(并行和并发的区别)

1.并发编程下 这两个名词都是并发编程中的概念,在并发编程的模型下的定义: 并发:是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序. 并行:是多个或同时一个cpu上,每个cpu运行一个程序. 打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭.并行,就是2个人喂2个孩子,两个孩子也同时在吃饭. 并行和并发并不是两个互斥的概念. 2.垃圾收集器下 在谈论垃圾收集器的上下文语境中,可以这么理解这两个名词: