Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java虚拟机垃圾回收(二) 垃圾回收算法>了解到Java虚拟机垃圾回收的几种常见算法. 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial.ParNew.Parallel Scavenge.Serial Old.Parallel Old.CMS.G1,先介绍一些垃圾收集的相关概念,再介绍它们的主…
1.垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法.火车算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器. 1-1.垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: (A).图中展示了7种不同分代的收集器: Serial.ParNew.Parallel Scavenge.Serial Old.Parallel Old.CMS.G1: (B).而它…
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<Java虚拟机垃圾回收(一) 基础>中了解到如何判断对象是存活还是已经死亡?在<Java虚拟机垃圾回收(二) 垃圾回收算法>了解到Java虚拟机垃圾回收的几种常见算法,在<Java虚拟机垃圾回收(三) 7种垃圾收集器>了解到几种收集器的特点和应用等. 下面来了解总结前面的一些内容:…
1.标记-清除算法 标记-清除(Mark-Sweep)算法是一种基础的收集算法. 1.算法思路 "标记-清除"算法,分为两个阶段: (A).标记 首先标记出所有需要回收的对象: 标记过程如<Java虚拟机垃圾回收(一) 基础>"2-4.判断对象生存还是死亡"中所述--分为两个标记过程(详细请参考前文): (1).第一次标记 在可达性分析后发现对象到GC Roots没有任何引用链相连时,被第一次标记: 并且进行一次筛选:此对象是否必要执行finalize(…
一.标记-清除(Mark-Sweep)算法 标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想. 标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象. 具体过程如下图所示: 优点:简单直观容易实现和理解 缺点:①效率问题:标记和清除两个过程的效率都不高. ②空间问题:标记清除之后会产生大量的不连续的内存碎片. 空间碎片太多可能会导致以后再在程序运行过程中需要分配较大对象时,无法找到足够的连续的内存碎片而不得不提前出发另一次的垃圾收集动作. 二…
1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃圾收集技术,可以实现垃圾回收的一个基本要求是语言是类型安全的,现在使用的包括Java.Perl.ML等. 1-1.为什么需要了解垃圾回收 目前内存的动态分配与内存回收技术已经相当成熟,但为什么还需要去了解内存分配与GC呢? 1.当需要排查各种内存溢出.内存泄漏问题时: 2.当垃圾收集成为系统达到更高…
承接上文 (完结撒花1-52系列)[JVM技术指南]「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"[上部] 并行收集器 并行收集器(也称为吞吐量收集器)是类似于串行收集器的分代收集器. 串行和并行收集器之间的主要区别是,并行收集器有多个线程,用于加速垃圾回收. 通过命令行选项 -XX:+UseParallelGC 启用并行收集器. 默认情况下,使用此选项,次要(minor)和主要(Major GC)都将并行运行,以进一步减少垃圾回收开销. 并行垃圾收集器线程数 可…
前言 前一篇文章介绍了内存的垃圾收集算法,现在介绍下内存回收的具体实现--垃圾收集器. 由于Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商,不同版本的虚拟机所提供的垃圾收集器都会有很大的差别. 这里只做几个收集器的介绍,并非说明哪个最好.在实际场景中,针对不同的应用,会有不同的选择和组合使用的情况. 每种类型都有自己的优势与劣势.重要的是,我们编程的时候可以通过JVM选择垃圾回收器类型.我们通过向JVM传递参数进行选择.每种类型在很大程度上有所不同并且可以为我们提供完…
上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢? 没错,就是本篇博客介绍的内容——垃圾收集器. 1.垃圾收集器种类 事实上Java虚拟机规范对垃圾收集器应该如何实现,并没有任何的规定,所以不同的厂商.不同版本的虚拟机所提供的垃圾收集器都会有所不同,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器. 下图是基于 Sun…
十一.垃圾回收之老年代垃圾收集器 1.Serial Old收集器(标记整理算法-单线程-Client模式下) 2.Paraller Old收集器(标记整理算法-多线程-) 3.CMS收集器(标记清除算法) 4.G1收集器(新生代,老年代都可以用)…