jvm 优化


java 虚拟机优化

 

************************

编译优化

 

为了提高程序的执行效率,虚拟机会将热点代码编译为本地机器码

解释器:可以使用解释器快速启动程序,同时,如果编译器进行激进优化,导致程序不能正常执行,可以使用解释器来执行

编译器:将热点代码编译为本地机器码,提高程序执行效率

编译层次:C1(简单可靠的优化)、C2(深度优化,server模式下默认采用分层编译,C1和C2同时工作)

 

热点代码:方法块(编译方法)、代码块(对代码块所在方法进行编译)

热点代码判断:基于计数器的热点探测

 

 

************************

锁的优化

 

              

偏向锁获取:线程获取锁前,先检查对象头是否记录了当前线程的id,如果记录了当前线程id,则直接获取锁;否则检查对象标志位是否允许偏向锁,如果允许,尝试用cas操作将当前线程的id记录在对象头中,如果替换成功则获取偏向锁;如果失败,则表示有其他线程占有偏向锁,偏向锁撤销,将标志位标记为不适合偏向,尝试获取轻量级锁

偏向锁撤销:如果有线程持有偏向锁,其他线程尝试获取偏向锁失败,则偏向锁撤销,其他线程尝试获取轻量级锁

                                 

 

 

轻量级锁获取:线程在当前栈空间创建lock record,用于存储markword,然后尝试使用cas将对象头的mark word替换为指向lock record的指针,如果替换成功则获取轻量级锁,失败则自旋等待,自旋等待获取锁失败则将锁膨胀为重量级锁

轻量级锁释放:尝试用cas替换mark word,如果替换成功,则直接释放锁;如果替换失败,则表示锁已膨胀为重量级锁,有线程在等待获取锁,释放锁的同时唤醒其他等待的线程

轻量级锁撤销:线程占有轻量级锁,此时其他线程尝试获取轻量级锁失败,则轻量级锁撤销,膨胀为重量级锁

                                  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值