java虚拟机学习总结之GC回收算法与GC收集器
GC回收算法
1.标记清除算法
分为标记阶段和清除阶段
标记阶段:通过特定的判断方式找出无用的对象实例并将其标记
清除阶段:将已标记的对象所占用的内存回收
缺点:运行多次以后容易产生空间碎片,当需要一整段连续内存时虽然空间足够但是无法分配,会多次触发GC操作。
2.复制算法
为了提高标记清除算法的效率,减少内存碎片的产生而出现的,该算法将内存空间分为两个完全相同的两部分,每次只使用其中的一部分。
分为标记阶段、复制阶段和清除阶段
标记阶段:同标记清除算法的标记阶段一致
复制阶段:将为标记的对象全部复制到另一块未使用的空间中
清除阶段:将已标记对象所在空间全部清除
缺点:虽然解决了空间碎片的问题, 但是内存使用量变为了当前内存的一半
3.标记整理算法
为了解决复制算法只能使用一半内存的情况
分为标记阶段、整理阶段、清除阶段
标记阶段:同标记清除算法的标记阶段一致
整理阶段:将未被标记的对象全部移动到固定的一端,将所有存活的对象整齐的排列在内存的一端
清除阶段:将未被标记的对象的另一块区域清空
4.分代收集算法
根据对象存活周期的不同将内存划分为新生代区域和老年代区域,在新生代中的对象生存时间短,通常为朝生夕死类型,老年代中的对象通常存活的时间都很长。
根据新生代中对象的类型采用改进的复制算法进行垃圾收集,将新生代分为Eden区和两个大小相等的Servior区,它们的比例默认为8:1,每次只使用Eden区和其中一个Servior区,垃圾收集时将未标记的对象移入到另一个Servior区。
根据老年代对象的类型采用标记整理算法。
此算法是目前HotSpot虚拟机中默认使用的算法。
GC收集器
新生代
1.Serial收集器
是一个单线程收集器,会出现Stop The World,即该收集器运行时会暂停其他所有线程。
适用于客户端模式下的虚拟机
2.ParNew收集器
是Serial收集器的多线程版本
适用于Server模式下的虚拟机
默认开启的收集线程数和CPU核数相同
3.Parallel Scavenge收集器
类似于ParNew收集器,其更关注于吞吐量
是通过调小新生代空间来实现控制吞吐量的操作
默认提供自适应的调节策略
老年代
1.Serial Old收集器
特性同Serial收集器相同
因为是在老年代,使用的收集算法为标记整理算法
2.Parallel Old收集器
特性同Parallel Scavenge收集器相同,是Parallel Scavenge收集器的老年代版本
使用标记整理算法
3.CMS收集器
分为初始标记、并发标记、重新标记和并发清除阶段
初始标记阶段:此阶段标记GCRoots直接关联的对象,需要停止所有线程
并发标记阶段:同用户线程一起工作,更正标记的对象
重新标记阶段:修正并发标记阶段因用户操作导致的变化
并发清除阶段:同用户线程一起工作,清除垃圾
缺点:对资源敏感,无法处理浮动垃圾
默认开启的线程数为(CPU数量+3)/4
4.G1收集器(新生代和老年代通用)
分为初始标记、并发标记、最终标记和筛选回收阶段
初始标记阶段:此阶段标记GCRoots直接关联的对象,需要停止所有线程
并发标记阶段:从GC Roots开始进行可达性分析,与用户线程一起工作
最终标记阶段:修正在并发标记阶段用户操作导致的变化
筛选回收阶段:使用多线程的方式清除垃圾
特点:G1收集器将内存分为了多个大小相同的Region,虽然还存在分区的概念,但是已经不是物理上隔离了,它们都是一部分Region的集合
名字的由来:优先回收价值最大的Region
各个收集器的搭配情况
注:Hot Spot 虚拟机用的就是 分代收集算法,在新生代中用的是改进的复制算法,主要涉及的收集器(Serial收集器、ParNew收集器、Parallel Scavenge收集器以及G1收集器),在老年代中用的是标记整理算法,主要涉及的收集器(Serial Old收集器、Parallel Old收集器、CMS收集器、G1收集器)。
原文地址:https://blog.csdn.net/luffysk/article/details/82730058
java虚拟机学习总结之GC回收算法与GC收集器的更多相关文章
- Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...
- 【JVM从小白学成大佬】4.Java虚拟机何谓垃圾及垃圾回收算法
在Java中内存是由虚拟机自动管理的,虚拟机在内存中划出一片区域,作为满足程序内存分配请求的空间.内存的创建仍然是由程序猿来显示指定的,但是对象的释放却对程序猿是透明的.就是解放了程序猿手动回收内存的 ...
- JVM虚拟机学习一:垃圾回收算法总结
1.java虚拟机中涉及到的数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某 ...
- (转)《深入理解java虚拟机》学习笔记3——垃圾回收算法
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...
- JVM学习(三):垃圾回收算法
局部性原理和分代回收思想 大学学习操作系统或者计算机组成原理的时候都提到一个重要概念,叫局部性原理. 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小 ...
- java虚拟机学习-JVM调优总结-分代垃圾回收详述(9)
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
- 深入理解java虚拟机学习笔记(二)垃圾回收策略
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略. 一. ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
随机推荐
- eclipse中没有server选项无法配置Tomcat
eclipse集成Tomcat: 打开eclipse - 窗口 - 首选项 - 服务器 - 运行时环境 找到Tomcat然后添加. eclipse添加插件: 开发WEB项目时要集成Tomcat可以并不 ...
- maven打包指定main入口插件
<!--打包插件 --><plugin> <groupId>org.apache.maven.plugins</groupId> <artifac ...
- Redis实战(十五)Redis实现接口调用频率限制
序言 登录次数 资料
- pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇
上篇讲到 pyinstaller打包exe太大的问题 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇zhuanlan.zhihu.com 那既然py ...
- 【转】ACM-数学总揽
转自: http://www.aiuxian.com/article/p-2262657.html 数学也分好几大部分,各种算法也很多,一时不知从哪里开始,算了,具体的后面再说吧,鉴于最近遇到的有关博 ...
- easyui 功能列传递一行数据
DeleteRow(' + JSON.stringify(row).replace(/"/g, '"') + ',0,' + Pindex + ',' + index + ')
- oracle 数据库优化【转载】
版权声明:本文为CSDN博主「咫尺的梦想ing」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/u01305 ...
- spring cloud:feign-hystrix
producer 1. File-->new spring starter project 2.add dependency <dependency> <group ...
- $_SERVER 中HTTP_HOST 和 SERVER_NAME
本来打算获取当前页面的url的 拼接时发现 $_SERVER['SERVER_NAME'] 并不是当前的url链接 打印整个$_SERVER 发现 [SERVER_NAME] => lvs ...
- taihong
揭秘!除了台风 我们还能在卫星云图上看到什么? 2019-08-08 09:20:53 来源: 中国天气网 中国天气网讯 说到卫星云图,可能大多数人首先能想到的就是台风.其实,拥有太空视角的卫星能 ...