delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

26 Aug 2009

垃圾收集里面用到的一种同步机制

先胡乱记一笔。

利用原子操作(CMPXCHG)来修改正扫描的栈帧上的返回地址,令其指向修正垃圾收集表的子程序。这样做的好处是避免了垃圾收集器在程序运行过程中为配合垃圾收集器运行而需要引入的额外开销(垃圾收集器通过扫描栈来了解应用程序目前知道的内存,并将其从准备释放的内存列表中删去,因此,垃圾收集器会希望在扫描栈的时候那个栈帧不发生变化,或者能够检测到这种变化,通常的做法是垃圾收集器提供一套机制来让正在运行的线程阻塞,而这种逐栈帧扫描并配合适当的返回指针修改的做法,则可以几乎完全不阻塞正在运行的线程,同时避免了在收集器不动作时的日常同步开销)。