我们把一块连续的 内存区域划分成大小相等的块,这些块按照使用情况分为 未使用内存(可用内存),可回收内存(死亡对象),存活对象
1.1 标记清除算法 标记死亡对象所在的内存块为可回收内存,然后回收这些内存块
缺点:
1.效率问题 回收后遗留下来的存活对象和未使用内存都是不连续的,下次利用内存块和回收内存块的速度慢
2.空间问题 回收后产生大量不连续的碎片.
1.2 复制算法 内存区域划分为大小相同的两个区域,每次只使用其中一个区域,使用的区域标记清除完后,把还存活的对象以紧邻的方式 复制到另一区域,如此往复
1.3 标记整理算法把存活对象向一端移动,以紧邻的方式存放 ,然后把其余对象清理掉
1.4 分代收集算法这是虚拟机垃圾收集采用的算法,
根据对象存活周期不同,划分为几个内存空间。
JVM(java virtual machine)的堆(heap,jvm的内存,线程共享,用于存放对象) 分为新生代(年轻代)和老年代,
新生代又分为伊甸园区(Eden)和 两个幸存者区(survivor1和survivor2),新生代中大量对象死去,少量对象留存,只要付出少量对象的复制成本就可以实现垃圾收集,因此采用 复制算法
老年代 的对象存活几率高,而且没有额外的空间对象进行分配担保,必须选择标记清除或者标记整理算法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)