每次创建对象的时候,都会申请内存,例如java中new一个对象,C语言通过malloc free申请内存。C和C++都是手动回收内存,这也就出现了2个基本问题,可能会忘记回收或者多次回收。因此,自动回收内存成为了一个好的选择。但是,自动内存回收同时也面临着一些问题。
(1)垃圾的定位
自动回收内存,首先需要定位垃圾,因此,可以使用引用计数法,根可达算法定位垃圾
(2)常见垃圾回收算法
常见的垃圾回收算法一般有三种,标记清除法,拷贝算法和标记压缩法。各有利弊,使用标记清除法,需要扫描两遍,效率偏低,且位置不连续,会产生碎片。使用拷贝算法则会占用大量空间,导致空间浪费。而标记压缩法虽然没有碎片,但是也需要扫描两遍,效率也会偏低。
(3)部分垃圾回收器使用的模型
大部分GC都是使用逻辑分代模型,但是Epsilon ZGC Shenandoah除外
G1垃圾回收器没有物理分代,只是逻辑分代,除了G1,都是逻辑分代且物理分代



