当前位置:网站首页>gc的意义和触发条件
gc的意义和触发条件
2022-08-01 10:00:00 【Drgom】
关于jvm的gc的必要性
jvm的堆内存不够时候,需要进行gc,释放内存
gc执行的条件
jvm的执行gc之前,必须停止所有线程,执行gc
gc的回收了什么对象
jvm使用可达性算法,回收未被引用的对象,引用计数法无法统计对象之间的应用。
gc时候,对象回收与否在对象是什么java的引用类型
- 强引用(FinalReference) =》绝不会被回收
- 软引用(SoftReference) =》内存泄露之前被回收
- 弱引用(WeakReference) =》垃圾回收时候会被回收
- 虚引用(PhantomReference)=》随时
gc分类和执行环境
堆的结构的简单剖析
jvm1.8之前将堆内存分为 Eden,S0,S1,Old Meomory,Perm(1.8后被废除),每次新实例化的对象会放入 young gen,当Eden+s0区满了,进行minor gc,经过15次gc仍存在的对象升级到老年代(或者对象比较大,超过阈值也会直接放到老年代),当整个堆内存不够的时候,会对整个堆内存进行gc,这就是major gc。
常用的gc算法的介绍
- 标记-清除算法:标记无用对象,然后进行清除回收。缺点:效率不高,产生垃圾碎片。
- 复制算法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。
- 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。
- 分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法
gc收集器分类及优缺点
Gc收集器 | 使用的算法 | 作用的区域 | 特点 | 优点 | 缺点 |
---|---|---|---|---|---|
Serial收集器 | 复制算法 | 新生代 | 标记和清理都是单线程 | 简单高效 | 必须暂停jvm,停顿时间长 |
Serial Old收集器 | 标记-整理 | 老年代 | 标记和清理都是单线程 | 简单高效 | 必须暂停jvm,停顿时间长 |
ParNew收集器 | 复制算法 | 新生代 | 并行 | 吞吐较好 | 必须暂停jvm,停顿时间长 |
ParallelScavenge收集器 | 复制算法 | 新生代 | 并行 | 精确控制gc时间 | 难以较好地控制gc的时间 |
Parold收集器 | 复制算法 | 老年代 | 并行 | 吞吐较好 | 必须暂停jvm,停顿时间长 |
CMS收集器 | 标记清除 | 老年代 | 并行 | 最短时间停顿 | Gc的时间变长,无法处理浮动垃圾 |
G1收集器 | 标记整理 | 整个堆 | 并行 | 高效,无碎片产生,可指定gc停顿时间 | G1需要额外的内存来记录数据分区 |
ZGC收集器 | 标记整理 | 整个堆 | 并行 | 高效低延时处理大内存的gc | 产生浮动垃圾 |
浮动垃圾的定义:标记过程标记活着的对象,从GCRoot的可达性判断对象活着,但无法标记“死亡”的对象。 如果在初始标记阶段被标记为活着,并发运行过程中“死亡”,remark过程无法纠正,因此变为浮动垃圾,需等待下次gc的到来
边栏推荐
- 广域铭岛入选2022年重庆市数字经济产业发展试点示范项目名单
- 【软件架构模式】MVVM模式和MVC模式区别
- Introduction and application of heap memory (including examples)
- YOLOv7-Pose尝鲜,基于YOLOv7的关键点模型测评
- CTFshow,命令执行:web32
- experiment....
- 【云驻共创】分布式技术之华为云全域调度技术与实践
- SkiaSharp's WPF self-painted five-ring bouncing ball (case version)
- Google Earth Engine——给影像添加一个属性对于单景的时间序列并返回影像
- 用OpenCV的边缘检测
猜你喜欢
C language game - minesweeper
Node's traditional and advanced practices for formatting time (moment)
CTFshow,命令执行:web33
程序员如何学习开源项目,这篇文章告诉你
SAP ABAP OData 服务如何支持 $orderby (排序)操作试读版
What's up with VS "Cannot find or open PDB file"?How to solve
Comprehensive experiment BGP
How to implement deep copy in js?
基于CAP组件实现补偿事务与消息幂等性
Detailed explanation of JVM runtime data area and JMM memory model
随机推荐
WTM:ASP.NET Core快速开发利器!
【应用推荐】常见资源管理器整理,含个人使用体验和产品选型推荐
用OpenCV的边缘检测
scrapy爬虫框架的使用
ClickHouse入门介绍与其特性
使用ESP32驱动QMA7981读取三轴加速度(带例程)
Comprehensive experiment BGP
Visualization - Superset installation and deployment
Detailed explanation of JVM runtime data area and JMM memory model
Introduction and application of pointers
关于#SQL#的问题,如何解决?
STM32入门开发 介绍IIC总线、读写AT24C02(EEPROM)(采用模拟时序)
How to ensure the consistency of database and cache data?
微信公众号授权登录后报redirect_uri参数错误的问题
Message queue interview latest finishing (2022)
Quantify daily work metrics
杨辉三角(c语言实现)
STM32个人笔记-嵌入式C语言优化
【软件架构模式】MVVM模式和MVC模式区别
What are the common API security flaws?