Java垃圾收集算法
来源:互联网 发布:我的心时刻牵挂着网络 编辑:程序博客网 时间:2024/05/01 14:35
标记-清除算法
算法分为”标记“和”清除“两个阶段。首先标记处所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象,标记过程通过为上一篇中描述的根搜索算法完成。(后续的收集算法都是基于这种算法改进而来)
主要缺陷:1. 效率问题,标记和清除过程效率都不高。
2. 空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致之后程序分配大对象时无法找到足够空间的内存,从而提前触发下一次垃圾收集。
复制算法
复制算法改进了”标记-清除算法“中的效率问题,它可将内存按容量划分为大小相等的两块,每次只是用其中的一块。而当这一块用完了,就将还存活着的对象复制到另一块去,然后将这一块的内存空间完全清除掉。这种算法的代价是将内存缩小为原来的一般,代价太高了点。
现在商业虚拟机中都采用这种回收算法来收集新生代。基于新生代对象的生命周期短暂,并不需要按1:1来划分内存空间,而是将内存划分为一块较大的Eden空间和两块较小的Survivor空间。每次使用Eden和其中的一块Survivor,回收时,将Eden和Survivor中还存活着的对象一次性拷贝到另一块Survivor中,最后清理掉Eden和使用过的Survivor的空间。
复制收集算法在存活率较高时要执行较多的复制操作,效率会降低。
标记-整理算法
让所有存活的对象都向一端移,然后直接清理掉边界以外的对象。示意图:
分代收集算法
根据对象的存活周期不同,将内存划分为几块。一般是将Java堆分为新生代和老生代,这样就可以根据各个年龄的特点采用最合适的收集算法。
- java垃圾收集算法
- java垃圾收集算法
- java垃圾收集算法
- java垃圾收集算法
- java垃圾收集算法
- Java垃圾收集算法
- Java垃圾收集算法
- java 垃圾收集算法
- Java垃圾收集算法
- Java垃圾收集算法
- Java垃圾收集算法
- Java垃圾收集算法
- 垃圾收集算法、垃圾回收算法、java垃圾收集器
- java垃圾收集算法(转)
- 详解Java垃圾收集算法
- java垃圾收集秘密算法
- Java虚拟机 - 垃圾收集算法
- java jvm 垃圾收集算法
- 关于两个Fragment布局报错Error inflating class fragment的解决方法
- spring 自定义注解的注册与扫描
- 安装Django和mysqldb(windows环境)
- 类型安全:方法add(Object)属于原始类型List。应该将对通用类型List<E>的引用参数化
- 01迷宫(二)
- Java垃圾收集算法
- 局部图像特征描述概述
- Servlet(七)生成验证码
- [译]没有jquery的动画
- MongoDB(三)——增删改查
- 个人官网第一次升级顺利完成
- 大整数存储——求13的100次幂
- 活动感悟
- 润乾V4部署时的授权问题