java 虚拟机相关 - 823126028/book_reader GitHub Wiki

java 虚拟机

java 内存模型

  • 同一个线程内先行先发生。
  • java 虚拟机原语:load read(载入), store,write(保存), use, assing
    1. load 和 read 严格先后顺序
    2. store 和 write 严格先后顺序
    3. syncronized lock 会清空工作内存所有数据从主内存中获取, unlock 所有工作内存数据刷到主内存。
    4. 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