- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
本讨论将使用micropython代码,但由于它非常简单,我希望它对mark + sweep的一般讨论有用。
Micropython使用垃圾收集,特别是标记和清除;让我们定义一下。
标记
在标记阶段,gc
跟随内存引用,并逐字标记已使用的内存块,以指示它们可以从根块集中到达。
扫
标记阶段完成后,清除程序将循环遍历整个堆,如果使用了内存块但未标记,则表示代码无法访问该内存块,因此将其“释放”,即标记为空闲。在标记阶段标记的存储块已删除该标记。
当前的实现需要原子调用来执行垃圾回收(又称为gc
),但我一直在想,是否有可能将其拆分为多个调用,而不是单片/原子调用。
这将有助于减少抖动:您会分散一堆较小的电话,而不是大的时间限制。 (这里没有讨论如何“分散” gc
调用的实现细节,除非有人认为这样做会增加讨论的范围。)
如果gc
在“后台”(在字节码或after pre-defined bytecodes之间)运行,则在错误的位置进行分配(或释放)可能会导致争用条件和堆损坏。在拆分gc
执行之前,我们必须确定可能的竞争条件。
可以执行的两个操作是:分配和释放。
分配
如果用户在标记或扫描阶段的中间执行分配,会发生什么?
让我们看一个具体的代码示例
>> var1 = SomeAllocation()
GC Roots
中条目的全局字典中。如果在扫描之前将条目添加到全局变量,则不会发生“不良”情况:新的内存块将被标记为应有的状态。
gc
在执行过程中,则将已分配的块标记为已标记。唯一的缺点是,如果您在阶段扫描中分配,并且在扫描器检查了新分配的块之后,您将使用标记为mark的块结束
gc
。除非用户明确释放它,否则您将需要经历一个额外的
gc
周期以释放它,如果它变得不可访问。
gc
。
GC root
)时,才应该标记它们。结果是,这些无法访问但已标记的块将不会释放,直到另外的
gc
周期为止,因为经过标记后,这些无父但已标记的块将不会被相位扫描释放。
gc
的情况没有什么不同。在整体式
gc
中,您必须完成当前的
gc
循环,然后用户将调用
free(ptr)
,然后在下一个
gc
中释放该块的子级。直到堆处于“正确”状态的时间不会更改。
最佳答案
对的,这是可能的。
自版本1.4(2002)起,Java有了Concurrent Mark-Sweep (CMS)收集器。它的工作方式与您的描述类似。
如果您运行Jython,我想您今天就可以利用它了。
关于python - 垃圾收集-mark + sweep是否必须为整体/原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439859/
我正在阅读Head First Design Patterns一书,在第382页上说: Composite Patterns is used when you have collection of o
我将我的电脑用作 wifi 热点,并将其他设备连接到它。然后使用wireshark,我可以看到特定设备上发送/接收的数据包,但是我怎样才能看到设备正在查看的完整网页而不是单独的数据包? 最佳答案 尝试
在 URL 中打开我的 Jenkins 时,我似乎无法登录它会抛出消息“用户缺少整体/读取权限”。我试过answer来自类似的问题,但禁用安全性不起作用。 Jenkins 继续抛出错误。有人建议我一起
我已经使用工具分配测试了我的应用程序并得到了这张图片: 如图所示,我的应用程序正常工作,但它通常以总字节数计值吗?我担心“#Allocations (Net/Overall)”,因为它的颜色是红色。这
我遵循教程 Deployment on Tomcat without modification of monitored webapps (beta) .监控站点正在运行,我可以看到统计页面。问题是
所以我有一个 div,其中整个东西都是一个 anchor 标记,我试图控制颜色在悬停时的显示方式并获得不同的结果。希望我能用 CSS 做到这一点。发生的事情是悬停,一个文本发生变化,但另一个没有。但是
我创建了一个程序,您可以在其中输入行驶的英里数和每 jar 油使用的加仑数,该程序会显示每 jar 油的 mpg。我使用的是 Visual Studio 2010。当我输入标记值 -1 时,系统会给出
我有一个由 N 个节点组成的 zookeeper 集群(彼此了解)。如果我在 zk 客户端连接字符串中只传递 M < N 个节点地址怎么办?集群的行为是什么? 在更具体的情况下,如果我只从集群中传递
我一直在试图弄清楚当使用诸如 pushViewController:animated、presentModalViewController:animated 和 UITabBarViewControl
我已经在 VIM 中安装了 minikube,并且我拥有具有所有权限的服务帐户 token 。是否有来自 kubernetes 的 API 来获取资源使用情况(总体)。 最佳答案 要获取 CPU 和内
如何通过 HTTP 客户端(例如 CURL、Insomnia、Postman 等)快速使用使用 JWT token 的 JHipster 生成的应用程序? 最佳答案 嗯,我研究了一段时间,发现你必须遵
我是一名优秀的程序员,十分优秀!