原理:
GC是垃圾收集的意思(Garbage Collection),Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。
简而言之,GC是将java的无用的堆对象进行清理,释放内存,以免发生内存泄露。
**问题一:**为什么需要垃圾回收?
**答:**如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。
**问题二:**常见的垃圾回收算法有哪些?
答:
1、标记-清除算法 (老年代GC采用的算法)
分为两个阶段:标记阶段和清除阶段
标记阶段:首先标记出所有需要回收的对象。
清除阶段:统一回收所有被标记的对象。
缺点:标记和清除过程效率都不高,会产生大量不连续的内存碎片,导致无法给大对象分配内存。
这种算法的不足主要体现在效率和空间,从效率的角度讲,标记和清除两个过程的效率都不高;从空间的角度讲,标记清除后会产生大量不连续的内存碎片, 内存碎片太多可能会导致以后程序运行过程中在需要分配较大对象时,无法找到足够的连续内存而不得不提前触发一次垃圾收集动作。
2、复制算法 (新生代GC****采用的算法)
分为两个阶段:标记阶段和