首页 > 其他分享 >GC垃圾回收

GC垃圾回收

时间:2023-01-21 17:22:27浏览次数:48  
标签:标记 对象 回收 算法 GC 内存 垃圾

GC垃圾回收

GC(Garbage Collection):垃圾回收器,用于java堆的内存管理,在JVM中程序计数器,java虚拟机栈,本地方法栈的生命周期跟随线程,栈帧的进栈和出栈能够实现自动清理,jdk8之后元空间成为本地内存也不受GC控制,因此GC主要作用于堆

程序在运行时,会有大量的对象不断创建,有些对象的生命周期很多,因此不可避免的出现一些垃圾数据,这些数据对程序来说已经无法访问,为了避免影响性能,java虚拟机会在程序运行过程中不断的进行自动的垃圾回收(GC) PS:无法确认虚拟机何时清除

GC的种类

  1. Minor GC(年轻代GC):发生在年轻代的GC,触发频繁,回收速度快
  2. Major GC(老年代GC):发生在老年代的GC,通常Major GC会与Minor GC一起执行,回收速度比Minor GC慢
  3. Full GC:清理整个堆空间,包括年轻代与老年代
  4. Mixed GC:混合回收,G1垃圾回收器特有,回收年轻代与部分老年代

GC回收算法

引用计数法

引用计数法为每一个对象添加一个计数器,任何一个对象对此对象进行引用,则对此对象的引用计数器+1,当引用失败时,对此对象的引用计数器-1,如果对象引用计数器的值为0时,则对象可以被回收

由于此种方法使用计数器,对时间与cpu资源都有开销,且无法解决循环引用的问题,一般不采用此种方法

复制算法

复制算法将内存划分为两块,每次只使用其中1块,当内存满时,将存活对象复制到另一块中,之后清空内存块

此方法适用于内存中垃圾对象较多,需要复制的对象较少的情况(对象存活度低的场景),反之则不适合

标记清除算法

标记清除算法分为标记和清除,需要两次扫描,在算法清除后会使内存碎片化,需要与标记压缩算法结合使用

  • 标记:扫描内存块,对存活的对象进行标记
  • 清除:扫描内存块,对没有标记的对象进行清除

标记压缩算法

标记压缩算法是在标记清除算法的基础之上,做了优化改进,和标记清除算法一样,也是先标记存活的对象,清理阶段是先将存活的对象压缩到内存的一端,之后清理边界以外的垃圾,解决了标记清除算法使内存碎片化的问题

需要三次扫描:标记、清除、压缩(存活对象前移)

分代回收算法

没有最好的算法,只有最合适的算法。分代回收算法就是这样的,根据回收对象的特点进行选择

  • 年轻代:对象存活率低适合复制算法
  • 老年代:内存区域大,存活率高适合标记清除(内存碎片不多的情况)+标记压缩混合实现

算法对比

效率(时间复杂度):复制算法>标记清除算法>标记压缩算法

内存整齐度:复制算法=标记压缩算法>标记清除算法

内存利用率:标记压缩算法=标记清除算法>复制算法

标签:标记,对象,回收,算法,GC,内存,垃圾
From: https://www.cnblogs.com/shenStudy/p/17063921.html

相关文章

  • SpringCloud Sleuth链路追踪
    1、概要一般的,一个分布式服务跟踪系统,主要有三部分:数据收集数据存储数据展示然而这三个部分其实不都是由SpringCloudSleuth(下面我简称为Sleuth)完成的,Sleuth负责数......
  • SpringCloud Stream消息驱动
    简单搭建,没有技术含量,Demo可用1、介绍①产生原因RabbitMQ、RocketMQ、Kafka、ActiveMQ在一个项目中,可能存在多种不同的MQ,在不同的MQ中,切换维护开发都很麻烦。如果你......
  • 关于#springCloud集成swagger#的问题
    提问:关于#springCloud集成swagger#的问题,如何解决?springCloud整合swagger时Postman请求接口没问题,但用swagger访问时需要认证客户端但后端日志显示已经请求成功。解答:在Sp......
  • SpringCloud Alibaba之Sentinelt组件
    文章目录​​一、Sentinel熔断与限流​​​​二、控制台安装​​​​1、Sentinel控制台安装​​​​三、规则讲解​​​​1、实时监控​​​​2、流控规则​​​​2.1流控......
  • Istio与SpringCloud对比
    Istio数据平面的高性能智能网络代理,它是基于Envoy改进的Istio-Proxy,控制和协调了被代理服务的所有网络通信,同时也负责收集和上报相关的监控数据。也就是说,代理服务跟外......
  • SpringCloud(二)
    文章目录​​6、Ribbon​​​​6.1、Ribbon是什么​​​​6.2、Ribbon能干什么​​​​6.3、Ribbon实现负载均衡环境搭建​​​​6.4、Ribbon实现负载均衡​​​​6.5、自定......
  • SrpingCloud Tencent Polaris中的组件
    北极星包含哪些组件北极星组件分为控制平面、数据平面以及生态组件3大类,通过这3大类组件,组成一套完整的微服务治理体系。控制平面控制平面负责服务和配置资源的整体调度和下......
  • SpringCloud Tencent Polaris
    北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。虽然,业界已经有些组件可以解决其中一部分问题,但是缺少......
  • 【luogu AGC031E】Snuke the Phantom Thief(网络流)
    SnukethePhantomThief题目链接:luoguAGC031E题目大意有n个特殊点分布在二维平面上,每个点有坐标和价值。你要选一些点,总价值是你选的点的价值和。然后有一些约束,......
  • SpringCloud Bus消息总线
    1、介绍①概念人话:不用一个一个服务去post。一次post后,各个服务通过bus都能获取post的信息去更新配置。即将N次向client的post,改为了一次post(向client或center)在微服......