- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入理解Java垃圾回收机制Java开发Java经验技巧.doc
深入理解Java垃圾回收机制-编程开发技术
深入理解Java垃圾回收机制
原文出处:cnblogs-Sunnier
一、垃圾回收机制的意义
Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内 存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内 存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只 有对象的引用才有“作用域”。垃圾冋收可以有效的防止内存泄露,有效的使用 空闲的内存。
ps:内存泄需是指该内存空间使用完毕Z后未回收,在不涉及复杂数据结构的一 般情况下,Java?的内存泄露表现为一个内存对彖的生命周期超出了程序需要它 的吋间长度,我们有吋也将其称为“对象游离” o
垃圾回收机制中的算法
垃圾回收机制中的算法
Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾 回收算法一般要做2件基木的事情:(1)发现无用信息对象;(2)冋收被无用 对象占用的内存空间,使该空间可被程序再次使用。
1 ?引用计数法(Reference Counting Collector)
1算法分析
引用计数是垃圾收集器屮的早期策略。在这种方法屮,堆屮每个对象实例都有一 个引用计数。当一个对象被创建时,将该对彖实例分配给一个变量,该变量计 数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1 G?二?b,则 b引用的对象实例的计数器+1),但当一个对象实例的某个引用超过了生命周期 或者被设置为一个新值时,对象实例的引用计数器减1。任何引用计数器为0的 对象实例可以被当作垃圾收集。当一个对象实例被垃圾收集时,它引用的任何对 象实例的引用计数器减1。
2优缺点
优点:
引用计数收集器可以很快的执行,交织在程序运行小。对程序需要不被长时间打 断的实时环境比较有利。
缺点: 无法检测出循环引用。如父对象有一个对了对象的引用,了对象反过來引用父对 象。这样,他们的引用计数永远不可能为0.
1.3引用计数算法无法解决循环引用问题,例如:
public class Main {
public static void main(String[] args) {
MyObject objectl = new MyObject();
MyObject object2 = new MyObject();
objectl.objcct = objcct2;
object2.object = objectl;
objectl 二 null;
object2 二 nul1;
}
}
最后面两句将objectl和object2赋值为null,也就是说objectl和object2 指向的对象已经不可能再被访问,但是rtr丁它们互相引用对方,导致它们的引用 计数器都不为0,那么垃圾收集器就永远不会冋收它们。
tracing 算法(Tracing Collector)或?标记-清除算法(mark and sweep)
1根搜索算法
GC Root
ObjDObjE
ObjD
ObjE
根搜索算法是从离散数学屮的图论引入的,程序把所冇的引用关系看作一张图, 从一个节点GC ROOT -7T-始,寻找对应的引用节点,找到这个节点以后,继续寻找 这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是 没有被引用到的节点,即无用的节点。
java中可作为GC Root的对象有
1 ?虚拟机栈屮引用的对象(本地变量表)
方法区中静态属性引用的对彖
?方法区中常量引用的对象
本地方法栈中引用的对象(Native对象)
2. 2tracing算法的示意图
空闲表根令空闲表根集合扫描整个空间并清除空闲舉
空闲表
根
令
空闲表
根集合
扫描整个空间并清除
空闲舉
2. 3标记-清除算法分析
标记-清除算法采用从根集合进行扫描,对存活的对象对象标记,标记完毕后, 再扫描整个空间中未被标记的对象,进行回收,如上图所示。标记-清除算法不需要进行对象的移动,并月?仅对不存活的对象进行处理,在存活对彖比较多的情 况下极为高效,但由于标记-清除算法直接冋收不存活的对彖,因此会造成内存 碎片。
compacting算法 或?标记-整理算法
环用 ▼空闲指针
ABC
根集合根集合翳鼬勰并清除根集合A
根集合
根集合
翳鼬勰并清除
根集合
A C
空闲指针
标记-整理算法采用标记-清除算法--样的方式进行对象的标记,但在清除吋不 同,在回收不存活的对象占用的空间后,会将所冇的存活对象往左端空闲空间移 动,并更新对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了 对彖的移动,因此成本更高,但是却解决了内存碎片的问题。在基F Compacting 算法的收集器的实现中,一般增加句柄和句柄表
您可能关注的文档
最近下载
- 2024年新教科版八年级上册物理全册教案.docx
- 《产品项目设计》课件(全).pptx VIP
- 病理科(中心)建设与配置标准.pdf VIP
- T∕CSPSTC 54-2020 -岩石隧道掘进机法技术规程.pdf VIP
- 情绪调色盘初中心理健康教育通用版.ppt VIP
- 外研版英语九上Module5 Museums 单元整体教学设计.pdf VIP
- 初级会计职称经济法基础第四章个人所得税.pptx VIP
- 2025-2030中国量子级联激光器行业市场发展趋势与前景展望战略研究报告.docx
- 中国大地财产保险股份有限公司工程机械设备保险条款.PDF VIP
- 台州市中等职业学校新设专业申报表---)-无人机 .pdf VIP
文档评论(0)