jvm - 垃圾回收
来源:互联网 发布:探究小车速度实验数据 编辑:程序博客网 时间:2024/06/11 11:11
1 什么是垃圾收集?垃圾收集相对于手动释放的缺点是什么?
就是自动释放不再被程序使用的对象的过程。
缺点是不能精确控制回收的时机、和回收时间的长度。
2 为什么需要垃圾收集?
(1)回收对象
(2)整理碎片
(3)提高程序员生产率,减少犯错的机会。
3 垃圾回收算法
区分活动对象和垃圾的两种基本方法:引用计数和跟踪;
4 根对象包括:
(1)局部变量中的对象的引用操作数栈中的对象引用,类变量中的对象引用。
(2)被加载到类的常量池中的对象引用 -- 字符串 比如类名、超类型名、超接口的名字,字段名、字段特征签名,方法名和方法特征签名。
(3)传递到本地方法,没有被本地方法释放的对象引用。
(4)被垃圾收集器使用的存放在运行时数据区中堆内的数据。
5 引用计数收集器
好处:可以很快执行,利于程序不能被长时间打断的环境使用
坏处:无法处理循环引用
6 跟踪收集器(标记-清除):追踪从根节点开始的对象引用。
(1)标记阶段:遍历引用树,标记每一个遇到的对象。
(2)清除阶段:释放未被标记的对象。
7 压缩收集器
标记-清除 收集器常使用的方法是 压缩和拷贝:都是快速移动对象来减少碎片。
压缩收集器 : 把活动对象从堆的一端越过堆的空闲区滑动到堆的另一端。
8 拷贝收集器(停止并拷贝)
把所有的活动对象移动到一个新的区域,再拷贝过程中,它们被紧挨着布置,消除原来存在于间隙间的碎片。
9 按代的垃圾收集器 产生的原因
(1)大部分程序的创建的大部分对象都具有很短的生命周期
(2)大多数程序都创建一些具有非常长生命周期的对象
10 自适应收集器
(1)监视程序执行情况,适用不同算法
(2)把堆分成子堆,适用不同算法
11 火车算法 的目的是在成熟对象空间提供限定时间的渐进收集。
破坏性垃圾收集:垃圾收集的停顿时间达到了用户可体验/程序(或不可容忍)的程度
渐进式垃圾收集:不是试图一次性发现并回收所有不可回收的对象,而是每一次发现并回收一部分。
(1)车厢、火车、火车站
年老带称作火车站
火车 按照创建它们的顺序分配编号
车厢 固定大小的内存块,算法每次在一个单独的块中执行
算法每次对号码最小的那个车厢进行收集:第一次1.1,然后1.2;当收集了火车1的最后一节车厢后,收集2.1.....
对象从年轻带进入年老带的方式有两种:打包成车厢挂在除号码最小的回车尾部;作为一列火车进站
(2)车厢收集
1 检查最小号火车的对象没有被该火车外的对象引用,那么整个火车作为垃圾丢弃。
2 最小号火车不全是垃圾的时候,注意力集中在最小号车厢上:
2.1 如果车厢中有一个对象被来自未成熟对象的引用,这个对象移动到同火车的其他车厢;
2.2 如果一个对象被成熟区的其他火车的对象引用,这个被引用对象移动到引用对象所在的火车中;然后扫描移动的对象,检查它对原来车厢的引用,移动在原车厢中被引用的对象;不断移动,直到没有任何对象指向被收集的车厢。如果收集对象的火车没有空间了,会新增一节车厢。
2.3 如果车厢的对象没有来自未成熟区的引用,也没有来自其他火车中对象的引用,那么只有来自同火车其他车厢对象的引用:将被引用的对象移动到火车尾部,扫描该被移动的对象,如果引用了被收集车厢的对象,将被引用的对象移动到火车尾部。直到被收集车厢没有外部对象引用。释放最小号火车的最小号车厢。
记忆集合:包含了一节车厢或者一列火车包含的外部对象对内部对象的引用。
流行对象:具有好多外部连接的对象。
12 终结
(1)垃圾收集器必须检查所有不再被引用的对象是否存在finalize()方法。
(2)执行finalize方法,并标记对象执行过finalize方法了。
(3)第二次扫描:从根节点开始再次扫描不再被引用的对象,因为终结方法可能会“复活”某些不再被引用的对象。
(4)释放两次扫描都不再被引用的对象。
13 对象可触及性的生命周期
引用对象:封装了指向其他对象的连接,被指向的对象称为引用目标。
强引用:强引用和较弱引用的差别在于,强引用禁止垃圾收集,较弱引用不禁止垃圾收集。
软引用:
弱引用:
影子引用:
对象可触及性的六种状态
强可触及:对象从根节点开始不经过任何引用对象就可以搜索到。
软可触及:对象不是强可触及的,从根节点开始通过一个或多个软引用对象触及。
弱可触及:对象不是强可触及的,也不是弱可触及的,从根节点开始通过一个或多个弱引用对象触及。
可复活的:对象不是强可触及、软可触及、弱可触及的,但是可以通过执行finalize方法恢复到这几种状态之一。
影子可触及的:对象不是强可触及、软可触及、弱可触及的,并且执行过finalize方法(或者没有finalize方法),垃圾收集器不会清除影子引用,只能由程序明确清除。
不可触及:已经准备好被回收。
- JVM 之垃圾回收
- jvm - 垃圾回收
- jvm垃圾回收
- JVM垃圾回收策略
- JVM 垃圾回收算法
- JVM垃圾回收
- jvm垃圾回收
- JVM垃圾回收总结
- JVM 垃圾回收算法
- JVM 垃圾回收 总结
- jvm垃圾回收原理
- JVM垃圾回收总结
- jvm垃圾回收
- jvm垃圾回收
- JVM垃圾回收机制
- JVM垃圾回收机制
- jvm垃圾回收
- JVM垃圾回收器
- 螺旋矩阵
- JAVA汉字排序
- 怎样获得免费顶级域名?
- gpio linux 实现模型
- JSF2.0中Facelets将取代JSP
- jvm - 垃圾回收
- 我到底要做什么?
- 【西欧经济史第二版】【4】第一章 导言
- Objective-C入门解读与内存管理方式
- gpio 的配置
- STL_Algorithm1: Fill, Fill_n, Generate, Generate_n
- 郁闷!!!!
- TMS320C6000 C/C++运行时环境笔记
- GVIM/VIM使用体验