我是靠谱客的博主 辛勤身影,最近开发中收集的这篇文章主要介绍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 分代收集算法

最后

以上就是辛勤身影为你收集整理的Garbage Collection 垃圾收集的全部内容,希望文章能够帮你解决Garbage Collection 垃圾收集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部