网站大量收购独家精品文档,联系QQ:2885784924

Java垃圾回收概述.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。 ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java?的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。 二、垃圾回收机制中的算法   Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。   1.引用计数法(Reference Counting Collector) 1.1算法分析    引用计数 是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个变量,该变量计数设置为1。 当任何其它变量被赋值为这个对象的引用时,计数加1(a?=?b,则b引用的对象实例的计数器+1),但当一个对象实例的某个引用超过了生命周期或者被设 置为一个新值时,对象实例的引用计数器减1。任何引用计数器为0的对象实例可以被当作垃圾收集。当一个对象实例被垃圾收集时,它引用的任何对象实例的引用 计数器减1。 1.2优缺点 优点:   引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。 缺点:?   无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0. 1.3引用计数算法无法解决循环引用问题,例如: ? public?class?Main { ????public?static?void?main(String[] args) { ????????MyObject object1 =?new?MyObject(); ????????MyObject object2 =?new?MyObject(); ????????? ????????object1.object = object2; ????????object2.object = object1; ????????? ????????object1 =?null; ????????object2 =?null; ????} }   最后面两句将object1和object2赋值为null,也就是说object1和object2指向的对象已经不可能再被访问,但是由于它们互相引用对方,导致它们的引用计数器都不为0,那么垃圾收集器就永远不会回收它们。在这里,object1中拿着对object2的引用,object2中拿着对object1的引用。如果object2要被回收,前提是object1被先回收,这样才能释放对object2的引用。但是反回过来,object1要被回收的前提是object2要被先回收。当main函数退出后,垃圾回收管理可能无法回收这两个实际已经不再需要的对象。 2.tracing算法(Tracing Collector) 或?标记-清除算法(mark and sweep) 2.1根有哪些信誉好的足球投注网站算法   根有哪些信誉好的足球投注网站算法是从离散数学中的图论引入的,程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。 java中可作为GC Root的对象有   1.虚拟机栈中引用的对象(本地变量表)   2.方法区中静态属性引用的对象   3.?方法区中常量引用的对象   4.本地方法栈中引用的对象(Native对象) 2.2tracing算法的示意图    2.3标记-清除算法分析   标记-清 除算法采用从根集合进行扫描,对存活的对象对象标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,如上图所示。标记-清除算法不需要进行对象 的移动,并且仅对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于标记-清除算法直接回收不存活的对象,因此会造成内存碎片。 3.compacting算法 或?标记-整理算法 ?  标记- 整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新 对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,因此成

文档评论(0)

花仙子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档