JVM虚拟机

1.垃圾回收算法分类

算法一:引用计数法。

       这个方法是最经典点的一种方法。具体是对于对象设置一个引用计数器,每增加一个变 量对它的引用,引用计数器就会加 1,没减少一个变量的引用,引用计数器就会减 1,只有当对象的引用计数器变成 0 时,该对象才会被回收。可见这个算法很简单,但是简单往往会存在很多问题,这里我列举最明显的两个问题。
       一是采用这种方法后,每次在增加变量引用和减少引用时都要进行加法或减法操作,如 果频繁操作对象的话,在一定程度上增加的系统的消耗。
       二是这种方法无法处理循环引用的情况。再解释下什么是循环引用,假设有两个对象 A和 B,A 中引用了 B 对象,并且 B 中也引用了 A 对象,那么这时两个对象的引用计数器都不为 0,但是由于存在相互引用导致无法垃圾回收 A和 B,导致内存泄漏。

10.1.2算法二:标记清除法

       这个方法是将垃圾回收分成了两个阶段:标记阶段和清除阶段。

  1. 在标记阶段,通过跟对象,标记所有从跟节点开始的可达的对象,那么未标记的对象就 是未被引用的垃圾对象。
  2. 在清除阶段,清除掉所以的未被标记的对象。

       这个方法的缺点是,垃圾回收后可能存在大量的磁盘碎片,准确的说是内存碎片。因为对象所占用的 地址空间是固定的。对于这个算法还有改进的算法,就是我后面要说的算法三。

算法三:标记压缩清除法(Java 中老年代采用)。
       在算法二的基础上做了一个改进,可以说这个算法分为三个阶段:标记阶段,压缩阶段, 清除阶段。标记阶段和清除阶段不变,只不过增加了一个压缩阶段,就是在做完标记阶段后,

  &nbs

你可能感兴趣的:(【大数据面试宝典】)