锁粗化:JIT编译时扩大锁定区域,避免对同一个类或对象频繁加锁、释放锁。
例1:
public void doMethod(){
synchronized(lock){
//do 1
}
synchronized(lock){
//do 2
}
synchronized(lock){
//do 3
}
}
public void doMethod(){
synchronized(lock){
// do 1
// do 2
// do 3
}
}
锁消除:JIT时判断不存在锁竞争,则消除锁。
例1:
public void doMethod(){
Object object = new Object();
synchronized (object){
// do 1
}
}