今天和大家一起解析下常见的GC算法设计。
什么是GC
GC是一种软件进行自动的内存回收的方式。
如果软件运行过程中,发现某些对象没有了引用(或者称之为不可达)的状态时,就会启动GC过程。将这部分内存进行释放。以避免程序员因为忘记显示释放内存导致程序出现out of memory。
GC的过程
GC的过程主要分为标记、移动和压缩
标记
软件先分析堆中的所有内存对象,判断是否“存活”。
如果一个对象没有保持着被其他存活对象引用,就需要被清理
移动
将标记为存活的对象移动到另一个内存空间(老生代)
压缩
由于内存清理之后会出现很多碎片(非连续的小段可用内存),因此往往需要对其进行移动,确保大块的内存可用空间。(有时候移动和压缩会放在一起操作)
GC算法分析
为什么GC时要移动对象至另一空间
这里我们先思考一个问题,为什么需要把存活的对象移动到另一个内存空间。
首先,GC是一个非常耗性能的过程。
因为在GC过程中,你的程序中各个对象的引用指向的内存地址可能发生改变。