Java中垃圾收集的方法
来源:互联网 发布:烤鸡腿 知乎 编辑:程序博客网 时间:2024/05/22 03:23
- 标记—清除:这是垃圾收集算法中最基础的,根据名字就可以知道,它的思想就是标记哪些要被回收的对象,然后统一回收。这种方法很简单,但是会有两个主要问题:1.效率不高,标记和清除的效率都很低;2.会产生大量不连续的内存碎片,导致以后程序在分配较大的对象时,由于没有充足的连续内存而提前触发一次GC动作。
- 复制算法:为了解决效率问题,复制算法将可用内存按容量划分为相等的两部分,然后每次只使用其中的一块,当一块内存用完时,就将还存活的对象复制到第二块内存上,然后一次性清楚完第一块内存,再将第二块上的对象复制到第一块。但是这种方式,内存的代价太高,每次基本上都要浪费一般的内存。
于是将该算法进行了改进,内存区域不再是按照1:1去划分,而是将内存划分为8:1:1三部分,较大那份内存交Eden区,其余是两块较小的内存区叫Survior区。每次都会优先使用Eden区,若Eden区满,就将对象复制到第二块内存区上,然后清除Eden区,如果此时存活的对象太多,以至于Survivor不够时,会将这些对象通过分配担保机制复制到老年代中。(java堆又分为新生代和老年代) - 标记—整理:该算法主要是为了解决标记-清除,产生大量内存碎片的问题;当对象存活率较高时,也解决了复制算法的效率问题。它的不同之处就是在清除对象的时候现将可回收对象移动到一端,然后清除掉端边界以外的对象,这样就不会产生内存碎片了。
- 分代收集:现在的虚拟机垃圾收集大多采用这种方式,它根据对象的生存周期,将堆分为新生代和老年代。在新生代中,由于对象生存期短,每次回收都会有大量对象死去,那么这时就采用复制算法。老年代里的对象存活率较高,没有额外的空间进行分配担保,所以可以使用标记-整理 或者 标记-清除。
阅读全文
0 0
- Java中垃圾收集的方法
- java垃圾收集方法
- java垃圾收集的finalize()方法
- java中垃圾收集器的重点
- JAVA垃圾收集器finalize()方法的一些总结
- Java垃圾收集器与类的finalize()方法总结
- Java的垃圾收集器
- Java的垃圾收集机制
- java中各种垃圾收集器的原理
- Tomcat中Java垃圾收集调优
- Tomcat中Java垃圾收集调优
- Tomcat中Java垃圾收集调优
- Tomcat中Java垃圾收集调优
- 【Java】Java垃圾收集
- 谈谈Java语言的垃圾收集器
- 优化 Java 垃圾收集的性能
- Java的垃圾收集器(GC)
- Java垃圾收集的不足处理
- PS 图形的变换
- 010 相关性与线性表示性质
- 不只降价,阿里云还发布了量子通信、专有云和新数据中心 | 云栖2017深圳
- 供应链债主变股东,乐视发布两款电视新品,计划今年扭亏为盈
- JSF标签注意事项
- Java中垃圾收集的方法
- 南大Mooc计算机体系基础--链接概述和目标文件格式
- 大咖汇聚AI狂欢节 360首席科学家颜水成解析中国AI发展
- 快仓获近2亿元B轮融资,由菜鸟网络、软银中国投资
- 俊美时尚混搭极致拍照 vivo Xplay6美得不简单
- 摩拜入驻微信九宫格 行业到了巨头间较量的时间点
- C/C++数组的使用,及遇到的问题
- class.getResource的解析
- [Android Studio]Building 'xxx' Gradle project info问题