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

被折叠的 条评论
为什么被折叠?



