java 虚拟机相关 - 823126028/book_reader GitHub Wiki
java 虚拟机
java 内存模型
- 同一个线程内先行先发生。
- java 虚拟机原语:load read(载入), store,write(保存), use, assing
- load 和 read 严格先后顺序
- store 和 write 严格先后顺序
- syncronized lock 会清空工作内存所有数据从主内存中获取, unlock 所有工作内存数据刷到主内存。
- volatile 语义,可见性和内存屏障严格防止指令重排序。(规则 use 前一个命令必须是read(数据从内存中获取最新的) assgin之后必须是write 赋值之后必须同步回主内存, 数据A 的 load,read 必须先于 数据B 的load,read . 数据A 的store,write 先于数据B 的store,write)
锁
- 偏向锁: mark word 里面记录线程id,epoch等,如果是当前线程cas比较后,获取锁。自旋等待到安全点,膨胀成轻量级锁。
- 当前栈帧分配锁指针,锁对象中的mark word cas 成该指针。
- 重量级锁: try lock 自旋后,阻塞挂起
https://www.zhihu.com/question/55075763/answer/142572386