JVM垃圾回收算法
2016-08-26 21:10
148 查看
一、标记清除法
顾名思义,分为标记和清除两个步骤。
首先标记所有需要回收的对象,在标记后统一回收所有被标记的对象
如下图,缺点有两个:效率问题,标记和清楚的效率都不高 空间问题:标记清楚之后产生大量不连续的空间
二、复制算法
直接按内存的容量,将内存空间一分为二,每次都只用其中的一半,另一半保留。放一块内存用完之后,直接将还存活的对象复制到另一块内存上,再把原来的空间一次性全部清理。做保留区,之后就只分配另一半的内存
如下图:缺点十分明显,直接牺牲了一半的内存空间,优点也十分明显,一次性清理,没有内存碎片(现在商业虚拟机都采用这种算法来回收新生代)
IBM专门研究表明,新生代的对象98%是朝生夕死的。所以并不需要按照1:1的比例来划分,而是将内存分为一块较大的Eden和两块较小的Survivor空间,每次只使用其中的一块Survivor和Eden。每次回收的时候将已使用的Survivor和Eden存活的对象一次性拷贝到另一块Survivor上,最后清除Eden和刚刚用过的Survivor HotSpot虚拟机默认Eden与Survivor之比是8:1,每次可以90%,仅仅只浪费了10%。当然,不可能保证每次年轻代都只剩10%以下的对象,所以还需要老年代来进行分配担保。
三、标记-整理算法
复制收集算法在存活率比较高的情况下,就要执行较多的复制操作,效率会变低。如果不想牺牲50的空间,还得要有额外的担保空间进行分配,以应对被使用对象100%存活的情况。所以老年代一般不采用这种算法,所以有人提出了标记整理算法。
四、分代收集算法
当前商量虚拟机都采用这种算法,当然,这种算法并没有什么新的思想,只是根据java对象存活周期的不同,划分了几块。一般是把java堆分为年轻代和老年代。
年轻代每次回收都有大批量的对象死去,所以采用复制算法
老年代由于没有多余的空间进行分配担保,而且对象存活率又比较高,所有一般采用标记整理算法,或者标记清除算法
顾名思义,分为标记和清除两个步骤。
首先标记所有需要回收的对象,在标记后统一回收所有被标记的对象
如下图,缺点有两个:效率问题,标记和清楚的效率都不高 空间问题:标记清楚之后产生大量不连续的空间
二、复制算法
直接按内存的容量,将内存空间一分为二,每次都只用其中的一半,另一半保留。放一块内存用完之后,直接将还存活的对象复制到另一块内存上,再把原来的空间一次性全部清理。做保留区,之后就只分配另一半的内存
如下图:缺点十分明显,直接牺牲了一半的内存空间,优点也十分明显,一次性清理,没有内存碎片(现在商业虚拟机都采用这种算法来回收新生代)
IBM专门研究表明,新生代的对象98%是朝生夕死的。所以并不需要按照1:1的比例来划分,而是将内存分为一块较大的Eden和两块较小的Survivor空间,每次只使用其中的一块Survivor和Eden。每次回收的时候将已使用的Survivor和Eden存活的对象一次性拷贝到另一块Survivor上,最后清除Eden和刚刚用过的Survivor HotSpot虚拟机默认Eden与Survivor之比是8:1,每次可以90%,仅仅只浪费了10%。当然,不可能保证每次年轻代都只剩10%以下的对象,所以还需要老年代来进行分配担保。
三、标记-整理算法
复制收集算法在存活率比较高的情况下,就要执行较多的复制操作,效率会变低。如果不想牺牲50的空间,还得要有额外的担保空间进行分配,以应对被使用对象100%存活的情况。所以老年代一般不采用这种算法,所以有人提出了标记整理算法。
四、分代收集算法
当前商量虚拟机都采用这种算法,当然,这种算法并没有什么新的思想,只是根据java对象存活周期的不同,划分了几块。一般是把java堆分为年轻代和老年代。
年轻代每次回收都有大批量的对象死去,所以采用复制算法
老年代由于没有多余的空间进行分配担保,而且对象存活率又比较高,所有一般采用标记整理算法,或者标记清除算法
相关文章推荐
- JVM垃圾回收机制总结(4) :新一代的垃圾回收算法
- JVM垃圾回收算法与垃圾回收器
- JVM调优总结(6)新一代的垃圾回收算法
- JVM垃圾回收算法-I
- 深入理解JVM(四)——垃圾回收算法
- JVM垃圾回收算法和垃圾收集器笔记
- JVM调优总结(三)-基本垃圾回收算法
- JVM基础研究整理之九--新一代的垃圾回收算法
- JVM-垃圾回收算法
- JVM虚拟机学习一:垃圾回收算法总结
- JVM垃圾回收机制总结(2) —基本算法概述
- JVM调优总结(三)-基本垃圾回收算法
- JVM 垃圾回收算法
- JVM 垃圾回收机制和常见算法
- JVM调优总结(三)-基本垃圾回收算法
- JVM调优总结(6):新一代的垃圾回收算法
- JVM-垃圾回收机制算法简述
- JVM-垃圾回收机制算法简述
- JAVA-JVM垃圾回收算法简介
- JVM内存回收算法以及垃圾收集器