VMthread

vm thread 机制

概念

vmthread是jvm内部的核心守护线程非Java线程,在jvm启动时由thread:create_vm()初始化并启动

作用

串行任务执行引擎

安全点控制器

任务调度中心

核心职责

监听vm opreation_q队列里的任务请求

触发安全点并执行任务

管理任务生命周期

vm opreation分类

整体逻辑

源码解析

取任务

任务超时了,也会进入safepoint

begin 即Safepoint实现机制

线程本地轮询,改的变量应该是在cpu 1,2,3级缓存

所以说让线程停止下来是可以的

等待所有线程进入安全点

是一个cas操作

java thread和vm thread的协同

可数循环问题和VMthread的关联

特别的:jit优化,有个东西叫做内联,它就是如果你调用多个方法比较多次,它会把你的方法直接变成机器码,然后还会把方法给展开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
main(){


save()
}
save(){
iiiii
jjjj
jjjj
}

内联之后:
main(){
iiiii
jjjj
jjjj
}

那么这里的方法返回之前的安全点也会失效哦

Java8 和Java11 vmthread的差异