系列五、GC垃圾回收【四大垃圾算法-复制算法】

一、堆的内存组成

二、复制算法

2.1、发生位置

复制算法主要发生在新生代,发生在新生代的垃圾回收也被叫做Minor GC。

2.2、 Minor GC的过程

复制===>清空===》交换

1、eden、from区中的对象复制到to区,年龄+1

首先,当eden区满的时候会触发第一次GC,把还活着的对象拷贝到from区,当eden区再次满的时候会扫描eden区和from区,对这两个区域的对象进行垃圾回收,经过这次回收后还存活着的对象,则直接复制到to区(如果有对象的年龄已经达到了老年的标准,则复制到老年代),同时把这些对象的年龄+1;

2、清空eden、from区

然后清空eden区和from区中的的对象,原来的from区变to区,to区变为新一轮的from区,也即复制之后有交换,谁空谁是to;

3、进入老年代

部分对象会在from区和to区中复制来复制去,如此交换15次(由JVM的参数MaxTenuringThreshold决定,这个参数默认值为15)之后,如果还活着将进入老年代。

2.3、复制算法的优缺点

优点:不会产生内存碎片

缺点:

(1)浪费了一半的内存,这太要命了;

(2)如果对象的存活率很高,我们可以极端一点,假设是100%存活,那么我们需要将所有对象都复制一遍,并将所有引用地址重置一遍,复制这一工作所花费的时间,在对象的存活率达到一定程度时,将会变得不可忽视。所以从以上描述不难看出,复制算法要想使用,最起码对象的存活率要非常低才行,而且最重要的是,我们必须要客户50%的内存浪费。

相关推荐
蜂蜜黄油呀土豆3 天前
Java虚拟机垃圾回收机制解析
java·jvm·性能优化·gc·垃圾回收
尽兴-6 天前
JVM垃圾收集器深度解析:G1与ZGC
jvm·gc·zgc·g1·垃圾收集器java
尽兴-8 天前
JVM垃圾收集器与三色标记算法详解
java·jvm·算法·cms·gc·g1·三色标记算法
尽兴-11 天前
JVM垃圾回收核心知识体系
jvm·cms·gc·垃圾回收·zgc·g1 垃圾收集器
加油201915 天前
GO语言内存逃逸和GC机制
golang·内存管理·gc·内存逃逸
七夜zippoe16 天前
Python内存管理深潜:从引用计数到GC机制的全面优化实战
开发语言·python·gc·分代回收·内存池
zfj32125 天前
java垃圾收集 minorgc majargc fullgc
java·开发语言·jvm·gc·垃圾收集器
小毅&Nora1 个月前
【后端】【JAVA】JDK 21与JDK 7 JVM结构及GC算法深度解析:从永久代到元空间,从CMS到ZGC的演进
java·jvm·gc
没有bug.的程序员2 个月前
SOA、微服务、分布式系统的区别与联系
java·jvm·微服务·架构·wpf·日志·gc
没有bug.的程序员2 个月前
JVM 安全与沙箱深度解析
java·jvm·安全·gc·gc调优