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类等。
推荐阅读
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 大雪@大雪腌肉 适当进补 今日大雪
- |电商事业中的“闪光少年”
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 经观汽车|日系车企中的“异类”?东风日产将导入e-POWER技术大干增程式混动 | 经观汽车
- 中年|这些东西,比你想象中的还要大得多!
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 请问杨毅微博中的这两人是谁
- 某些公司招聘要求中的精通mysql是啥程度
