码迷,mamicode.com
首页 > 编程语言 > 详细

java 垃圾回收机制

时间:2015-03-10 23:01:53      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

1. java的垃圾回收机制主要工作包括:确定哪些对象属于垃圾,回收无用的对象占用的空间,使堆中的存活对象紧密排列。

2. Java垃圾回收的算法:

  引用计数(基本不用):

    当引用指向一个对象时,该对象的引用计数器+1;

    当引用离开对象挥着被标记为null时,引用计数器-1;

    当引用计数器为0时,释放对象占用的空间。

    缺陷:如果对象间存在循环引用,可能会发生对象无法被回收的情况。

  停止-复制:

    对象发现:

      从堆栈和静态存储区出发遍历所有引用,找到引用的对象以及该对象包含的所有引用,从而找到所有活着的对象。
    处理:
      暂停程序运行,将活的对象从一个堆复制到另一个堆;
      未被复制的对象属于垃圾,被复制的对象在新的堆上顺序排列;需要修正指向被复制对象的引用;
    缺点:
      需要更多的空间(两个堆);
      对于稳定状态的程序,可能只产生很少的垃圾,这个时候“停止——复制”的比较浪费时间;

  标记——清扫:

    对象发现:

      过程类似“停止复制”,在遍历的过程中为存活的对象设置标记;

    处理:
      没有标记的对象属于垃圾,进行回收,不进行复制,可能造成内存不连续。

  分代垃圾回收机制(根据对象的生命周期进行分区域存放,不同区域采用不同的垃圾回收算法):

    年轻的对象放在年轻区域,这个区域的对象会面临频率更高的垃圾回收;
    年轻区域的对象经过若干次垃圾回收之后,如果还继续存活,机会被放入年老区,这个区域进行垃圾回收的频率比较低;
    当年老区空间不足时,会触发全局垃圾回收。

    

关于分代回收的资料:http://developer.51cto.com/art/201201/311696.htm

java 垃圾回收机制

标签:

原文地址:http://www.cnblogs.com/linxiong/p/4328479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!