首页 > 解决方案 > 为什么用户程序在垃圾回收的上下文中被称为 mutator?

问题描述

许多网站提到用户程序在垃圾收集的上下文中被称为 mutator 的事实。我想了解为什么要这样命名,因为命名可能暗示一些我还不知道的重要事情。我试图用谷歌搜索,但没有得到任何有用的信息。我的一个猜测是,也许用户程序正在改变和改变 GC 需要处理的内存内容,所以它被命名为 mutator(尽管我无法从这种命名方式推断出任何重要信息)。如果我错了,请纠正我,谢谢。

标签: garbage-collection

解决方案


堆在不断变化,或者简单地说——它不断“变异”。你的应用程序应该为此受到指责,它在整个生命周期中一直在请求新的内存块。

堆就像一个对象图。有“根”(它们永远不会改变,也永远不会消失),还有孩子——这些是您的应用程序分配的。这些“孩子”总是四处走动:一些是添加的,一些是孤儿。可以有单个子图或整个子图。这种移动是由应用程序本身(您如何分配对象)引起的。如果没有移动,GC 的工作就很简单了。这就是一些 GC 算法的工作原理:它们停止整个舞蹈(也称为 stop-the-world 事件或“mutator”线程停止)并做他们的事情:看看什么是可达的 - 其他一切都是垃圾。

有很多更智能的 GC 可以与您的应用程序一起工作,例如严格来说是 java。mutator 线程与 GC 线程同时工作。根据算法,他们可能以并发方式(ZGCShenandoah 2.0)完成几乎所有的工作,或者他们可能以并发方式(G1例如)完成部分工作。


推荐阅读