走进JVM -- 垃圾回收(GC)

垃圾回收

垃圾回收(Garbage Collection, GC). 垃圾回收的主要目的是清除不再使用的对象,自动释放内存.

GC 是如何判断对象是否可以被回收的呢?

为了判断对象是否存活,JVM 引入了GC Roots . 如果一个对象与 GC Roots之间没有直接或间接的引用关系. 比如某个失去任何引用的对象,或者两个相互环岛状循环引用的对象等. 判决这些对象 “死缓”,是可以被回收的.

什么对象可以作为GC Roots 呢?

比如: 类静态属性中引用的对象,常量引用的对象, 虚拟机栈引用的对象, 本地方法栈中引用的对象等.

垃圾回收的相关算法

“标记-清除算法”

该算法会从每个 GC Roots 出发, 依次标记有引用关系的对象, 最后将没有被标记的对象清除. 但是这种算法会带来大量的空间碎片,导致需要分配一个较大连续空间时容易触发 FGC .

“标记-整理算法”

该算法类似计算机的磁盘整理,首先会从GC Roots 触发标记存活的对象,然后将存活对象整理到内存空间的一端,形成了连续的已使用空间,最后把已使用空间之外的部分全部清理掉,这样就不会产生空间碎片的问题.

"Mark - Copy " 算法

为了能够并行地标记和整理将空间分为两块,每次只激活其中一块,垃圾回收时只需要把存活的对象复制到另一块未激活空间上,将未激活空间标记为已激活,将已激活空间标记为未激活,然后清除原空间中的原对象. 堆内存空间氛围较大的 Eden 和两块较小的 Survivor, 每次只使用Eden 和 Survivor 区的一块,这种情形下的"Mark- Copy"减少了内存空间的浪费,"Mark-Copy"现作为主流的YGC算法进行新生代的垃圾回收.</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值