八股文点到为止,个人觉得没必要深究.
-
XX: UseG1GC开启G1垃圾收集器
-
XX: G1HeapRegionSize 设置Region的大小
-
XX: ParallelGCThread 并行GC工作的线程数
-
XX: InitiiatiingHeapOccupanccyPercent 默认45%,代表GC堆达到多少利用率开始收集垃圾.
- 垃圾收集器选择场景
- 调整堆大小让服务器来选择
- 内存<100M 串行收集器
- 响应时间 < 1s,并发收集器
- 停顿时间>1秒,并行或者jvm自己选择
垃圾收集器底层三色标记算法
因为 GC roots可达性分析算法在遍历的过程中遇到对象,看他是否被访问过,按照颜色区分.
-
白色:
未被标记的对象 -
灰色:
自身被标记,成员变量未被标记 -
黑色
自身和成员都被标记了
初始标记,并发标记(多线程).
可能出现漏标的情况,但是重新标记需要STW,于是才出现了读写屏障.
于是我们对其进行拦截,在读写前后,将对象G给记录下来.
就是类似拦截器.
说白了就是:
并发标记情况下,漏标了,或者标记错了,重新标记需要stw..
所以引入类似拦截器的功能,设置读写屏障,在赋值前后记录值.
void write(){
before //写前操作 barrier
value = new_value;
after //写后操作
}
void read(){
load_barrier //读屏障
field = new value //赋值操作.
}
网友评论