没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
哪些垃圾是需要回收的?
有哪些重要的垃圾回收算法?
垃圾回收的具体流程是怎样的?
问题1:哪些是需要回收的?
判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。
引用计数算法
引用计数算法通过记录对象被引用的次数从而判断该对象的重要程度。如果该对象被其它对象引用,
则它的引用计数加一,如果删除对该对象的引用,那么它的引用计数就减一,当该对象的引用计数为0时,
那么该对象就会被回收。
引用计数存在什么问题呢?当有两个对象相互引用时,由于它们互相引用对方所以计数都不为零,这
就会导致这两个对象无法回收。所以,Java虚拟机采用的是另一种方法来判断对象是否存活,它就是可达
性分析算法。
可达性分析算法
可达性分析算法首先确定一系列
根
对
象
(
GC Roots
)
,并以根对象为起点根据对象之间的引用关系搜
索出一条
引
用
链
(
Reference Chain
)
,在引用链的对象就存活,而不在引用链的对象就认定为可回收对
象。
有一个比喻十分恰当:可达性分析算法就好比是在清洗葡萄串,我们可以从一根枝提起一大串葡萄,
他们就像一串引用链,而没有和引用链相连的对象就像是散落在池子里的葡萄,可以回收。
哪些对象可以作为根对象呢?
虚
拟
机
栈
中
引
用
的
对
象
(正在运行的方法使用到的变量、参数等)
方
法
区
中
类
静
态
属
性
引
用
的
对
象
(static关键字声明的字段)
方
法
区
中
常
量
引
用
的
对
象
,(也就是final关键字声明的字段)
本
地
方
法
栈
中
引
用
的
对
象
(native方法)
Java
虚
拟
机
内
部
的
引
用
。
(系统内部的东西当然能作为根了)
问题2:有哪些重要的垃圾回收算法?
1、标记-清除算法
标记-清除法是最基本的一种垃圾回收算法,总的来说分为两步:
标记:标记所有需要回收的对象(灰色),也就是在做垃圾的判定。
清除:将标记为灰色的部分,清除掉。
需要注意的是:所谓的清除,并不需要真正地把整个内存的字节进行清零操作,只需要把空闲对象的
起
始
结
束
地址
记录下来放入
空
闲
列
表
里,表示这段内存是空闲的就行。
资源评论
Coding-Ever
- 粉丝: 49
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功