首页 > 其他分享 >GC都有哪些?

GC都有哪些?

时间:2023-10-30 15:12:06浏览次数:27  
标签:Garbage 收集器 哪些 XX GC 垃圾 Collector

title: GC都有哪些?
tags: [JVM, GC]
author: Mingshan
categories: [JVM, GC]
date: 2020-03-11

相信把Java当做生产力工具的同学肯定对gc比较熟悉的,JVM团队在这块下了很多的功夫创造了很多垃圾收集器,不过有些垃圾收集器随着技术的发展被淘汰了,有些是最新开发的,技术很先进,效果很出众。下面介绍下有哪些垃圾收集器以及相关参数。

Java有九种类型的垃圾回收器:

  • Serial Garbage Collector(串行运行;作用于新生代;复制算法;响应速度优先;适用于单CPU环境下的client模式。)
  • ParNew Garbage Collector(并行运行;作用于新生代;复制算法;响应速度优先;多CPU环境Server模式下与CMS配合使用。)
  • Parallel Garbage Collector(并行运行;作用于新生代;复制算法;吞吐量优先;适用于后台运算而不需要太多交互的场景。)
  • Serial Old Garbage Collector(串行运行;作用于老年代;标记-整理算法;响应速度优先;单CPU环境下的Client模式。)
  • Parallel Old Garbage Collector(并行运行;作用于老年代;标记-整理算法;吞吐量优先;适用于后台运算而不需要太多交互的场景。)
  • CMS Garbage Collector(并发运行;作用于老年代;标记-清除算法;响应速度优先;适用于互联网或B/S业务。)
  • G1 Garbage Collector(并发运行;可作用于新生代或老年代;标记-整理算法+复制算法;响应速度优先;面向服务端应用。)
  • Epsilon GC(A No-Op Garbage Collector)
  • The Z Garbage Collector(并发)

Serial Garbage Collector

Serial收集器是最基本、最古老的收集器,在JDK5和6中是Client模式下默认的垃圾收集器,它是一个单线程的垃圾收集器,它在进行垃圾收集时,必须暂停其他所有工作的线程,就是所谓的“Stop-The-World”,直到它工作结束。根据内存年代的不同,其在新生代采用复制算法,老年代的实现单独被称为Serial Old,采用标记-整理算法(Mark-Compact)。Serial对应的JVM参数是:

-XX:+UseSerialGC

ParNew Garbage Collector

ParNew收集器是Serial收集器的多线程版本,除了使用多线程进行垃圾收集以外,其他行为和Serial收集器一致。最常见的应用场景是配合老年代的 CMS GC 工作,其JVM参数如下:

-XX:+UseConcMarkSweepGC -XX:+USeParNewGC

Parallel Garbage Collector

Parallel收集器是一个新生代的收集器,采用复制算法,在早期 JDK 8 等版本中,它是 server 模式的默认GC,其特点是吞吐量优先。所谓吞吐量就是CPU用于运行代码的时间与CPU总消耗的时间比值,吞吐量计算公式为

吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)

开启选项是:

-XX:+UseParallelGC

Parallel 收集器提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间和直接设置吞吐量大小,如下所示:

-XX:MaxGCPauseMillis=value
-XX:GCTimeRatio=N // GC 时间和用户时间比例 = 1 / (N+1)

除此之外,Parallel 收集器还提供了一个-XX:+UseAdaptiveSizePolicy参数,虚拟机会根据当前系统运行的情况,动态调整JVM相关参数以提供最合适的停顿时间及最大的吞吐量,这种调节方式被称为GC自适应调节策略(GC Ergonomics)。

Serial Old Garbage Collector

Serial Old是Serial的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。

Parallel Old Garbage Collector

Parallel Old是Parallel的老年代版本,使用多线程和“标记-整理”算法,它是JDK1.6开始提供的。

CMS Garbage Collector

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,基于“标记清除”算法(Mark Sweep),是一款比较优秀的收集器。但是,CMS 采用的标记 - 清除算法,存在着内存碎片化问题,所以难以避免在长时间运行等情况下发生 Full GC,导致导致恶劣的停顿。CMS同时对CPU资源非常敏感,会占用更多的CPU资源。

G1 Garbage Collector

G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。G1也可以在回收内存之后对剩余的堆内存空间进行压缩。并发扫描标记垃圾回收器在STW情况下压缩内存。G1垃圾回收会优先选择第一块垃圾最多的区域

JVM参数参数如下:

–XX:+UseG1GC

Epsilon GC

一个不做垃圾收集的收集器,在JDK11发布,具体参考:

http://openjdk.java.net/jeps/318

ZGC

一种可扩展的低延迟垃圾收集器,在JDK11中发布,它是一种全新的垃圾收集器,使用了Load Barriors技术来跟踪堆的状态和对象的状态。详细参考:zgc

