garbage-collection - 读/写障碍如何真正应用于垃圾收集代码?
问题描述
我对垃圾收集器文献中如何定义读/写障碍感到困惑。我的理解是,它们是关于检测发生在 mutator 线程中的读取和写入(因此,在较低级别的术语中,读取和存储)。另一种说法是,这些是在加载/存储之前注入的代码位。到目前为止,一切都很好。
但后来我看一下这篇文章的例子:
( shenandoah-gc-in-jdk-13-part-1-load-reference-barriers/ )
我对设置障碍的地方的解释是:
void example(Foo foo) {
Bar b1 = RB(RB(foo).bar);
while (..) {
Baz baz = RB(RB(b1).baz);
WB(RB(b1), RB(makeSomeValue(baz)));
}
}
也就是说,每次读取引用时,都会放置一个读屏障,每次执行写入时,都会放置一个写屏障。但我肯定是错的,所以,我错了什么?
我可以看到,在诸如The Locality of Concurrent Write Barriers 之类的文章中,他们还将障碍称为对o.f = p
(" 类型的表达式进行操作。根据策略,障碍可能会注意到将新指针 p 插入 o 或删除的旧指针"),好像它们只会应用于对象的字段,而不是x = y
像我所期望的那样应用于类型的通用赋值。
解决方案
推荐阅读
- c - Why dereference typecasted pointer?
- javascript - React & Chartjs: Chart re-rendering on mouseover
- selenium - Different test behavior in Chrome and Firefox
- python - python: stale element reference: element is not attached to the page document
- go - 非 base64 字符串按原样处理
- python - Spacy:ImportError:DLL加载失败:找不到指定的模块。(加载日本模型时出错)
- python - 在python中添加多重集列表
- spring-boot - JPA:映射来自不同服务的两个表
- jpa - JPA:LockModeType.NONE
- python - 如何修复 Dash App 异常 - 输出值的数量无效,预期为 2,得到 1?