java虚拟机中的锁优化,比如轻量级锁

IRT_ENTRY_NO_ASYNC(void, InterpreterRuntime::monitorenter(JavaThread* thread, BasicObjectLock* elem))#ifdef ASSERT thread-\u0026gt;last_frame().interpreter_frame_verify_monitor(elem);#endif if (PrintBiasedLockingStatistics) { Atomic::inc(BiasedLocking::slow_path_entry_count_addr()); } Handle h_obj(thread, elem-\u0026gt;obj()); assert(Universe::heap()-\u0026gt;is_in_reserved_or_null(h_obj()), "must be NULL or an object"); if (UseBiasedLocking) { // Retry fast entry if bias is revoked to avoid unnecessary inflation //偏向锁啊偏向锁 ObjectSynchronizer::fast_enter(h_obj, elem-\u0026gt;lock(), true, CHECK); } else { ObjectSynchronizer::slow_enter(h_obj, elem-\u0026gt;lock(), CHECK); } assert(Universe::heap()-\u0026gt;is_in_reserved_or_null(elem-\u0026gt;obj()), "must be NULL or an object");#ifdef ASSERT thread-\u0026gt;last_frame().interpreter_frame_verify_monitor(elem);#endifIRT_END1.6以后先偏向锁,然后升级锁,算是优化吧。。。。Biased
■网友
CAS是无锁的方式吧。你是了解有关java如何实现轻量级锁的话,首先该了解一下虚拟机的内存模型,然后结合concurrent包,从Lock开始,再到原子类型,最后是适用各种并发场合的数据结构。锁的优化按我理解是在不同的场景下合理的请求和释放锁,比如concurrent包里面的读写锁,写拷贝结构,另外要注意一点的就是公平锁。源代码的话,我最开始是从concurrenthashmap开始的,然后是再了解原子变量(CAS相关),再往底层如Unsafe类等。


    推荐阅读