Garbage Collection 垃圾收集

1 概述

1.1 GC需要思考的事情
  1. 哪些内存需要回收?
  2. 什么时候回收?
  3. 如何回收?
1.2 哪些内存

程序计数器、虚拟机栈、本地方法栈:
随线程而生,随线程而灭
内存会随着回收

Java堆、方法区:
内存的分配和回收是动态的
运行期间才会知道要创建哪些对象,才会分配内存
垃圾收集器所关注的内存

2 对象存活状态

垃圾收集器对堆回收前,先确定这些对象中谁“活着”,谁已“死去”

2.1 引用计数法

对象添加引用计数器
被引用——>计数器值+1
引用失效——>计数器值-1

2.2 可达性分析算法

在这里插入图片描述
起始点:GC Roots 的对象
引用链:从起始点开始向下搜索,其走过的路径
对象不可达:从当前对象到GC Roots没有任何一条引用链相连
回收:对象不可达即可回收

引用有哪些

引用,干什么的?
判断对象是否存活都与“引用”有关
引用的分类?
强、软、弱、虚
强引用:
程序代码普遍存在的
强引用在,则垃圾回收器永远不回收其对象
软引用:
有用但非必须的
内存溢出异常前,可把这些对象回收
弱引用:
非必须对象
下一次垃圾收集发生,即被回收
虚引用:
幽灵引用,幻影引用,最弱的引用关系
不会对对象本身的生存时间构成影响,无法通过虚引用创建对象(也即对象不会仅仅有虚引用)
唯一目的,仅仅是对象被回收时得到一个系统通知
实现,PhantomReference类来实现虚引用

真正的死亡

3 垃圾收集算法

3.1 标记-清除算法
3.2 复制算法
3.3 标记-整理算法
3.4 分代收集算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值