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

你可能感兴趣的:(JAVA虚拟机)