Java 虚拟机 垃圾回收算法 小记

2020-02-05  本文已影响0人  大川的川
你瞅啥?

由于垃圾回收算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此不进行过多讨论算法的实现了,只记录和学习!

算法1、标记-清除算法

最基础的收集算法是“标记-清除”算法,此算法分为“标记”和“清除”两个阶段。

它的主要不足有两点:
不足一:效率问题,标记和清除两个过程的效率都不高。
不足二:空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后程序运行过程中需要分配较大对象时,无法找到足够且连续内存,从而不得不触发一次垃圾回收的动作。

标记-清除

算法2、复制算法

将可用内存分成大小相同的两块,每次只用其中一块。当一块内存用完,就将还存活的对象复制到另外一块上,然后再把已经使用过的内存空间一次清理掉。

算法3、标记整理算法

让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

算法4、分代收集算法

当前商业虚拟机的垃圾收集都采用“分代收集”算法,这种算法并没有什么新的思想,只是根据对象存活周期的不同将内存划分为几块。一般情况是把Java堆分为“新生代”和“老年代”,这样可以根据年代特点采用最实用的算法。

以上是个人的记录,仅供参考学习,不作为技术点和科研依据。

上一篇 下一篇

猜你喜欢

热点阅读