jvmgc算法
‘壹’ 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的详细解释:
触发条件:
- 当JVM运行过程中,新生代内存空间逐渐不足时,会触发Minor GC。
垃圾回收过程:
- 使用可达性分析算法来识别哪些对象可以被回收。该算法主要查找对象是否被GC Roots引用,如果发现有引用,则该对象不可回收。
- GC Roots通常包括方法的局部变量和静态变量引用的对象。
对象的引用类型:
- 强引用:直接由变量指向的对象,不会被回收。
- 软引用:在内存不足时会被回收。
- 弱引用:在垃圾回收时一定会被回收。
- 虚引用:用于在对象被回收时收到通知,实际应用中很少用到。
finalize方法的影响:
- 存在GC Roots的对象不会被回收,但不意味着所有不存在GC Roots的对象一定会被回收。
- 对象可以通过重写finalize方法来避免回收,垃圾回收器在执行回收前会调用finalize方法,判断是否有引用存在,若存在则不进行回收,直到下一次垃圾回收再次确认该对象没有引用才进行回收。
新生代内存模型:
- Eden区占新生代内存的80%,Survivor区各占10%。
- 对象在Eden区中创建后,当Eden区满时触发Minor GC,存活对象转移到一个Survivor区,Eden区清空。
- 下一次GC时,Eden区和上次存活对象所在的Survivor区中存活对象转移到另一个Survivor区,Eden区再次清空。
- 通过这样的循环使用Survivor区,确保每次GC后都能得到较大连续的内存空间,减少内存碎片,提高内存使用效率。
意义:
- 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收集器由于没有使用过,所以从网上找了一些教程供大家了解
并行与并发
分代收集
空间整合
可预测的停顿