垃圾回收算法(内存回收的方法论)

Posted Carl_Hugo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾回收算法(内存回收的方法论)相关的知识,希望对你有一定的参考价值。

1.引用计数法

对对象设置一个引用计数器,每增加一个变量对它的引用计数器就加1。每减少一个引用,计数器就减1。当对象的引用计数器变为0时,该对象才会被回收。
缺陷:1.频繁的对引用进行加减操作会增加系统的消耗2.会产生循环引用导致内存泄漏。

2.标记清除法

将垃圾回收分成两个阶段:标记阶段和清除阶段。通过标记从根节点开始可达的对象,未被标记的就是未被引用的垃圾对象。清除阶段是清除未被标记的对象。
缺陷:产生大量的内存碎片。

3.标记压缩清除法(JAVA的中老年代)

将垃圾回收分为三个阶段:标记,压缩,清除。在标记阶段后,将这些被标记的对象集中放到一起,确定开始和结束地址,再清除。这样不会产生碎片。
缺陷:标记过多的话损耗可能比较大。压缩阶段也占用了系统的资源。

4.复制算法(JAVA的新生代中使用)

将内存空间分成两块,同一时刻只使用一块。在垃圾回收时,将正在使用的内存中存活的对象复制到未使用的内存中,然后清除正在使用的内存块中的所有对象。然后将未使用的内存变为正在使用的内存块,将已经使用的内存块变成未使用的内存块。
缺陷:如果存活对象比较多的话,算法的效率比较差。并且这样会使内存的空间折半,但是不会产生内存碎片。

以上是关于垃圾回收算法(内存回收的方法论)的主要内容,如果未能解决你的问题,请参考以下文章

Java入门系列垃圾回收

深入理解GC垃圾回收机制

垃圾收集器与内存分配策略

常用垃圾回收算法

「JVM基础」——垃圾回收基础(GC相关)

垃圾回收算法(内存回收的方法论)