垃圾收集算法

二:JVM学习-垃圾收集算法以及常用的垃圾收集器

你。 提交于 2020-04-12 17:38:53
垃圾收集器与内存分配策略简介: 一:垃圾收集算法 1.1:简介 说起垃圾收集,大部分人都把这项技术当做java语言的伴生物,其实,GC的历史比java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言,档Lisp在胚胎的时候,人们就在考虑GC需要完成的三件事情: 1:那些内存需要回收 2:什么时候回收 3:如何回收 1.2:垃圾收集算法: 由于笔者也是刚开始学习,对算法的具体实现不甚了解,所以请见谅。 1.2.1标记-清除算法 该算法也是最基础的收集算法,就给名字一样,分为标记和清除两部分,首先标记处所有需要清理的对象,然后在标记完成之后在统一回收。该算法的最大缺点就是标记清除之后会产生大量不连续的内存碎片,空间碎片化太高可能会导致,当程序在以后的运行霍城中需要分配大对象的时候没有办法找到连续的空间再去触发一次垃圾回收动作,有点得不偿失,还有一点就是该算法的收集效率也不是太高。如下所示: 1.2.2:复制算法: 为了解决效率问题,一种称为“复制”算法的收集算法出现了,他讲容量划分为大小相等的两块,每次只是用一块,当一块内存块用完之后,就把存活的对象复制到另一块上去,然后把已经使用过的内存空间一次清理掉,这样使得每次都对其中一块进行垃圾回收,再次进行内存分配的时候也不用考虑空间碎片化的问题。这种算法也有坏处就是内存压缩为原来的一半,利用率比较低