当前位置:首页 » 操作系统 » jvmgc算法

jvmgc算法

发布时间: 2025-08-06 14:29:01

‘壹’ JVM系列(九):MinorGC、MajorGC、FullGC垃圾回收介绍

MinorGC、MajorGC和FullGC介绍如下

1. MinorGC定义:发生在年轻代空间的垃圾回收过程。 特点:由于Java对象大多生命周期短暂,因此Minor GC非常频繁,且回收速度较快。 算法:一般采用复制算法。 影响:可能会引发STW,直到JVM垃圾回收结束后,用户线程才恢复运行。

2. Major GC定义:发生在老年代的GC。 触发条件:当老年代空间不足时,会先尝试触发Minor GC。如果Minor GC之后空间仍然不足,则会触发Major GC。 伴随情况:基本上进行一次Major GC就会伴随进行一次Minor GC。 速度:一般比Minor GC慢10倍,且STW的时间更长。

3. Full GC定义:可以理解为Major GC和Minor GC组合后进行的一整个过程,清理JVM整个堆空间。 触发条件:Full GC的触发条件多样,但都会产生应用程序的停顿现象。 影响:当停顿产生时,整个应用程序线程都会被暂停,可能导致应用程序看似卡死的情况。

以上是对MinorGC、MajorGC和FullGC垃圾回收的简要介绍,希望对你有所帮助。

‘贰’ JVM垃圾回收之Minor GC

JVM中的Minor GC是指发生在新生代内存空间的垃圾回收过程。以下是关于Minor GC的详细解释:

  1. 触发条件

    • 当JVM运行过程中,新生代内存空间逐渐不足时,会触发Minor GC。
  2. 垃圾回收过程

    • 使用可达性分析算法来识别哪些对象可以被回收。该算法主要查找对象是否被GC Roots引用,如果发现有引用,则该对象不可回收。
    • GC Roots通常包括方法的局部变量和静态变量引用的对象。
  3. 对象的引用类型

    • 强引用:直接由变量指向的对象,不会被回收。
    • 软引用:在内存不足时会被回收。
    • 弱引用:在垃圾回收时一定会被回收。
    • 虚引用:用于在对象被回收时收到通知,实际应用中很少用到。
  4. finalize方法的影响

    • 存在GC Roots的对象不会被回收,但不意味着所有不存在GC Roots的对象一定会被回收。
    • 对象可以通过重写finalize方法来避免回收,垃圾回收器在执行回收前会调用finalize方法,判断是否有引用存在,若存在则不进行回收,直到下一次垃圾回收再次确认该对象没有引用才进行回收。
  5. 新生代内存模型

    • Eden区占新生代内存的80%,Survivor区各占10%。
    • 对象在Eden区中创建后,当Eden区满时触发Minor GC,存活对象转移到一个Survivor区,Eden区清空。
    • 下一次GC时,Eden区和上次存活对象所在的Survivor区中存活对象转移到另一个Survivor区,Eden区再次清空。
    • 通过这样的循环使用Survivor区,确保每次GC后都能得到较大连续的内存空间,减少内存碎片,提高内存使用效率。
  6. 意义

    • Minor GC结合高效垃圾回收算法和新生代内存模型,显着提升内存分配性能,有效控制内存碎片,保证内存使用效率,是JVM新生代内存管理的高效策略。

‘叁’ JVM的垃圾算法有哪几种

一、垃圾收集器概述

如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。

JVM会从年轻代和年老代各选出一个算法进行组合,连线表示哪些算法可以组合使用

二、各个垃圾收集器说明

1、Serial(年轻代)

  • 年轻代收集器,可以和Serial Old、CMS组合使用

  • 采用复制算法

  • 使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

  • client模式年轻代默认算法

  • GC日志关键字:DefNew(Default New Generation)

  • 图示(Serial+Serial Old)

    7、G1

  • G1收集器由于没有使用过,所以从网上找了一些教程供大家了解

  • 并行与并发

  • 分代收集

  • 空间整合

  • 可预测的停顿

热点内容
怎么电脑密码 发布:2025-08-10 23:03:53 浏览:738
虚拟机下安装linux 发布:2025-08-10 23:02:21 浏览:761
有哪些配置好车 发布:2025-08-10 22:57:19 浏览:905
我的世界冷小坏服务器 发布:2025-08-10 22:51:59 浏览:956
windows下编译php扩展 发布:2025-08-10 22:43:53 浏览:726
链表反转c语言 发布:2025-08-10 22:43:40 浏览:285
c语言求两数之和 发布:2025-08-10 22:37:08 浏览:774
phptype 发布:2025-08-10 22:29:23 浏览:902
ios和android区别 发布:2025-08-10 22:24:00 浏览:832
安卓host是什么意思 发布:2025-08-10 22:23:09 浏览:457