JVM的GC机制

1.概述

在此不进行JVM与GC的复杂解释,只进行简单的概述。

JVM:Java Virtual Machine(Java虚拟机)

GC:Garbage Collection,gc是java虚拟机的垃圾回收组件。

1.1 JVM结构

首先,我们要知道,jvm主要分为五个部分:方法区、堆、栈(方法栈)、本地方法栈(native)、程序计数器。

而其中,方法区与堆区是线程共享区;栈、本地方法栈、程序计数器则是线程私有区。

而我们进行gc的部分就是在堆区。

2. GC算法

垃圾回收的算法有很多,其中常见的有标记-清除算法、复制算法、标记-整理算法、分代收集算法等。

2.1 结构与功能

我们将堆分为两个部分:新生代和老年代。其中新生代的 gc 我们称之为 minor gc,也叫轻gc;老年代的 gc 叫做 full gc。

1 eden区,既是所谓的“伊甸园”,也叫做新生代,生成的对象首先在 eden 区中开辟空间(针对的是体积小的对象,如果对象的体积太大会直接在老年代中开辟存储空间),如果 eden 空间不够对象进行分配,则会进行一次 minor gc。

2 From survivor 区,这是第一个幸存者空间。在eden区由于空间不足进行 minor gc 的时候,会将 eden 区中存活的对象拷贝到 From 区,直到From区装满。

3 To survivor 区,这是第二个幸存者空间。在 From 区装满之后,会将From区的的 对象复制到 To 区,从而清空From区,同时将From 区变成 To 区,To 区变成 From 区,保证 To 区永远保持空的状态,而这一次交换使得 survivor 空间中的对象的“年龄”加一,达到一定的年龄之后(默认15,即交换15次),将仍然存活的对象存入老年代。

4 老年代,老年代的对象则只能等待 full gc 的回收。

5 以上就是 GC 的简单过程。

【以上gc过程是jdk1.8的实现原理,jdk11之后取消了 full gc 的机制】

2.2 JVM调优

jvm的调优的话针对两方面:

1 降低full gc 的执行频率:增大内存,增大full gc 的空余内存

2 提高执行时间:加大运行内存

 

 

 

 

JVM(Java虚拟机)的垃圾回收(GC机制是自动管理内存的一种机制。它通过自动识别和回收不再使用的对象来释放内存空间,以避免内存泄漏和程序中的内存溢出错误。 JVM中的垃圾回收器负责执行垃圾回收。当对象不再被引用时,垃圾回收器将标记这些对象为垃圾,并将它们从内存中回收。以下是JVM GC回收机制的一般过程: 1. 标记阶段(Marking Phase):从根对象(如线程栈中的引用、静态变量等)开始,垃圾回收器将遍历对象图并标记可达的对象。 2. 清除阶段(Sweeping Phase):垃圾回收器将清除标记为垃圾的对象,并回收它们占用的内存空间。 3. 压缩阶段(Compacting Phase):如果需要,垃圾回收器会对存活的对象进行整理,使它们在内存中连续排列,从而减少碎片化并提高内存的利用率。 4. 再分配阶段(Allocation Phase):如果需要,垃圾回收器会为新对象分配内存空间。 具体的垃圾回收算法和策略可能因不同的JVM实现而异。常见的垃圾回收算法包括标记-清除(Mark and Sweep)、复制(Copying)、标记-整理(Mark and Compact)等。JVM还提供了不同的垃圾回收器,如Serial、Parallel、CMS(Concurrent Mark Sweep)、G1(Garbage-First)等,以满足不同场景下的需求。 总而言之,JVM的垃圾回收机制通过自动识别和回收不再使用的对象来管理内存,确保程序运行时的内存使用效率和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值