Loading...

说说Java中的Logging-Write-Barrier

阅读 ...

Write Barrier可以理解为JVM在对象引用赋值操作中插入的一段AOP代码,通过这段代码,在应用程序运行期间,垃圾收集器可以感知到对象引用关系的变化,从而维护记忆集(RSet)、卡表(Card Table)等必要的数据结构,避免全堆扫描。

Write Barrier按时机分,有Pre-Write Barrier和Post-Write Barrier两种类型。

Pre-Write Barrier在对象引用改变前触发,用于记录引用变更前的状态;

Post-Write Barrier和Pre-Write Barrier相反,是在对象引用改变后触发,用于记录引用变更后的状态。

Logging是一种策略,在G1收集器中,Post和Pre Write Barrier都采用了Logging机制来实现,也就是先记录日志,后异步处理。

那为什么要用Logging这样一种策略呢?

主要是如果每次引用修改都直接去更新RSet这种复杂的全局数据结构,这样会严重拖慢应用线程,并可能会导致多线程下的伪共享问题

如果采用Logging机制,将对象的引用变更记录丢给应用线程负责,让后台线程负责复杂的处理,使对象的引用变更记录和处理解耦,从而保证在GC正确的前提下,最大程度地减少对应用程序吞吐量的影响

本文由 iamxurulin 原创发布,转载请保留原文链接。
最后更新于 2026-08-23 17:21:42
关于作者与文章

本文为 iamxurulin 原创技术文章。如对内容有疑问或建议,欢迎在评论区交流讨论。

Coder_Studio - 记录后端开发、算法与 AI 的成长之路