我遇到了一個問題:在management.cpp中,jmm_GetThreadInfo方法會先獲取Threads_lock鎖,假設執行緒太多,非常耗時,這導致了一個不明顯的問題:一些其他執行緒被阻塞并且一直在等待這個鎖被釋放,但是找不到執行緒會在哪里觸發突然阻塞在這個鎖上。
我有一些疑問:
- jvm中Threads_lock的作用以及會用到哪些場景。
- Threads_lock 是否會導致其他執行緒阻塞。
Threads_lock在mutexLocker.cpp中。官方的解釋是
a lock on the Threads table of active Java threads
(also used by Safepoints too to block threads creation/destruction)
感謝
uj5u.com熱心網友回復:
Threads_lock保護 JVM 托管執行緒串列免受并發修改。當新執行緒啟動、執行緒退出以及在安全點時獲取鎖。Threads_lock不會阻止正在運行的執行緒進行常規作業。
在 JDK 8 中,Threads_lock還獲得了用于迭代現有執行緒串列的方法,這確實導致了性能問題。從 JDK 10 開始,JVM 維護執行緒串列快照以進行無鎖讀取訪問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/430678.html
上一篇:索引金屬緩沖區的問題
下一篇:Xamarin形成expandableListView/Syncfusion/CollectionView問題以限制專案
