细说JVM系列:自动内存管理内存回收:垃圾收集实践-垃圾收集器
自动内存管理内存回收:垃圾收集实践-垃圾收集器在java虚拟机中,垃圾回收器可不仅仅只有一种,什么情况下要使用哪一种,对性能又有什么样的影响,这都是我们必须要了解的,这里会具体介绍一下垃圾收集器的类型,以及他们的特点。一.串行回收器串行回收器是指使用单线程进行垃圾回收的回收器。每当回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行
自动内存管理内存回收:垃圾收集实践-垃圾收集器
在java虚拟机中,垃圾回收器可不仅仅只有一种,什么情况下要使用哪一种,对性能又有什么样的影响,这都是我们必须要了解的,这里会具体介绍一下垃圾收集器的类型,以及他们的特点。
一.串行回收器
串行回收器是指使用单线程进行垃圾回收的回收器。每当回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回收器可以在新生代和老生代使用,根据作用于不同的堆空间,分为新生代串行回收器和老生代串行回收器。
特点:
1.它仅仅使用单线程进行垃圾回收
2.它是独占式的垃圾回收。当串行收集器进行垃圾回收时,java应用程序中的线程都需要暂停,等待垃圾回收的完成。这种现象称之为stop-the-world,它将造成非常糟糕的用户体验,在实时性要求较高的应用场景中,这种现象往往是不能被接受的。
3.虽然如此,但是串行回收器是久经考验的极为高效的回收器。
1.新生代串行回收器
使用复制算法
2.老生代串行回收器
使用标记-压缩算法
二.并行回收器
并行回收器在串行回收器的基础上做了改进,它使用多个线程同时进行垃圾回收。对于并行能力强的计算机,可以有效缩短垃圾回收所需的实际时间。
1.新生代ParNew回收器
ParNew回收器是一个工作在新生代的垃圾收集器。它只是简单的将串行回收器多线程化,它的回收策略、算法以及参数和新生代串行回收器一样使用复制算法。ParNew回收器也是独占式的回收器,在收集过程中,应用程序会全部暂停。但由于并行回收器使用多线程进行垃圾回收,因此,在并发能力比较强的cpu上,它产生的停顿时间要短于串行回收器。
2.新生代ParallelGC回收器
它的主要特点和ParNew回收器一样,多线程、独占式、复制算法。但是他有一个与ParNew回收器不同的重要特点:它非常关注系统的吞吐量。
3.老生代ParallelOldGC回收器
多线程并发
关注吞吐量
使用标记压缩算法,在jdk1.6才能使用
三.CMS回收器
CMS主要关注于系统停顿时间
多线程
使用标记删除算法
非独占式
四.G1回收器
G1回收器是jdk1.7中正式使用的全新的垃圾回收器。特点:
使用分区算法
并行性
并发性
分代GC
空间整理
可预见性
G1收集器将堆进行分区,划分一个一个的区域,每次收集的时候,只收集其中几个区域,以此来控制垃圾回收产生的以此停顿时间。
G1的收集过程可能有4个阶段:
新生代GC
并发标记周期
混合收集
如果需要,可能会进行full GC
更多推荐
所有评论(0)