首页 > 编程语言 >JVM:不同垃圾收集算法和垃圾收集器 优缺点总结

JVM:不同垃圾收集算法和垃圾收集器 优缺点总结

时间:2024-06-20 17:45:37浏览次数:14  
标签:收集器 对象 算法 引用 JVM 空间 垃圾

 

如何判断对象是否为垃圾:
引用计数法:对象是否被引用,无法解决对象循环引用导致的问题
可达性分析:也叫根搜索法

 

垃圾收集算法

1、标记-清除(Mark-Sweep)

示意图

  • 深蓝色:有引用
  • 深灰色:没引用
  • 白色:待分配

回收前:对整个引用空间不连续的堆对象遍历
回收后:引用的对象空间不变,清除:对全部垃圾对象遍历后清除

 缺点:
耗时---整个堆的对象遍历
空间不连续,产生大量碎片空间---可能导致gc次数增多

 

2、复制算法(Copying):应用场景年轻代中s0,s1

示意图

回收前:空间复制,只用一份空间,对象引用空间不连续,生命周期短,朝生夕死,
回收后:会排列规整

优点:空间连续
缺点:浪费空间

 

3、标记-整理(Mark-Compact):应用场景---老年代

示意图

回收前:对整个引用空间不连续的堆对象遍历
回收后:引用的对象空间连续,清除:没遍历全部,清除存活对象以外的空间

优点:空间连续,节约空间
缺点:标记耗时

 

4、分代收集算法:分代收集算法就是目前虚拟机使用的回收算法

 

垃圾收集器 

1、串行收集器

特点:单线程、会暂停用户线程

  • Serial收集器,年轻代
  • SerialOld收集器,老年代

 

2、并行收集器:

特点:多线程、会暂停用户线程

普通:

  • ParNew收集器--年轻代
  • ParNew收集器对应老年代一般为CMS收集器

吞吐量优先:

  • Parallel Scavenge收集器,应用年轻代
  • Parallel Old收集器,应用老年代

 

3、并发收集器

特点:停顿时间优先,可以交替运行

  • CMS收集器,应用老年代,标记清除算法(不用标记整理是因为,整理后对象地址发生变化,用户线程对象运行中,会改变地址,如果有引用则会出错)  

    优点:并发收集、停顿时间短

    缺点:产生空间碎片、对cpu要求稍高、无法处理并发阶段产生的垃圾

  • G1收集器(jdk1.9默认),新老生代都适用,标记整理算法

 

在完善中......

 

标签:收集器,对象,算法,引用,JVM,空间,垃圾
From: https://www.cnblogs.com/cm21/p/18253131

相关文章

  • 龙哥量化:AI时代到来,百度的文心一言能AI选股吗,让AI写一个选股公式20日涨幅>=30%,AI弱智,
    如果您需要代写技术指标公式,请联系我。龙哥QQ:591438821龙哥微信:Long622889选股要求:20日涨幅>=30%首先看我写的HH:=HHV(H,20);LL:=LLV(L,20);HHS:=HHVBARS(H,20);LLS:=LLVBARS(L,20);XG:(HH-LL)/LL*100>30ANDHHS<LLS; 可以在通达信中新建一个条件选股公式验证一......
  • 浅学JVM
    一、基本概念目录一、基本概念二、JVM运行时内存1、新生代1.1  Eden区1.2.ServivorFrom1.3.ServivorTo1.4MinorGC的过程(复制->清空->互换)1.4.1:eden、servicorFrom复制到ServicorTo,年龄+11.4.2:清空eden、servicorFrom1.4.3:ServicorTo和ServicorFrom......
  • jvm必知必会-类的生命周期图文详解
    类的生命周期描述了一个从加载、使用到卸载的过程;而其中的连接部分又分为一下三个阶段:验证准备解析6.1加载阶段Loading阶段第一步是类加载器会根据类全限定名通过不同的渠道以二进制流的方式获取字节码信息,程序员可以使用Java代码扩展不同的渠道。比如通过......
  • 【JVM】详解双亲委派机制
    双亲委派机制是Java类加载器的一种工作模式,确保类加载的一致性和安全性。以下是详细的定义、优缺点以及如何破坏双亲委派机制的描述。双亲委派机制的定义双亲委派机制(ParentDelegationModel)是一种类加载器的工作模式。在这种模式下,类加载器在加载类时,会先将加载请求委派......
  • 【JVM】类的⽣命周期和类加载的过程
    在Java中,类的生命周期和类加载过程是Java虚拟机(JVM)管理的核心部分。类的生命周期包括从类被加载到内存直到类被卸载的整个过程。类加载过程可以细分为多个阶段:加载、链接(包括验证、准备、解析)、初始化和使用。以下是详细的描述:类的生命周期加载(Loading)定义:将类的字节码......
  • 【JVM】G1 垃圾收集器的垃圾收集过程
    G1(GarbageFirst)垃圾收集器是Java虚拟机(JVM)中的一种垃圾收集器,设计目标是提供高吞吐量和低停顿时间的垃圾收集。G1收集器将堆划分为多个大小相等的独立区域(Region),并通过并行和并发的方式进行垃圾回收。G1收集器可以回收年轻代(YoungGeneration)和老年代(OldGeneration)的垃圾......
  • 【JVM】CMS 收集器的垃圾收集过程
    CMS(ConcurrentMark-Sweep)收集器是Java虚拟机(JVM)中的一种垃圾收集器,它主要面向老年代(OldGeneration)的垃圾回收。CMS收集器的目标是最小化垃圾收集的停顿时间,从而提高应用程序的响应性。CMS垃圾收集过程主要分为以下几个阶段:初始标记(InitialMarking):这一阶段标记所有直接......
  • C# 垃圾回收机制
    C#垃圾回收机制C#的资源分类托管资源C#的申请的内存空间都是在CLR上自动管理,像string[]arr=newstring[10]//或者newclass等等托管资源是.Net平台CLR提供的内存管理方式,由.Net自动释放,托管资源:栈资源(根据函数运行的时候自动分配释放)、托管堆内存(用户需要的时候new,不需......
  • JVM-垃圾回收器-ZGC
    新一代垃圾回收器ZGC的探索与实践-美团技术团队Main-Main-OpenJDKWiki介绍        ZGC(ZGarbageCollector)是一款性能比G1更加优秀的垃圾收集器。ZGC第一次出现是在 JDK11中以实验性的特性引入,这也是JDK11中最大的亮点。在JDK15中ZGC不再是实......
  • Python中的垃圾回收机制
    1.引言在现代编程中,垃圾回收是确保程序稳定运行的关键技术之一。Python,作为一种高级编程语言,拥有一套成熟的垃圾回收机制,它在背后默默地管理着内存,确保程序不会因为内存泄漏而崩溃。本文将深入探讨Python中的垃圾回收机制,以及它如何影响我们的代码。2.Python内存管理基......