java的垃圾回收器

2017-03-14     浏览次数:

  java分配对象的方式:每分配一个对象,堆指针就会往前走一个单元,不用去管销毁对象的过程,每当内存不够用或者低于某个我们配置的值时,java才会启动垃圾回收机制。所以对象的存储空间的分配是相对快的。
  
  java垃圾回收器就是要回收这些无用的对象的。那么怎么才能判断某个对象无用需要被回收了呢?    答案就是当堆栈或者静态存储区没有对这个对象的引用时,这个对象就是垃圾就可以被回收掉啦。有两种方式可以知道这个对象有木有被引用,第一种:遍历堆上的所有对象找引用。第二种:遍历堆栈和静态存储区中的引用找对象。第一种叫做引用计数法,每当这个对象有引用计数加 1, 当引用消失的时候则计数器减 1,这样做是有缺陷的,就是在循环的时候可能会出现某个对象应该被回收但是计数大于 0 的情况。
  
  java中用的是第二种方法。在这种方法下,java虚拟机采用了一种自适应的垃圾回收技术。java有两种方式:
  
  1.  停止-拷贝方式:先暂停程序的运行,将存活对象从堆上复制到另一个新堆上,这样就保证新堆是一个对象挨着一个对,这样就能够使得给java对象分配存储空间时堆指针只需要一直往前滑动。
  
  2. 标记-扫清方式:它的思路同样是从堆栈和存储空间出发,遍历所有的引用,每找到一个对象,就会给这个对象一标记,在这个过程中不回收任何对象。在遍历完成后,就会删除垃圾对象,其他对象不进行复制,这样对象的存储就是不连续的啦,然后垃圾回收器重新整理对象,使他们成为连续的。
  
  java自适应技术无非就是java虚拟机对系统的垃圾情况进行监控,适时的调整用停止-拷贝方式还是标记-扫清方式来进行处理。达到提高系统效率的目的。
*转载请注明出处,更多资料尽在 吾爱编程
返回吾爱编程首页