当前位置: 首页 > news >正文

聊聊jvm几种垃圾收集器

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

1.Serial收集器(新生代)

(1)单线程收集器

(2)采用复制算法,用于新生代垃圾回收

(3)垃圾回收期间需要STW(Stop The World),STW表示垃圾回收线程不与用户线程并发执行

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

(1)与Serial相似

(2)采用标记整理算法,用于老年代的立即回收

3.ParNew收集器(新生代)

(1)是Serial的多线程版本

(2)除此之外与Serial收集相似

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

(1)基本功能与ParNew收集器相似

(2)区别在于该收集器是要达到一个可控制的吞吐量(吞吐量=运行用户代码的时间/(运行用户代码的时间)+(垃圾回收的时间))

(3)可以高效的利用cpu时间

(4)提供了参数可以精确的控制吞吐量,分别是控制最大垃圾回收停顿时间,也可以直接设置吞吐量大小

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

(1)Parallel Scavenge收集器的老年代版本,采用标记整理算法

6.CMS收集器(老年代)

(1)采用标记清除算法,用户老年代的垃圾回收

(2)主要关注的是尽可能的缩短垃圾回收时用户线程的停顿时间

(3)主要有一下几个步骤:

①初始标记:简单标记一下GC ROOTS能直接关联到的节点,此阶段需要STW

②并发标记:进行GC Roots Tracing的过程,此阶段与用户线程并发执行

③重新标记:对并发标记时用于线程产生的新的节点进行标记,此阶段需要STW, 但是此阶段为多线程并行的(多个垃圾回收线程同时进行)

④并发清除:使用标记清楚算法对对象进行回收,此阶段与同户线程同时进行

(4)缺点:

①无法清除浮动垃圾,由于最后一个阶段并发清除是与用户线程同时进行的,所以用户线程可能会产生新的可会收的对象

②可能会产生垃圾碎片,由于该回收器采用的是标记清除算法

7.G1收集器

(1)G1(Garbage-First)

(2)G1收集器作用于整个JVM堆

(3)G1收集器将整个堆分成了大小相同的独立区域(Region)

(4)在后台会维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

相关文章:

  • 搭建 webpack + React 开发环境
  • jvm垃圾回收的过程
  • 到底什么是分布式锁,进程锁,线程锁
  • 晶振參数校定
  • 这样做能让nginx新能提升10倍
  • 查看项目错误信息
  • 简单说明String类为什么是final的
  • RocketMQ启动broker提示 错误:找不到或无法加载主类
  • CSS盒子模型
  • 总结HashMap和TreeMap的区别
  • Spring AOP中pointcut expression表达式解析 及匹配多个条件
  • typora+picgo+gitee,轻松搞定图片上传
  • 转载-C#事件的使用和讲解
  • 详细描述Error和Exception(运行期和编译期)的区别
  • 线程的生命周期以及状态
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 230. Kth Smallest Element in a BST
  • Angular 响应式表单之下拉框
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • javascript面向对象之创建对象
  • JS基础之数据类型、对象、原型、原型链、继承
  • PHP 小技巧
  • php面试题 汇集2
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 记一次和乔布斯合作最难忘的经历
  • 解析带emoji和链接的聊天系统消息
  • 前嗅ForeSpider教程:创建模板
  • 算法-插入排序
  • 我是如何设计 Upload 上传组件的
  • 优秀架构师必须掌握的架构思维
  • 智能网联汽车信息安全
  • 阿里云ACE认证之理解CDN技术
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​iOS安全加固方法及实现
  • #NOIP 2014# day.1 T2 联合权值
  • $.each()与$(selector).each()
  • (floyd+补集) poj 3275
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (四) Graphivz 颜色选择
  • (转)VC++中ondraw在什么时候调用的
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET 4.0中的泛型协变和反变
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net分布式压力测试工具(Beetle.DT)
  • .NET微信公众号开发-2.0创建自定义菜单
  • .Net中间语言BeforeFieldInit
  • @EnableAsync和@Async开始异步任务支持
  • @WebServiceClient注解,wsdlLocation 可配置