84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
正在看《深入理解java虚拟机》 对于锁膨胀不是很明白。首先偏向锁,我理解偏向锁和轻量级锁之间区别是在获取锁的过程中,是否有CAS操作。但是为什么偏向锁不能直接替代轻量级锁,什么场景是轻量级锁能够解决但是偏向锁无法解决的呢?
第二个 书上402页上面说“如果有两条以上的线程竞争用同一个锁,轻量级锁就不再有效,要膨胀为重量级锁”,我的理解上不需要大于两个线程,等于两个线程的竞争情况下,也需要膨胀对吗?
认证高级PHP讲师
なぜこれほど多くのロックが必要なのでしょうか?ロックが異なれば占有されるリソースも異なるため、使用するリソースが減り、プログラムの実行が高速になるようにすべてが設計されています。
最初の質問。 偏ったロック: Hotspot の作成者は、以前の研究を通じて、ほとんどの場合、マルチスレッドでロックの競合が存在しないだけでなく、コストを下げるために常に同じスレッドによって複数回取得されることを発見しました。スレッドがロックを取得するための。 1 つのスレッドが同期されたコード ブロックにアクセスするシナリオに適しています。
軽量ロック: 競争がそれほど激しくないシナリオ、または同期されたコード ブロックが迅速に実行されるシナリオで使用されます。ブロックではなくスピンします。 (何回か回してもロックを取得できず、ヘビー級ロックにアップグレードしました)
2 番目の問題は、軽量ロックが数回スピンした後 (スピンはループとして理解できます) ロックを取得できなかった場合、スレッドの数に関係なく拡張されることです。
上記は私の個人的な理解です。Infoq のこの記事を参照してください。
なぜこれほど多くのロックが必要なのでしょうか?ロックが異なれば占有されるリソースも異なるため、使用するリソースが減り、プログラムの実行が高速になるようにすべてが設計されています。
最初の質問。
偏ったロック: Hotspot の作成者は、以前の研究を通じて、ほとんどの場合、マルチスレッドでロックの競合が存在しないだけでなく、コストを下げるために常に同じスレッドによって複数回取得されることを発見しました。スレッドがロックを取得するための。 1 つのスレッドが同期されたコード ブロックにアクセスするシナリオに適しています。
軽量ロック: 競争がそれほど激しくないシナリオ、または同期されたコード ブロックが迅速に実行されるシナリオで使用されます。ブロックではなくスピンします。 (何回か回してもロックを取得できず、ヘビー級ロックにアップグレードしました)
2 番目の問題は、軽量ロックが数回スピンした後 (スピンはループとして理解できます) ロックを取得できなかった場合、スレッドの数に関係なく拡張されることです。
上記は私の個人的な理解です。Infoq のこの記事を参照してください。