失效链接处理 |
Android 核心知识点笔?PDF 下蝲
本站整理下蝲Q?/strong>
链接Q?a target="_blank">https://pan.baidu.com/s/1mxMwi7Ul46Ue8hs6lVD3Bg
提取码:f7wz
相关截图Q?/strong>
![]()
主要内容Q?/strong>
1.1.5.1 对象存活判断
?引用计数
每个对象有一个引用计数属性,新增一个引用时计数?1Q引用释放时计数?1Q计Cؓ 0 ?/div>
可以回收。此Ҏ(gu)单,无法解决对象怺循环引用的问题?/div>
?可达性分?/div>
?GC Roots 开始向下搜索,搜烦所走过的\径称为引用链。当一个对象到 GC Roots 没有
M引用铄q时Q则证明此对象是不可用的。不可达对象?/div>
?Java 语言中,GC Roots 包括Q?/div>
?虚拟机栈中引用的对象?/div>
?Ҏ(gu)Zc静态属性实体引用的对象?/div>
?Ҏ(gu)Z帔R引用的对象?/div>
?本地Ҏ(gu)栈中 JNI 引用的对象?/div>
1.1.5.2 垃圾攉法
?标记 -清除法
“标记-清除”QMark-SweepQ算法,如它的名字一P法分ؓ“标记”?ldquo;清除”两个阶段Q首
先标记出所有需要回收的对象Q在标记完成后统一回收掉所有被标记的对象。之所以说它是
最基础的收集算法,是因为后l的攉法都是Zq种思\q对其缺点进行改q而得到的?/div>
它的主要~点有两个:一个是效率问题Q标记和清除q程的效率都不高Q另外一个是I间?/div>
题,标记清除之后会生大量不q箋的内存碎片,I间片太多可能会导_当程序在以后
的运行过E中需要分配较大对象时无法扑ֈ_的连l内存而不得不提前触发另一ơ垃圾收
集动作?/div>
?复制法
“复制”QCopyingQ的攉法Q它?yu)可用内存按定w划分为大相{的两块Q每ơ只使用?/div>
中的一块。当q一块的内存用完了,将q存zȝ的对象复制到另外一块上面,然后再把?/div>
使用q的内存I间一ơ清理掉?/div>
q样使得每次都是对其中的一块进行内存回Ӟ内存分配时也׃用考虑内存片{复杂情
况,只要Ud堆顶指针Q按序分配内存卛_Q实现简单,q行高效。只是这U算法的代h(hun)
是将内存~小为原来的一半,持箋复制长生存期的对象则D效率降低?/div>
?标记-整理法
复制攉法在对象存zȝ较高时就要执行较多的复制操作Q效率将会变低。更关键的是Q?/div>
如果不想费 50%的空_需要有额外的空间进行分配担保,以应对被使用的内存中所?/div>
对象?100%存活的极端情况,所以在老年代一般不能直接选用q种法?/div>
Ҏ(gu)老年代的特点Q有人提Z另外一U?ldquo;标记-整理”QMark-CompactQ算法,标记q程仍然
?ldquo;标记-清除”法一P但后l步骤不是直接对可回收对象进行清理,而是让所有存zȝ?/div>
象都向一端移动,然后直接清理掉端边界以外的内存?/div>
?分代攉法
GC 分代的基本假设:l大部分对象的生命周期都非常短暂Q存zL间短?/div>
“分代攉”QGenerational CollectionQ算法,?Java 堆分为新生代和老年代,q样可以根
据各个年代的特点采用最适当的收集算法。在新生代中Q每ơ垃圾收集时都发现有大批对象
dQ只有少量存z,那就选用复制法Q只需要付出少量存zd象的复制成本可以完?/div>
攉。而老年代中因ؓ对象存活率高、没有额外空间对它进行分配担保,必M?ldquo;标记- 清理”?ldquo;标记-整理”法来进行回收?/div>
1.1.5.3 垃圾攉?/div>
?CMS 攉?/div>
CMSQConcurrent Mark SweepQ收集器是一U以获取最短回收停时间ؓ目标
的收集器。目前很大一部分?Java 应用都集中在互联|站?B/S pȝ的服务端
上,q类应用其重视服务的响应速度Q希望系l停时间最短,以给用户?/div>
来较好的体验?/div>
从名字(包含“Mark Sweep”Q上可以看?CMS 攉器是Z“标记-清除”法实现的,它的
q作q程相对于前面几U收集器来说要更复杂一些,整个q程分ؓ 4 个步骤,包括Q?/div>
?初始标记QCMS initial markQ??q发标记QCMS concurrent markQ??重新标记QCMS remarkQ??q发清除QCMS concurrent sweepQ?/div>
其中初始标记、重新标记这两个步骤仍然需?ldquo;Stop The World”。初始标C仅只是标C?/div>
GC Roots 能直接关联到的对象,速度很快Qƈ发标记阶D就是进?GC Roots Tracing 的过E,
而重新标记阶D则是ؓ了修正ƈ发标记期_因用L序l运作而导致标C生变动的?/div>
一部分对象的标记记录,q个阶段的停时间一般会比初始标记阶D늨长一些,但远比ƈ?/div>
标记的时间短?/div>
׃整个q程中耗时最长的q发标记和ƈ发清除过E中Q收集器U程都可以与用户U程一?/div>
工作Q所以M上来_CMS 攉器的内存回收q程是与用户U程一起ƈ发地执行。老年?/div>
攉器(新生代?ParNewQ?br />
|