Java的GC机制

来源:互联网 发布:淘宝弹窗推广有用吗 编辑:程序博客网 时间:2024/06/08 09:08

    首先让我们说明什么是GC,即是”Garbage  Collection”,垃圾回收的意思。由系统进行管理,释放不再使用的内存。

    Java中存在的内存泄漏有两种情况。一是在堆中分配的内存,在没有将其释放掉的时候,就将能访问该内存的方式都删掉;另一种则是在内存对象已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入。得到了很好的解决。所以,java中的内存泄漏,主要指第二种情况。

  Java垃圾回收的几种机制

  标记-清除算法(Mark-Sweep)


        从根节点开始标记所有可达对象,其余没标记的即为垃圾对象,执行清除。但回收后的空间是不连续的

  复制算法(copying)

      将内存分成两块,每次只使用其中一块,垃圾回收时,将标记的对象拷贝到另外一块中,然后完全清除原来使用的那块内存。复制后的空间是连续的。复制算法适用于新生代,因为垃圾对象多于存活对象,复制算法更高效。 

 标记-压缩算法(Mark-compact)

       适合用于老年代的算法(存活对象多于垃圾对象)。标记后不复制,而是将存活对象压缩到内存的一端,然后清理边界外的所有对象。 

增量收集器

      增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。

分代收集器

      这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。虚拟机生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。



0 0
原创粉丝点击