仅作为个人记录知识点用
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字节码