Java虚拟机学习笔记(优化及并发)

相关优化手段:


内联、常量折叠、公共表达式消除、自动装箱消除、

热度代码、逃逸分析、锁消除、栈上分配、标量替换

数组边界检查消除 ...


volatile变量:


每次使用都会回主内存刷值
每次赋值都会同步到主内存
不会被指令重排序优化


特性:


原子性  read load assign use store write synchronized(lock unlock)
可见性  volatile synchronized final
有序性 volatile synchronized


先行发生原则:


1.程序次序规则  同线程
2.管理锁定规则  lock unlock
3.volatile变量规则  不受指令重排序干扰,真是时间上也先行
4.线程启动规则 start()在线程其他动作之前
5.线程终止规则  其他动作及Thread.join()在Threa.isAlive()终止检测之前
6.线程中断规则 interrupt()在Thread.interruted()之前
7.对象终结规则 对象初始化完成先于它的finalize()方法
8.传递性 A先于B,B先于C,那么A先于C


数据:


1.不可变 final Integer String
2.绝对线程安全
3.相对线程安全 Vector HashTable Collections synchronizedCollection
4.线程兼容 绝大多数
5.线程对立  Thread的resume 和 suspend 方法  System.setIn()和System.setOut()


线程安全实现方法


1.互斥同步  synchronized ReentrantLock(等待可中断,公平锁,绑定多条件)
2.非阻塞同步  TestAndSet
3.无同步方案  可重入代码(结果可预测) 线程本地存储(生成消费者 消费者 web TreadLocal)


锁优化


1.自旋锁与自适应自旋 -XX:PreBlockSpin 次数
2.锁消除
3.锁粗化
4.轻量级锁
5.偏向锁 -XX:+UseBiasedLocking

你可能感兴趣的:(虚拟机,volatile,线程安全,性能优化,锁优化)