来自Oracle官方文档,对JVM GC知识整理的清晰易懂,查资料还是看官方的好!

1 GC步骤简述

步骤1:标记 (Marking)

根据对象引用关系,将未被任何对象引用的对象实例标记出来,如下图中的黄色。当堆中的所有对象都要被扫描一遍时(如Major GC),将会非常耗时。

步骤2:删除 (Sweeping)

Ø  普通删除:直接删除未被引用的对象,之后内存分配器(memory allocator)要持有指向空闲内存的指针,以便后续内存分配。

Ø  压缩删除:为了进一步提高性能并简化内存分配器的设计,可以在删除后将剩余的存活对象移动到一起。后面讲到的对Old Generation进行回收使用的就是这种方式。

注:Young Generation使用的是另一种拷贝删除回收,而不是这两种原地进行的回收。

2 GC中的堆

堆分为不同的代(Generation),Young Generation,包括eden,S0和S1,保存所有新建的对象。Old Generation保存多次GC后存活的对象,具体代数可以配置。而Permanent Generation保存class和method字节码,只在Major GC时回收。

注:印象里Perm Space的回收条件非常苛刻,类的所有实例都已不被引用,类的ClassLoader不被引用等条件,所以一般回收率非常低。

下面说一下在GC过程中这些Generation是怎样使用的:

Ø  首先,当eden分配满时会触发Minor GC,会与S0或S1中的一个(作为From Space)开始回收,将剩余对象拷贝到另一个(作为To Space),Minor GC也会导致应用程序的所有线程停顿(Stop the World)。

Ø  之后,每经过一次Minor GC后存活的对象的generation数都加1,逐渐老化(aging),达到一定值时会升级移动到tenured space。

Ø  最后,当tenured space达到一定使用率时,会触发Major GC,对整个堆(包括Perm)进行Stop the World式的回收。

3 观察GC过程

使用jstat命令就能亲自观察到上述的GC过程,用法为jstat -gcutil pid interval。如下图中的例子。

4 常用垃圾回收器

Ø  -XX:+UseSerialGC:串行回收,适应于对响应时间要求不高的应用,或JVM实例数远多于CPU数的环境。

Ø  -XX:+UseParallelGC -XX:+UseParallelOldGC:多线程回收Young,Old Generation。用于可以接受长时间停顿而换取高吞吐量的场景,如生成报表或执行慢数据库查询的批处理任务

注:因为吞吐量关注如何最大化应用在一段时间内完成的总任务量,通常是比较长的一段时间,所以能接受长停顿时间,通常不考虑响应速度的问题。

Ø  -XX:+UseConcMarkSweepGC:CMS尝试最小化停顿时间,所以一般不会执行压缩(有选项可以强制开启),如果碎片会导致问题,那就分配更大的堆。CMS一般用于要求低停顿时间的应用,例如桌面应用或web服务器应用

Ø  -XX:+UseG1GC:G1回收器是并行、增量的,用来替代CMS。但目前仍处于实验阶段,如果使用CMS已经有不错的性能就无需尝试更换G1。

JVM垃圾回收总结的更多相关文章

  1. JVM垃圾回收机制总结:调优方法

    转载: JVM垃圾回收机制总结:调优方法 JVM 优化经验总结 JVM 垃圾回收器工作原理及使用实例介绍

  2. JVM内存管理和JVM垃圾回收机制

    JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...

  3. JDK分析工具&JVM垃圾回收(转)

    转自:http://blog.163.com/itjin45@126/blog/static/10510751320144201519454/ 官方手册:http://docs.oracle.com/ ...

  4. 老李分享:jvm垃圾回收

    老李分享:jvm垃圾回收   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478 ...

  5. jvm - 垃圾回收

    jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 垃圾回收的意义 它使得java程序员不再时时刻刻的关注内存管理方面的工作. 垃圾回 ...

  6. JVM垃圾回收机制概述

    JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...

  7. Java虚拟机学习笔记——JVM垃圾回收机制

    Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...

  8. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  9. Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法

    在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...

  10. JVM垃圾回收算法解析

    JVM垃圾回收算法解析 标记-清除算法 该算法为最基础的算法.它分为标记和清除两个阶段,首先标记出需要回收的对象,在标记结束后,统一回收.该算法存在两个问题:一是效率问题,标记和清除过程效率都不太高, ...

随机推荐

  1. Redis常用命令--Lists

    List是一个双向链表,按照插入顺序排序,可以添加一个元素到头部或者尾部.当对一个空key执行插入操作的时候会创建一个新表. 如果要清空列表,则会杀出对应的key空间. 在List中保存了头节点和未节 ...

  2. [ZJOI 2013]丽洁体

    Description 题库链接 给出四个字符串 \(T,A,B,C\) ,问你至少在 \(T\) 串中删去几个单词能使得 \(T\) 串变为 \(A?B?C\) 的形式,其中 \(?\) 表示任意多 ...

  3. [NOI 2007]货币兑换Cash

    Description 题库链接 (按我的语文水平完全无 fa♂ 概括题意,找了 hahalidaxin 的题意简述... 有 \(AB\) 两种货币,每天可以可以付 \(IP_i\) 元,买到 \( ...

  4. 亲戚(relative)

    [题目背景] Y 家是世界上最大的家族,HJZ 是其中一员. 现在 Y 家人想要拍一张全家福,却发现这是一个十分复杂的问题. . . . . . [题目描述] Y 家一共有 n 人 其中每个人最多有一 ...

  5. ●Codevs 4158 残缺的字符串

    题链: http://codevs.cn/problem/4158/ 题解: FFT. 定义两个相同长度的字符串s1,s2的距离为 $$dis(s1,s2)=\sum_{i=0}^{len-1}(s1 ...

  6. 2015 多校联赛 ——HDU5373(模拟)

    Problem Description In this problem, we should solve an interesting game. At first, we have an integ ...

  7. bzoj 3174: [Tjoi2013]拯救小矮人

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...

  8. 例10-1 uva11582(裴波那切数列)

    题意:你的任务是计算f(a^b)除以n的余数.其中f(0)=f(1)=1,且对于所有非负整数i,f(i+2)=f(i+1)+f(i). 思路: 由于是模运算,因此整个序列肯定会出现重复序列,所以先找出 ...

  9. Codeforces Round#403 (Div. 1)

    唉,昨天晚上迷迷糊糊地去打cf,结果fst两题,掉回蓝了... A.Andryusha and Colored Balloons 题意:给定一棵树,任意两个距离小等于二的点不能染相同的颜色,求最小颜色 ...

  10. 8.QT-对话框(模态与非模态)

    对话框介绍 对话框是于用户进行简易交互的顶层窗口 QDialog是Qt中所有对话框窗口的父类,是一种容器类型的组件 QDialog继承于QWidget类,如下图所示: QWidget和QDialog有 ...