Java虚拟机垃圾回收算法
2015-07-31 20:23
211 查看
1、标记清除算法:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。缺点是效率问题和产生大量不连续的内存碎片,导致程序后期需要分配大对象时无法找到足够的连续内存而不得不提前出发另一次垃圾收集动作。
2、复制算法:将可用内存划分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。
3、标记整理算法:让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
当前商业虚拟机的垃圾收集都采用分代收集算法:根据对象的存活周期的不同将内存划分为几块,一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法,在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用标记清理或者标记整理算法来进行回收。
2、复制算法:将可用内存划分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。
3、标记整理算法:让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
当前商业虚拟机的垃圾收集都采用分代收集算法:根据对象的存活周期的不同将内存划分为几块,一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法,在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用标记清理或者标记整理算法来进行回收。
相关文章推荐
- Java实现本地 fileCopy
- spring整合mongo报错:Timed Out While Waiting For A Server That Matches AnyServerSelector{} After 10000 Ms
- java类的特性
- Java面向对象的三大特征
- Eclipse中导入项目Js文件报错
- spring 声明式事务管理注解方式实现
- Java虚拟机七种垃圾收集器比较
- 【转自看雪】反编译apk+eclipse中动态调试smali
- spring 声明式事务管理xml方式实现
- Java 修饰符
- JAVA EE 自学路线
- JUnit4---eclipse实现java代码单元测试
- java多线程基础部分探究
- java.多线程
- java 当中的多态,面向对象,方法的重载,Final关键字
- Struts框架之文件的上传
- Java学习第4天>>面向对象1
- Error/Exception-01-hibernate(jar包冲突)--javax.persistence.OneToMany.orphanRemoval()Z异常
- java中注解的使用与实例 (二)
- Struts2中Theme与Template