每日一学--synchronized相关

仅作为个人记录知识点用

1 用户态与内核态

2 CAS

  • Unsafe->native方法(C++实现)->汇编指令 lock cmpxchg->锁总线(硬件锁)
  • 硬件锁:MESI、内存屏障
  • 避免系统调用

3 synchronized锁

  • new Object()内存四个方面
    • markword
    • Class point
    • object attr
    • Padding
  • Markword标识锁类型
  • 锁升级

3.1 偏向锁

  • 升级时机:有线程来竞争
  • 4秒后启动?是因为有可能4秒内直接进入轻量级锁,就不会有先上偏向锁的过程

3.2 轻量级锁

  • CAS自旋

  • 自旋过程消耗CPU

  • 升级时机:竞争加剧,JDK1.6之前:自旋线程超过10或超过CPU数/2,JDK1.6之后,加入自适应自旋参数

3.3 重量级锁

  • Wait()-->进入等待队列

  • 等待队列不消耗CPU

3.4 锁重入

  • synchronized嵌套
  • 锁和解锁要对称
  • 嵌套锁了多少次记录在栈针
  • 意义:支持父类锁,子类锁嵌套

4 GC

  • 几种类型:PS+PO,G1,。。。
  • 最多多少代:15代(四bit,最大15),6代

5 JIT

  • 一般情况下,java代码为解释执行,翻译一句执行一句,监测到被频繁调用的代码会被标记为热点代码

  • 热点代码直接翻译为字节码,不再进行多次翻译的过程

6 HSDIS

  • 查看synchronized,volatile字节码

image-20200513222125608

posted @ 2020-05-13 22:32  杨海星  阅读(136)  评论(0编辑  收藏  举报