通过以下参数开启ZGC,目前仅支持Linux/x86_64。

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

GC的优化配置

配置 描述
-Xms 初始化堆内存大小
-Xmx 堆内存最大值
-Xmn 新生代大小
-XX:PermSize 初始化永久代大小
-XX:MaxPermSize 永久代最大容量

参考:

标签:Garbage,收集器,哪些,XX,GC,垃圾,Collector
From: https://www.cnblogs.com/mingshan/p/17793500.html

相关文章

  • DDoS攻击原理是什么?防御措施都有哪些呢?
    DDoS攻击也被称为分布式拒绝服务攻击,是一种十分常见的网络安全威胁,其原理是通过大量的请求攻击目标服务器或网络设备,使其无法正常处理合法的请求,从而导致服务不可用或者系统崩溃,以下是详细的内容:DDoS攻击的原理可以简单理解为:攻击者利用大量的计算机或者设备(通常是已经感......
  • PWA 是属于谷歌的“小程序”!有哪些核心技术
    在国内由于小程序的风生水起,PWA应用在国内的状况一直都不是很好,PWA和小程序有很多的相似性,但是PWA是由谷歌发起的技术,小程序是微信发起的技术,所以小程序在国内得到了大力的扶持,很快就在国内技术界开花结果。这里想讨论下在去创建自己的第一个PWA应用前,什么是PWA应用,有哪些......
  • 美国服务器的安全措施有哪些
    保护美国服务器的安全至关重要,以下是一些常见的安全措施:防火墙:配置防火墙以限制入站和出站流量,只允许经过授权的流量通过。防火墙可以阻止恶意入侵。定期更新:及时更新操作系统、服务器软件和应用程序以修补已知的安全漏洞。保持系统和软件最新对抵御潜在的安全威胁非常重要。强密码......
  • 有名的软件开发公司有哪些
    智慧华盛恒辉软件人才派遣可以帮助企业降低人力成本。相比于雇佣全职员工,软件人才派遣可以提供更加灵活的合同模式,根据项目需求调整人力资源的使用,减少不必要的成本支出。1:华盛恒辉科技有限公司上榜理由:华盛恒辉是一家专注于高端软件定制开发服务和高端建设的服务机构,......
  • SpringCloud复习:(2)@LoadBalanced注解的工作原理
    @LoadBalanced注解标记了一个RestTemplate或WebClientbean使用LoadBalancerClient来进行负载均衡。LoadBalancerAutoConfiguration类给带注解的@RestTemplate添加了拦截器:LoadBalancerInterceptor.具体流程如下:首先定义一个LoadBalancerInterceptor然后定义了一个RestTemplateC......
  • SpringCloud复习:(3)LoadBalancerInterceptor
    使用Ribbon时,execute方法会由RibbonLoadBalancerClient类来实现它会调用重载的execute方法getLoadBalancer默认会返回ZoneAwareLoadBalancer(基类是BaseLoadBalancer).此处调用的getServer方法就会根据负载均衡策略选择适当的服务器来为下一步的http请求做准备。这个execute方法......
  • SpringCloud复习:(1)netflix包里的DiscoveryClient类
    DiscoveryClient类实现了EurekaClient接口它的主要作用:服务注册,服务续约,服务下线,获取服务列表。initScheduledTasks方法用来开启定时任务来完成上述功能。上图中的代码用来从服务器定期(默认30秒)拉取服务列表(ScheduledExecutorService的应用场景)其中TimedSupervisorTask这个Run......
  • Java实现分页的方式有哪些?
    1、手动分页不使用任何框架,用limt分页selectxxfromtab_alimt#{pageNo},#{pageSize}2、RowBounds分页(不推荐)这个是内存分页,它的原理是一次性查出所有数据,然后在内存里进行分页,占内存。3、PageHelper分页(推荐)Mybatis分页插件pom依赖:<dependency><groupId>com.g......
  • 创建CI/CD流水线中的IaC前,需要考虑哪些事项?
    许多软件工程团队通常会遵循相似的方法来交付基础设施以支持软件开发生命周期。为了缩小基础设施配置方式与应用程序环境部署方式之间的差距,许多DevOps团队将其基础设施即代码(IaC)模块直接连接到其CI/CD平台。其目的是创建一个直接融入软件开发和交付流程的连续基础设施流水线,......
  • LangChain实战
    1.概述最近,在研究LangChain时,发现一些比较有意思的点,今天笔者将给大家分享关于LangChain的一些内容。2.内容2.1什么是LangChain?LangChain是一项旨在赋能开发人员利用语言模型构建端到端应用程序的强大框架。它的设计理念在于简化和加速利用大型语言模型(LLM)和对话模型构建应用......