G1的栅栏Barrier
what:
栅栏是指在原生代码片段中,某些语句执行前,栅栏代码也会执行。
G1主要是在写前栅栏(pre-write barrier)和写后(post-write barrier)。事实上,写栅栏的指令序列开销非常昂贵,应用吞吐量也会根据栅栏复杂度而降低。
pre-write barrier:在执行赋值时,等式左边引用会变更到另外一个对象上,这样原来等式右边对象将失去一个引用。那么G1的JVM会记录这个失去引用的对象。JVM并不会马上更新RSet,而是等批量操作,再将来更新RSet。
post-write barrier:在执行赋值后,等式右侧的对象将获得一个新的引用,这个对象所在region的RSet应该更新。为了提高性能,jvm也只是记录该更新日志,等后面批操作来更新RSet