jvm垃圾收集器

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

Original: https://www.cnblogs.com/liwangcai/p/10752567.html
Author: 神奇海螺。
Title: jvm垃圾收集器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574182/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java如何实现消费数据隔离?

    我是3y,一年 CRUD经验用十年的 markdown程序员👨🏻‍💻常年被誉为优质八股文选手 今天继续更新austin项目,如果还没看过该系列的同学可以点开我的历史文章回顾下,在看…

    Java 2023年6月9日
    065
  • 140_SpringBoot案例-fanout发布订阅模式

    整体核心 目标 实现步骤 生产者 创建生产者工程:springboot-rabbitmq-fanout-producer 在pom.xml中引入依赖 在application.ym…

    Java 2023年6月7日
    077
  • JMH java基准测试

    Measure, don’t guess! JMH适用场景 JMH只适合细粒度的方法测试 原理 编译时会生成一些测试代码,一般都会继承你的类 maven依赖 <d…

    Java 2023年5月29日
    075
  • SpringWeb 拦截器

    前言 spring拦截器能帮我们实现验证是否登陆、验签校验请求是否合法、预先设置数据等功能,那么该如何设置拦截器以及它的原理如何呢,下面将进行简单的介绍 1.设置 HandlerI…

    Java 2023年6月9日
    074
  • NGINX根据不同请求头参数,请求不同服务器

    在nginx的location配置中,在获取header配置时,须要在header名称前面加上固定前缀”http_”,并将header名称中的”…

    Java 2023年5月30日
    050
  • Serverless遇到 FinOps: Economical Serverless

    摘要:本文基于FunctionGraph在Serverless 领域的FinOps探索和实践,提出业界首个Serverless函数总成本估计模型 历川:华为云Serverless研…

    Java 2023年6月15日
    062
  • 理解、学习与使用 JAVA 中的 OPTIONAL

    转换值 有很多种方法可以转换 Optional 的值。我们从 map() 和 flatMap() 方法开始。 先来看一个使用 _map()_API 的例子: map() 对值应用(…

    Java 2023年5月29日
    048
  • Android 11 使用 BroadcastReceiver 监听短消息

    使用装有MIUI系统的小米手机,静态注册的广播接收器监听短消息。 在 AndroidManifest.xml中声明权限 <uses-permission android:na…

    Java 2023年6月7日
    067
  • Spring Security过滤器链分析-初始化流程(8)

    过滤器链分析 提起Spring Security的实现原理,很多读者都会想到过滤器链。因为Spring Security中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的…

    Java 2023年6月13日
    066
  • Kafka 是如何做到消息不丢或不重复的

    *消息重复。 相同的消息重复发送会造成消费者消费两次同样的消息,这同样会造成系统间数据的不一致。比如,订单支付成功后会通过消息队列给支付系统发送需要扣款的金额,如果消息发送两次一样…

    Java 2023年6月9日
    059
  • Java学习-090-解决 org.apache.ibatis.executor.ExecutorException: No constructor found in xxx

    问题背景: 开发了数据库比对功能,重写构造器后,服务启动后,请求接口响应数据如下所示 原因分析: 其实就是重写了构造器后,忘了补写一个默认的构造器了。此类的错误还经常出现在spri…

    Java 2023年5月29日
    074
  • 《穷爸爸富爸爸关键结论》

    富爸爸上了停在小店外的小卡车,这时他对我们说:”继续工作,孩子们,你们越快忘记你们的工资,你们未来的生活就会越轻松,继续用你们的头脑思考,不求回报地工作,很快就会发现比…

    Java 2023年6月8日
    050
  • 3-面向对象(2)

    一、Object类的使用 1.java.lang.Object类的说明: Object类是所Java类的根父类 如果在类的声明中未使用extends关键字指明其父类,则默认父类为j…

    Java 2023年6月7日
    060
  • vue路由守卫用于登录验证权限拦截

    vue路由守卫用于登录验证权限拦截 to:进入到哪个路由去 from:从哪个路由离开 next:路由的控制参数,常用的有next(true)和next(false) home需要判…

    Java 2023年6月15日
    058
  • APS实现的要点与难点

    在前一篇关于文章中讨论了不同层级、粒度的生产计划,在各行业中受重视程度的差异问题。 承蒙大家热烈讨论。本文则在收集各方高见的基础上,对于供应链上各个环节的运营、生产计划再作稍微深入…

    Java 2023年6月16日
    070
  • 类加载机制深度解析

    多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main启动程序,这里需要先通过类加载器把主类加载到JVM 主类在运行过程中如果使用到其他类,会逐步…

    Java 2023年6月13日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球