正在看《深入理解java虚拟机》 对于锁膨胀不是很明白。
首先偏向锁,我理解偏向锁和轻量级锁之间区别是在获取锁的过程中,是否有CAS操作。但是为什么偏向锁不能直接替代轻量级锁,什么场景是轻量级锁能够解决但是偏向锁无法解决的呢?
第二个 书上402页上面说“如果有两条以上的线程竞争用同一个锁,轻量级锁就不再有效,要膨胀为重量级锁”,我的理解上不需要大于两个线程,等于两个线程的竞争情况下,也需要膨胀对吗?
伊谢尔伦2017-04-18 10:31:58
왜 자물쇠가 그렇게 많이 필요한가요? 서로 다른 잠금은 서로 다른 리소스를 차지하므로 모든 것이 더 적은 리소스를 사용하고 프로그램 실행 속도를 높이도록 설계되었습니다.
첫 번째 질문입니다.
편향된 잠금: 이전 연구를 통해 Hotspot의 저자는 대부분의 경우 잠금에 대한 다중 스레드 경쟁이 없을 뿐만 아니라 비용을 벌기 위해 항상 동일한 스레드에 의해 여러 번 획득된다는 사실을 발견했습니다. 더 낮은 잠금을 획득하는 스레드, 편향된 잠금이 도입되었습니다. 하나의 스레드가 동기화된 코드 블록에 액세스하는 시나리오에 적합합니다.
경량 잠금: 경쟁이 그다지 치열하지 않거나 동기화된 코드 블록이 빠르게 실행되는 시나리오에 사용됩니다. (몇번을 돌려도 아직 자물쇠를 얻지 못하고 헤비급 자물쇠로 업그레이드 했습니다.)
두 번째 문제는 경량 잠금 장치가 여러 번 회전(회전은 사이클로 이해될 수 있음) 후에도 잠금 장치를 획득하지 못하고 스레드 수에 관계없이 확장된다는 것입니다.
위 내용은 제 개인적인 이해이므로 Infoq의 해당 글을 참고해주세요.