JVM的锁优化

当采用互斥同步方法实现线程安全的时候,线程阻塞将会对系统性能产生很大的影响,因为线程的挂起和恢复操作都要切换到内核态中完成,频繁地切换将会给系统带来性能损耗。锁优化技术的目的就是尽量减少不必要的线程切换,提高系统的并发处理能力。 下面是一些锁优化技术的介绍: 一、锁消除 有时候在代码中会有一些不必要的同步,这样在编译期就能进行优化,譬如对代码上要求同步,但实际上是不可能发生数据共享的锁进行消除。虚拟机会利用逃逸分析技术去判断一段代码中,堆上的数据会不会逃逸出去被其它线程访问到,然后进行相应的优化。一方面可能是人为因素添加了不必要的同步措施,另一方面,同步的代码在Java中普遍存在,无意中我们就会用到一些可能自己都不知道的同步方法。例如以下代码: public String concatString(String s1,String s2,String s3) { return s1+s2+s3;//这里似乎没有同步,实际上是吗? } String是不可变的类,因此对字符串的操作总是通过生成新的对象来进行,以上代码可能会变成下面的样子: public String concatString(String s1,String s2,String […]