jvm-05.垃圾回收

垃圾回收

什么是垃圾

jvm中new出来的对象,没有任何引用指向它的时候,它就是垃圾。

垃圾的定位

引用计数

当引用计数变为0的时候就成为垃圾了。
在这里插入图片描述
但是,引用计数会没有办法定位循环引用的垃圾对象,
例如,有三个对象互相引用,
但是没有其它外部引用指向它们,它们其实都是垃圾。
垃圾抱起团来也是一堆垃圾(笑cry)。
在这里插入图片描述

可达分析

Java采用的是这种方法

将"GC Roots"作为起点,从这些节点开始向下搜索引用的对象,
整条引用链上的对象都被标记为非垃圾,其余未被标记的对象都是垃圾。

GC Roots:线程栈的本地变量、静态变量、本地方法栈的变量等。
在这里插入图片描述

垃圾的回收

三种方法
在这里插入图片描述

标记清除

标记→然后清除
在这里插入图片描述
优点:方法简单,存活对象较多的情况下效率较高,
缺点:两边扫描,效率偏低,也容易产生碎片。
因为回收的这些空间会产生不连续的内存。

拷贝

将空间一分为二,其中一半不用,
回收时将存活的对象整齐拷贝到另一半空间。
在这里插入图片描述
优点:没有碎片,
缺点:浪费空间,永远都有一半空间是空闲着的。

标记压缩

标记→然后清除的时候顺带整理好空间
在这里插入图片描述
它是消耗时间较长,效率最低的一种,因为边清除边整理。

这三种方法各有特点,实际运用中一般是结合使用。

堆内存分区

在这里插入图片描述
年轻代大量死去,少量存活,采用拷贝方法回收,
老年代存活率高,回收较少,采用MS或MC,即标记清除和标记压缩。
伊甸园区的回收会有一个特点,就是经过一次回收后会有大量对象被清除,
回收范围包括伊甸园区和当前的幸存者区,经历过minor GC存活下来的对象,分代年龄会+1,
分代年龄未达到一定值,例如15,会被被拷贝到另外一个幸存者区,否则移动到老年代。

这些情况对象会被放到老年代(对象的分配)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值