Day11 三色标记 颜色指针

八股文点到为止,个人觉得没必要深究.

  • XX: UseG1GC开启G1垃圾收集器

  • XX: G1HeapRegionSize 设置Region的大小

  • XX: ParallelGCThread 并行GC工作的线程数

  • XX: InitiiatiingHeapOccupanccyPercent 默认45%,代表GC堆达到多少利用率开始收集垃圾.

  • 垃圾收集器选择场景
  1. 调整堆大小让服务器来选择
  2. 内存<100M 串行收集器
  3. 响应时间 < 1s,并发收集器
  4. 停顿时间>1秒,并行或者jvm自己选择

垃圾收集器底层三色标记算法

因为 GC roots可达性分析算法在遍历的过程中遇到对象,看他是否被访问过,按照颜色区分.

  • 白色:
    未被标记的对象

  • 灰色:
    自身被标记,成员变量未被标记

  • 黑色
    自身和成员都被标记了

初始标记,并发标记(多线程).

可能出现漏标的情况,但是重新标记需要STW,于是才出现了读写屏障.
于是我们对其进行拦截,在读写前后,将对象G给记录下来.
就是类似拦截器.

说白了就是:

并发标记情况下,漏标了,或者标记错了,重新标记需要stw..
所以引入类似拦截器的功能,设置读写屏障,在赋值前后记录值.

void write(){
    before  //写前操作 barrier
  value =   new_value;
    after //写后操作
}

void read(){
  load_barrier //读屏障
  field = new value //赋值操作.
}

你可能感兴趣的:(Day11 三色标记 颜色指针)