java编程

java垃圾收集基本知识

字号+ 作者:风潇潇 来源:原创 2016-08-01 19:07 我要评论( )

这里说一下java垃圾收集的基本知识,以方便以后解决内存溢出的问题

    为什么要进行垃圾收集?
    因为程序运行需要内存,不可能要一段程序临时拥有一块内存之后再就不用了,那程序就没法运行下去了,更明确的说法是:在Java里,当一个对象不再被程序所引用时,它所使用的堆控件可以被回收。但是java不像c++那样需要我们手动的去释放内存,java虚拟机把这一任务交给了垃圾收集器(GC)

   怎么进行垃圾检测
   首先,得有方法知道什么样的对象是程序不要的对象了,是废弃的对象了。废弃对象是指不在被引用的对象。有以下几种方法
   引用计数:引用计数是指堆中每一个对象都有一个引用计数。当一个对象被创建了,并且指向改对象的引用被分配一个变量,这个对象的引用计数被置为1。倍设置一个新的值时,对象的引用计数减1。任何引用计数为0的对象可以被当做垃圾收集。这种方法的好处是,引用计数收集器可以很快地执行,这个特性对于程序不能被长时间打断的事实环境很有利。坏处就是,引用计数器无法检测出循环(即父对象有个对子对象的引用,子对象又反过来引用父对象。这些对象永远都不可能计数为0,,就算它们已经无法被执行程序的跟对象可触及)。另外还会带来额外的开销

   跟踪收集:跟踪收集器子从根节点开始的对象引用图。在追踪过程中遇到的对象以某种方式打赏标记。总的来说,要么在对象本身设置标记,要么用一个独立的位图来设置标记。当追踪结束时,未被标记的对象就知道是无法触及的,从而可以被收集。基本的追踪算法被称作“标记并清除”。在标记阶段,垃圾收集器遍历引用树,标记每一个遇到的对象。在清除阶段,未被标记的对象被释放了,使用的内存被返回到正在执行的程序。 
  

转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • json解析与java对象序列化成json

    json解析与java对象序列化成json

    2017-09-07 11:47

  • java动态绑定以及invokespecial指令

    java动态绑定以及invokespecial指令

    2017-06-19 14:57

  • java LinkedList数据结构

    java LinkedList数据结构

    2017-03-30 15:33

  • Jvm虚拟机学习一些基本概念

    Jvm虚拟机学习一些基本概念

    2017-05-18 11:12

网友点评
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)