原理:
- 当堆有效的存储空间被使用耗尽时,触发Stop the world(停止整个程序),然后便进行标记和清除
- 标记:搜集从根对象集合(可达性算法的内容点)开始遍历,在对象是被引用链所连接的就进行标记,即记录为可达的对象,记录在Header中
- 搜集对堆内存从 开始到结束 进行线性的遍历,如果某对象在其Header中未被标记未可达对象,便将其进行回收
优点: 实现简单
缺点:效率不高;在进行GC时,触发STW,停止整个应用程序,用户体验度差;清理的内存中出现大量的内存碎片;此时就需要维护空闲列表
清除:在内存中并非真正意义上的删除,而是将所需要清除的地址保存在空闲的地址列表中,后期需要加载新对象时,判断清除的地址空间是否充足,充足情况下就进行 存放、覆盖