《深入理解 Java 虚拟机》学习 -- 垃圾收集器

1. Serial 收集器(新生代)

含义:

单线程收集器。

缺点:

进行垃圾收集时,必须暂停其他所有的工作线程。

优点:

简单而高效。

示例:

2. ParNew 收集器(新生代)

含义:

Serial 收集器的多线程版本,使用多条线程进行垃圾收集。

示例:

3. Parallel Scavenge 收集器(新生代)

含义:

Parallel Scavenge 收集器的目标是达到一个可控制的吞吐量。而 CMS 等收集器的关注点则是尽可能地缩短垃圾收集时用户线程的停顿时间

吞吐量:

吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)

作用:
  • 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户的体验
  • 高吞吐量则可以最高效率地利用 CPU 时间,尽快地完成程序的运算任务,主要使用在后台运算而不需要太多交互的任务。

4. Serial Old 收集器(老年代)

含义:

Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用”标记 - 整理“ 算法。

示例:

5. Parallel Old 收集器(老年代)

含义:

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

示例:

6. CMS 收集器(重要)

含义:

CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。基于 ”标记 - 清除“ 算法。

运行过程
  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除

注意:

  • 初始标记,重新标记这两个步骤仍然需要暂停其他所有的工作线程
  • 初始标记仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快
  • 并发标记阶段就是进行 GC Roots Tracing 的过程
  • 重新标记是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录
优点:

并发收集,低停顿。

缺点:
  1. CMS 收集器对 CPU 资源非常敏感
  2. CMS 收集器无法处理浮动垃圾
  3. 基于 ”标记 - 清除“ 算法标记结束时会产生大量空间碎片
示例:

7. G1 收集器(重要)

含义:
  • G1 收集器是基于 ”标记 - 整理" 算法实现的收集器
  • G1 收集器可以非常精确地控制停顿
低停顿的原理:

G1 将整个 Java 堆(包括新生代、老年代)划分为多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。

8. JVM 默认的垃圾收集器

  • jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)

  • jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)

  • jdk1.9 默认垃圾收集器G1

-XX:+PrintCommandLineFlagsjvm :参数可查看默认设置收集器类型

-XX:+PrintGCDetails :亦可通过打印的GC日志的新生代、老年代名称判断

《深入理解 Java 虚拟机》学习 -- 垃圾收集器的更多相关文章

  1. 深入理解java虚拟机之垃圾收集器

    Java一个重要的优势就是通过垃圾管理器GC (Garbage Collection)自动管理和回收内存,程序员无需通过调用方法来释放内存.也因此很好多的程序员可能会认为Java程序不会出现内存泄漏的 ...

  2. 深入理解Java虚拟机:垃圾收集器与内存分配策略

    目录 3.2 对象已死吗 判断一个对象是否可被回收 引用类型 finalize() 回收方法区 3.3. 垃圾收集算法 1.Mark-Sweep(标记-清除)算法 2.Copying(复制)算法 3. ...

  3. 《深入理解Java虚拟机》垃圾收集器

    说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态 ...

  4. Java虚拟机学习 - 垃圾收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  5. 《深入理解Java虚拟机》——垃圾收集器与内存分配策略

    GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作: ...

  6. Java虚拟机学习 - 垃圾收集器 (4)

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  7. 深入理解Java虚拟机笔记——垃圾收集器与内存分配策略

    目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Sto ...

  8. 深入理解java虚拟机(3)垃圾收集器与内存分配策略

    一.根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时 ...

  9. 深入理解Java虚拟机学习笔记(二)-----垃圾收集器与内存分配策略

    写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何 ...

  10. 深入理解Java虚拟机---学习感悟以及笔记

    一.为什么要学习Java虚拟机?       这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器.曾经的我经常害怕处理内存溢 ...

随机推荐

  1. python合并两个字典

    1.借助dict(d1.items() + d2.items())的方法 2.借助字典的update()方法,没有返回值 3.借助字典的dict(d1, **d2)方法 4.d3={**d1,**d2 ...

  2. 预处理、const、static与sizeof-#pragma pack的作用

    1:有如下代码: #include <iostream.h> #pragma pack(1) struct test{ char c; short s1; short s2; int i; ...

  3. 深入理解Java的三大特性之多态

    世界上最美丽的东西,看不见也摸不着,要靠心灵去感受. ——海伦·凯勒 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响类使用的情况下改变类的内部结构,并保护数据.对 ...

  4. appium中从activity切换到html

    问题:混合开发的app中,会有内嵌的H5页面元素,该如何进行定位操作? 解决思路:appium中的元素定位都是基于android原生控件进行元素定位,而web网页是B/S架构,两者运行环境不同需要进行 ...

  5. Java-LockSupport

    LockSupport 和 CAS 是 Java 并发包中很多并发工具控制机制的基础,它们底层其实都是依赖 Unsafe 实现. LockSupport 提供 park() 和 unpark() 方法 ...

  6. ant-pro使用Form表单验证上传图片出现的问题

    1.复现:用antd的Form表单验证上传图片必填项时出现问题:复现过程,先提交,提示图片需要上传,上传成功后,依旧提示:图片未上传 2.表单验证原理:先理解一下antd的Form表单验证的表层原理, ...

  7. OpenAPI规范入门

    由于API对于我们的软件运行方式至关重要,因此记录我们的API对于确保我们大型IT组织中的每个人都了解正在发生的事情至关重要,这就是我们使用OpenAPI来帮助记录API规范的原因. 在本文中,我将向 ...

  8. 在Android初次的前期学习中的十二个小例子(附案例下载)

    目录(点击标题即可下载): Hello:使用Intent在两个Activity之间切换 Hello2:实现特定的鼠标点击事件功能 Hello3:点击监听事件集中处理 Hello4:登录注册界面布局 H ...

  9. Oracle 本地创建多个实例并创建多个监听(只能在服务端弄,不可在客户端)

    注意:监听必须在客户端创建,在客户端创建,会报错. 1.创建监听 通过 Net Configuration Assistant  创建监听,设置端口: 注意:此监听创建完后,服务列表里面并没有此服务的 ...

  10. Java NIO学习笔记九 NIO与IO对比

    Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别, ...