Threads_lock在jvm中有什么作用,会用到哪些场景
What is the role of Threads_lock in jvm and which scenarios will be used
我遇到了一个问题:在management.cpp中,jmm_GetThreadInfo方法会先获取Threads_lock锁,假设线程太多,非常耗时,这导致了一个不明显的问题:其他一些线程被阻塞了,一直在等待这个锁被释放,但是我找不到线程会在哪里触发突然阻塞在这个锁上。
我有一些问题:
- Threads_lock在jvm中的作用以及会用到哪些场景
- Threads_lock是否会导致其他线程阻塞。
Threads_lock是在mutexLocker.cpp.The官方解释是
a lock on the Threads table of active Java threads
(also used by Safepoints too to block threads creation/destruction)
谢谢
Threads_lock
保护 JVM 管理的线程列表免受并发修改。当新线程启动时、线程退出时以及在安全点时获取锁。 Threads_lock
不会阻止 运行 个线程执行它们的常规工作。
在JDK 8 中,Threads_lock
也被用于遍历现有线程列表,这确实导致了性能问题。自 JDK 10 起,JVM 维护 lock-free 读取访问的线程列表快照。
我遇到了一个问题:在management.cpp中,jmm_GetThreadInfo方法会先获取Threads_lock锁,假设线程太多,非常耗时,这导致了一个不明显的问题:其他一些线程被阻塞了,一直在等待这个锁被释放,但是我找不到线程会在哪里触发突然阻塞在这个锁上。
我有一些问题:
- Threads_lock在jvm中的作用以及会用到哪些场景
- Threads_lock是否会导致其他线程阻塞。
Threads_lock是在mutexLocker.cpp.The官方解释是
a lock on the Threads table of active Java threads
(also used by Safepoints too to block threads creation/destruction)
谢谢
Threads_lock
保护 JVM 管理的线程列表免受并发修改。当新线程启动时、线程退出时以及在安全点时获取锁。 Threads_lock
不会阻止 运行 个线程执行它们的常规工作。
在JDK 8 中,Threads_lock
也被用于遍历现有线程列表,这确实导致了性能问题。自 JDK 10 起,JVM 维护 lock-free 读取访问的线程列表快照。