一、Minor GC、Major GC 和 Full GC

  Minor GC:清理新生代空间,当Eden空间不能分配时候引发Minor GC

  Major GC:清理老年代空间

  Full GC:清理Java堆空间

二、新生代垃圾收集器

  1. Serial 收集器

  

  线程:单线程收集器,

  算法:新生代标记复制,老年代标记整理

  缺点:在进行垃圾收集时候需要停止所有用户线程(STW)

  优点:没有线程交互开销

  

  2. ParNew 收集器

  

  在Serial收集器上进行改进,将GC改成了多线程,其他的包括Serial可用的所有控制参数、收集算法、STW、对象分配规则、回收策略等都与Serial完全一样。

  3. Parallel Scavenge 收集器

  算法:复制算法

  线程:多线程

  关注点:系统吞吐量

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

三、老年代垃圾收集器

  1. Serial Old 收集器

  Serial Old 是Serial 的老年代版本

  线程:单线程

  2. Parallel Old 收集器

  Parallel Old 是 Parallel Scavenge 的收集器老年代版本,

  3. CMS(Concurrent Mark Sweep 并发标记清理)收集器

  

  线程:多线程

  算法:标记清理

  步骤

  1)初始标记:标记GC Root 能直接关联到的对象

  2)并发标记:GC Root Tracing 过程

  3)重新标记:标记并发期间Java程序产生的对象

  4)并发清除:清理垃圾

  缺点:

  1)对CPU敏感,虽然不会停止CPU,但是会占用部分CPU资源

  2)无法处理浮动垃圾(在初始标记之后,并发标记时候产生的垃圾),只能留着下次清理

  3)大量的空间碎片

  4. G1 收集器

  优势:

  1)并行与并发

  2)分代收集

  3)空间整合

  4)可预测停顿

  步骤:

  1)初始标记

  2)并发标记

  3)最终标记(修正并发标记期间用户继续运作导致标记变动的一部分记录)

  4)筛选回收

  

【Java】JVM(三)、Java垃圾收集器的更多相关文章

  1. 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略

    第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收.   3.2 对象已死吗 ...

  2. 读书笔记,《深入理解java虚拟机》,第三章 垃圾收集器与内存分配策略

    要实现虚拟机,其实人们主要考虑完成三件事情: 第一,哪些内存需要回收: 第二,什么时候回收: 第三,如何回收. 第二节,对象已死吗    垃圾收集其实主要是针对java堆里面的数据来说的,传统的垃圾收 ...

  3. JVM学习笔记三:垃圾收集器与内存分配策略

    内存回收与分配重点关注的是堆内存和方法区内存(程序计数器占用小,虚拟机栈和本地方法栈随线程有相同的生命周期). 一.判断对象是否存活? 1. 引用计数算法 优势:实现简单,效率高. 致命缺陷:无法解决 ...

  4. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

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

    <深入理解 Java 虚拟机>学习 -- 垃圾收集器 1. Serial 收集器(新生代) 含义: 单线程收集器. 缺点: 进行垃圾收集时,必须暂停其他所有的工作线程. 优点: 简单而高效 ...

  6. 【JVM】JVM中的垃圾收集器

    垃圾收集器组合 Serial+Serial Old Serial+CMS ParNew+CMS ParNew+Serial Old Paralle Scavenge + Serial Old Para ...

  7. 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 详解 3.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第三章 ,为了整理思路,简单记录一下,方便后期查阅. 3.2 对象已死吗 在垃圾收集器进行回收 ...

  8. <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记

    垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...

  9. 深入理解Java虚拟机 第三章 垃圾收集器 笔记

    1.1   垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...

  10. 《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)

    1.垃圾收集器 1.1 Serial收集器 这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程. 它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效. 1. ...

随机推荐

  1. ExtJS xtype 一览

    基本组件: xtype Class 描述 button Ext.Button 按钮 splitbutton Ext.SplitButton 带下拉菜单的按钮 cycle Ext.CycleButton ...

  2. PHP CI框架如何去掉 sql 里的反引号

    在使用CI框架的时候, 经常的Active Record 类,这时候会出现一个问题 使用Active Record 类组成的sql 中,为了防止sql注入,会自动的在表名,字段名 自动添加反引号 当然 ...

  3. CMake Error: Curses library not found. Please install appropriate package

    编译安装MySQL的时候,出现错误: -- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) CMake Err ...

  4. python 自动化多线程的应用

    1.本机上同时执行多个浏览器 import threading,sys from time import sleep,ctime from selenium import webdriver path ...

  5. ZooKeeper 集群的安装、配置---Dubbo 注册中心

    ZooKeeper 集群的安装.配置.高可用测试 Dubbo 注册中心集群 Zookeeper-3.4.6 Dubbo 建议使用 Zookeeper 作为服务的注册中心. Zookeeper 集群中只 ...

  6. Centos7安装docker(转!)

    时间在自己的运动中也会碰到挫折,遇到障碍,所以某一段时间也会滞留在哪一个房间里 <百年孤独> 转自:https://www.cnblogs.com/yufeng218/p/8370670. ...

  7. java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?

    在Java中,所有对象都能够被作为"监视器monitor"——指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity.所有对象的非同步方法都能够在任意时刻被任意线程调用 ...

  8. Spark 分布式SQL引擎

    SparkSQL作为分布式查询引擎:两种方式 SparkSQL作为分布式查询引擎:Thrift JDBC/ODBC服务 SparkSQL作为分布式查询引擎:Thrift JDBC/ODBC服务 Spa ...

  9. string hashcode 解读

    偶尔看到string hashcode方法如下 public int hashCode() { int h = hash; if (h == 0 && value.length > ...

  10. c++官方文档-命名空间

    #include<stdio.h> #include<iostream> #include<queue> #include<map> #include& ...