码迷,mamicode.com
首页 > 编程语言 > 详细

垃圾收集算法学习

时间:2015-01-09 18:42:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

 前言:作为学习java虚拟机的基础,垃圾算法必须了解其实现原理。

 1、标记-清除算法 ,最基础的算法,之所以说基础,所有的算法是在它基础上改进,它分为标记和清楚两个部分,首先标记,对所有的可回收对象标记一下,然后回收 。

两个步骤效率都很低。最大的缺点是。清除后产生很多不连续的碎片,如果一个大对象,进入内存,则不能被分配,造成再一次垃圾回收。

 2、复制算法,为了避免这种不连续的碎片,采用了分区。分为三个区,edon, from survivor ,to survivor ,新生的对象一开始全被分配到edon 区 。from suivivor,存活的上次回收后还没达到能进入老年代的对象(有个计数器,一个对象默认被使用15 次进入老年代,当然大对象直接进入老年代),当内存满了,促发垃圾回收,这里的垃圾回收是minor GC,会把edon 区 和from survivor区 的存活的对象全部复制到了to survivor ,当然,回收之后,from suivivor 和to survivor名称就对换了。之所以这样做我个人认为survivor上有个计数器用于记录对象的使用次数一般的默认edon和survivor比例是8:1.edon区加两个survivor区之和为新生代,这种算法保证每次新生代能使用的内存为虚拟机配置的百分之90%。当survivor空间不够时会通过内存担保机制直接进入老年代,并且,当垃圾回收的时候to survivor不够,即 没有达到15 次在新生代的对象和 from survivor 区存活的对象大于to survivor区最大内存,也会被分配到老年代。

3、标记-整理算法 , 把 所有的还在使用的对象标记和全放到一端,然后清除,保证不会出现内存不连续。

技术分享

   
   

 4、分代收集算法,这个算法是根据对象的存活周期把内存分为几块,一般是新生代,老年代。新生代对象存活率短,用复制算法。老年代用标记-清除,标记-整理算法

垃圾收集算法学习

标签:

原文地址:http://www.cnblogs.com/zgghb/p/4213726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!