garbage-collection - 为什么用户程序在垃圾回收的上下文中被称为 mutator?
问题描述
许多网站提到用户程序在垃圾收集的上下文中被称为 mutator 的事实。我想了解为什么要这样命名,因为命名可能暗示一些我还不知道的重要事情。我试图用谷歌搜索,但没有得到任何有用的信息。我的一个猜测是,也许用户程序正在改变和改变 GC 需要处理的内存内容,所以它被命名为 mutator(尽管我无法从这种命名方式推断出任何重要信息)。如果我错了,请纠正我,谢谢。
解决方案
堆在不断变化,或者简单地说——它不断“变异”。你的应用程序应该为此受到指责,它在整个生命周期中一直在请求新的内存块。
堆就像一个对象图。有“根”(它们永远不会改变,也永远不会消失),还有孩子——这些是您的应用程序分配的。这些“孩子”总是四处走动:一些是添加的,一些是孤儿。可以有单个子图或整个子图。这种移动是由应用程序本身(您如何分配对象)引起的。如果没有移动,GC 的工作就很简单了。这就是一些 GC 算法的工作原理:它们停止整个舞蹈(也称为 stop-the-world 事件或“mutator”线程停止)并做他们的事情:看看什么是可达的 - 其他一切都是垃圾。
有很多更智能的 GC 可以与您的应用程序一起工作,例如严格来说是 java。mutator 线程与 GC 线程同时工作。根据算法,他们可能以并发方式(ZGC
和Shenandoah 2.0
)完成几乎所有的工作,或者他们可能以并发方式(G1
例如)完成部分工作。
推荐阅读
- java - PDF查看填写pdf表格
- r - R bind_rows() 错误:参数 1 必须有名称
- django - 如何在 Django 中处理文件处理请求?
- ios - 推送时出现大标题导航栏和搜索栏的错误
- azure - Azure Functions 消费计划命名
- python - 在 Windows 10 中安装和运行 Auto-Sklearn
- class - VSCode:搜索类/转到导入库的类
- excel - 设置组合框行源 VBA 返回错误“1004”
- javascript - 我的Step Progress Bar第一步无法激活VUEJS
- java - java中特殊字符(除数字和字母之外的所有字符)的正则表达式是什么