JVM垃圾回收算法
来源:互联网 发布:网络黄金egd裴蕾抓了吗 编辑:程序博客网 时间:2024/06/04 19:47
列举常用的垃圾回收算法:
1.标记清除法
实现方式:
阶段一: 标记出所有需要进行垃圾回收的对象—-可达性分析算法(用来判断对象是否可以回收)
阶段二: 清除垃圾
弊端:
1.标记和清除两个阶段效率都不高
2.标记垃圾和清除垃圾这样会造成大量的内存碎片化,以致于在后面进行大对象分配的时候连续空间不足,又需要触发垃圾收集
2.复制算法
实现方式:
将堆分为大小相同的两块,在一块中进行对象的分配,当这一块的内存使用完毕之后,将其中存活的对象移动到另一块,然后再把使用过的那一块全部清理,这样效率很高,并且内存规整浪费少,并且每一次只对半块内存进行回收。
弊端:
1.实际上分配内存的时候只能够使用一半的内存,也就是内存使用缩小了一半
2.在对象存活率较高的时候 需要进行大量的复制操作 效率会变低
注意:现在商业虚拟机都采用此种算法进行垃圾回收,并且考虑到一次只使用一半,保留的内存大小太大,因为在大多数的系统中98%对象都是创建之后很快死亡,存活的需要保存的对象占了少数,所以一般来说是将内存划分为一块较大的Edne空间和两块较小的Survivor区域每次使用Edne区域和其中一块Survivor区域,当回收的时候,将Edne和Survivor中存活的对象复制到另一块Surrivior区域中,然后清理掉edne以及刚才用过的Survivor,在Java Hotsport 虚拟机中,这三个区域的比例是8:1:1 也就是说在每次用来分配对象的区域(新生代)占了整个JVM堆的90%(80%+10%),浪费的内存区域只占了10%
3.标记整理法
实现方式:
阶段一: 标记出所有需要进行垃圾回收的对象—-可达性分析算法
阶段二: 清除垃圾
阶段三: 将存活的对象向一端进行移动
阶段四: 清理掉边界以外的内存
弊端:
我们可以看到标记-整理算法是在标记-清除算法的基础之上进行了内存的整理所以相对于标记-清除算法效率较低
优势:
防止了内存的碎片化
4.分代收集算法
现在使用的商业虚拟机大多采用此种算法
将Java堆分为:
新生代:
存储新创建的对象
特点:每次垃圾回收就有大量的对象死去
采用算法:采用复制算法,只需要复制少量数据即可完成收集(因为新生代对象的存活率较低)
老年代:
存储持久使用的对象
特点:对象的存活率较高
采用算法:采用标记-清理或者标记-整理算法来进行回收
- JVM 垃圾回收算法
- JVM 垃圾回收算法
- JVM 垃圾回收算法
- JVM 垃圾回收算法
- JVM 垃圾回收算法
- JVM 垃圾回收算法
- jvm垃圾回收算法
- JVM 垃圾回收算法
- JVM垃圾回收算法
- Jvm垃圾回收算法
- JVM垃圾回收算法
- JVM垃圾回收算法
- JVM垃圾回收算法
- jvm垃圾回收算法
- JVM 垃圾回收算法
- JVM垃圾回收算法
- JVM 垃圾回收算法 .
- jvm垃圾回收算法
- HDU6092-Rikka with Subset(背包)
- 139. Word Break
- java8 函数式编程
- 自动装箱与自动拆箱
- Ajax学习
- JVM垃圾回收算法
- Magic Five CodeForces
- 例题1.12 组装电脑 Assemble UVALive
- 【Java线程】锁机制:synchronized、Lock、Condition
- 学习笔记—诊断机器学习模型
- Java电话本管理系统(数组版)
- java多线程Runnable入门实例
- json 解析报错
- 将三个数有序输出