- 0
- 0
- 约小于1千字
- 约 3页
- 2026-08-19 发布于北京
- 举报
读屏障和写屏障的区别
起始时候的对象模型
当进行一次GC时,首先会将A和C标记为灰色,表示即将对A和C进行标记
完成对A和C进行标记,A和C都会变成黑色。然后B会变为灰色,表示接下来即将标
记B。
被标记为黑色,表示其所有的子阶段已经全部完成标记,回收期不会再关注此对象
但是假如现在开始运行应用线程.应用线程发生了对象之间的操作,为
ObjectobjD=B对象.getObject();
B对象.D字段=null;
C对象.D字段=objD.
也就是B不在D对象,而变成了CD对象.内存图就变成了.
假如此时又启动了回收线程。就会出现问题
回收线程首先会将B标记为黑色,因为B也没有子阶段。但是C已经是黑色,GC不在
关注C,因此D对象就会被认为是,但是D对象并不是,因为C在使用D对象。
为了解决这个问题,于是就有了读屏障和写屏障。
再看刚刚执行用户线程的三个步骤。
ObjectobjD=B对象.getObject();
B对象.D字段=
原创力文档

文档评论(0)