当jvm中的引用被更改时,我被告知,使用g1 gc将插入预写屏障以相应地更改记忆集,但是代码在哪里呢?我检查字节代码的实现,如腐静态,但我找不到在哪里发生预障碍?g1 gc在哪里和如何插入预写屏障?
发布于 2020-01-17 21:16:15
从Holger的评论中可能已经很明显了,但是这将不会出现在字节码级别,而是由JIT生成的。
JIT
最好的解释是源代码本身,在某些情况下是极好,有时非常清楚:
G1还需要跟踪不同区域之间的对象引用,以便对旧区域进行疏散,这是混合集合的一部分。引用在记忆集中被跟踪,并作为引用不断更新,是编写的,在后屏障的帮助下完成。
您还可以找到记住的集合例如,是,或者它们是如何构造的。
这里是C2编译器使用的post_barrier方法。虽然我可以从该源代码中理解一些事情,但有些东西对我来说太复杂了,因此,我很乐意阅读该代码:)
C2
post_barrier
https://stackoverflow.com/questions/59783600
相似问题