【Java】JVM(三)、Java垃圾收集器
一、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垃圾收集器的更多相关文章
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
- 读书笔记,《深入理解java虚拟机》,第三章 垃圾收集器与内存分配策略
要实现虚拟机,其实人们主要考虑完成三件事情: 第一,哪些内存需要回收: 第二,什么时候回收: 第三,如何回收. 第二节,对象已死吗 垃圾收集其实主要是针对java堆里面的数据来说的,传统的垃圾收 ...
- JVM学习笔记三:垃圾收集器与内存分配策略
内存回收与分配重点关注的是堆内存和方法区内存(程序计数器占用小,虚拟机栈和本地方法栈随线程有相同的生命周期). 一.判断对象是否存活? 1. 引用计数算法 优势:实现简单,效率高. 致命缺陷:无法解决 ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- 《深入理解 Java 虚拟机》学习 -- 垃圾收集器
<深入理解 Java 虚拟机>学习 -- 垃圾收集器 1. Serial 收集器(新生代) 含义: 单线程收集器. 缺点: 进行垃圾收集时,必须暂停其他所有的工作线程. 优点: 简单而高效 ...
- 【JVM】JVM中的垃圾收集器
垃圾收集器组合 Serial+Serial Old Serial+CMS ParNew+CMS ParNew+Serial Old Paralle Scavenge + Serial Old Para ...
- 《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 详解 3.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第三章 ,为了整理思路,简单记录一下,方便后期查阅. 3.2 对象已死吗 在垃圾收集器进行回收 ...
- <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
垃圾收集 垃圾收集(Garbage Collection,GC),垃圾收集需要完成的三件事情. 哪些对象需要回收 什么时候回收 如何回收 如何确定对象已死(即不可能在被任何途径引用的对象) 引用计数算 ...
- 深入理解Java虚拟机 第三章 垃圾收集器 笔记
1.1 垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...
- 《深入理解JAVA虚拟机》----------第三章 垃圾收集器与内存分配策略,笔记(下)
1.垃圾收集器 1.1 Serial收集器 这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程. 它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效. 1. ...
随机推荐
- led的驱动及测试程序
一.驱动源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> # ...
- [转] AForge.NET 图像处理类
https://www.nuget.org/packages?q=AForge.NET https://baike.baidu.com/item/AForge.NET/114415?fr=aladdi ...
- DevExpress 组件
最近看到 伍华聪 的博客里, DevExpress 组件那个效果很好看,特别是 LookUpEdit GridLookUpEdit 这两个控件,完美改善了 WinForm 里的 ComboBox 今天 ...
- 9-16Jenkins-3可用的环境变量、参数化构建和依赖
1.环境变量 可以查看可用的环境量 执行构建 2.参数化构建 3.依赖 多个工程可以在按既定顺序执行 test1225-2的构建触发器设置
- vcenter修改用户密码的方法
https://192.168.x.x:9443登录,必须用administrator@vsphere.local登录,不能用root用户登录. 主页-系统设置- Single Sing-On-用户和 ...
- 如何判断自己的浏览器支持的是javascript的那个版本
<script language="javascript"> var jsversion = 1.0; </script> <script langu ...
- Thread 1 cannot allocate new log的问题分析 (转载)
Thread 1 cannot allocate new log的问题分析 发生oracle宕机事故,alert文件中报告如下错误: Fri Jan 12 04:07:49 2007Thread 1 ...
- Spark Standalone模式HA环境搭建
Spark Standalone模式常见的HA部署方式有两种:基于文件系统的HA和基于ZK的HA 本篇只介绍基于ZK的HA环境搭建: $SPARK_HOME/conf/spark-env.sh 添加S ...
- Python XML解析
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这 ...
- 搜索引擎solr系列---solr分词配置
分词我理解的是,输入的一句话,按照它自己定义的规则分为常用词语. 首先,Solr有自己基本的类型,string.int.date.long等等. 对于string类型,比如在你的core/conf ...