JVM虚拟机
Posted 北京小辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM虚拟机相关的知识,希望对你有一定的参考价值。
1.垃圾回收算法分类
算法一:引用计数法。
这个方法是最经典点的一种方法。具体是对于对象设置一个引用计数器,每增加一个变 量对它的引用,引用计数器就会加 1,没减少一个变量的引用,引用计数器就会减 1,只有当对象的引用计数器变成 0 时,该对象才会被回收。可见这个算法很简单,但是简单往往会存在很多问题,这里我列举最明显的两个问题。
一是采用这种方法后,每次在增加变量引用和减少引用时都要进行加法或减法操作,如 果频繁操作对象的话,在一定程度上增加的系统的消耗。
二是这种方法无法处理循环引用的情况。再解释下什么是循环引用,假设有两个对象 A和 B,A 中引用了 B 对象,并且 B 中也引用了 A 对象,那么这时两个对象的引用计数器都不为 0,但是由于存在相互引用导致无法垃圾回收 A和 B,导致内存泄漏。
10.1.2算法二:标记清除法
这个方法是将垃圾回收分成了两个阶段:标记阶段和清除阶段。
- 在标记阶段,通过跟对象,标记所有从跟节点开始的可达的对象,那么未标记的对象就 是未被引用的垃圾对象。
- 在清除阶段,清除掉所以的未被标记的对象。
这个方法的缺点是,垃圾回收后可能存在大量的磁盘碎片,准确的说是内存碎片。因为对象所占用的 地址空间是固定的。对于这个算法还有改进的算法,就是我后面要说的算法三。
算法三:标记压缩清除法(Java 中老年代采用)。
在算法二
以上是关于JVM虚拟机的主要内容,如果未能解决你的问题,请参考以下文章