java虚拟机垃圾回收算法

来源:互联网 发布:mac du max depth 编辑:程序博客网 时间:2024/04/28 10:19

1.引用计数法
2.标记清除法
3.标记压缩法
4.复制法
5.分代法
6.分区法

什么是垃圾回收:

垃圾回收:Garbage collection 简称GC    简单的说垃圾回收就是将不用的对象所占用的内存回收在java虚拟机中垃圾回收是自动的

1.引用计数法

 引用计数:对于一个A对象,只要有一个对象引用引用它,A对象引用计数就加1 缺点:     1.会产生循环引用(如A,B对象都没有被使用,需要被回收,但是A引用         了B,B也引用了A,这样就导致A,B不能被回收)     2.每次对象引用,对象就会加1或减1,会影响性能

2.标记清除法

标记清除:分为标记和清除两个阶段。它有根节点,相当于链表头,标记阶段:    从根节点可以到达的对象就标记,没有被标记的对象就是垃圾对象,清除阶段:    清除哪些没有被标记的对象    坏处:会产生空间碎片    图一:

这里写图片描述

3.标记压缩法

标记压缩法:在标记清除法上加了一个压缩,什么是压缩?就是在清除时将标记的对象放在一个连续的区域在图一的基础上:

这里写图片描述

4.复制法

    赋值算法相当于将一块内存分为两块只是使用一块,在垃圾回收时将存活的对象直接复制到另外一块中,代价内存折半了,适用于存活对象少,垃圾对象多的场景

这里写图片描述

5.分代法

    分代就是:根据对象的特点将内存分为不同的区,不同的区使用不同的回收算法一般分为:新生代和老年代,新生代使用复制算法,老年代使用标记压缩或标记清除    为了提高回收效率:会使用一个卡表(Card Table)数据结构,是比特集合表示为一个区域(一般是4k大小)的老年代是否持有新生代的引用

这里写图片描述

6.分区法

分区方法:将堆内存分为连续不同的小区间,每一个小区间独立使用,回收。可以控制一次回收多少个区,减少GC

这里写图片描述

原创粉丝点击