面试题答案
一键面试标记准备阶段(Mark Setup)
- 作用:暂停所有用户协程(STW,Stop The World),初始化标记相关的数据结构,比如设置根对象集合,包括全局变量、栈等。这个阶段为后续的标记工作做准备,在暂停期间,程序无法执行用户代码,会对应用程序的响应性产生一定影响。
并发标记阶段(Concurrent Mark)
- 作用:与用户协程并发执行。垃圾回收器从根对象集合出发,遍历堆内存中的所有对象,标记所有可达对象。在此过程中,用户代码可以继续运行,减少了垃圾回收对应用程序性能的整体影响。但并发标记可能会出现对象状态变化的情况,需要通过写屏障(Write Barrier)技术来保证标记的准确性。
标记终止阶段(Mark Termination)
- 作用:再次暂停所有用户协程(STW)。完成并发标记后,进行一些收尾工作,例如统计标记结果,确定哪些对象是不可达的(即可以回收的)。这个阶段结束后,垃圾回收器就明确了需要回收的对象范围。
清理阶段(Sweep)
- 作用:与用户协程并发执行。垃圾回收器回收在标记终止阶段确定的不可达对象所占用的内存空间,并将这些内存归还给堆,以便后续重新分配使用。清理阶段不会对用户代码的执行造成太大干扰,提高了垃圾回收过程的整体效率。