Threads_lock在jvm中的作用是什么,将使用哪些场景



我遇到了一个问题:在management.cpp中,jmm_GetThreadInfo方法会首先获取Threads_lock锁,假设线程太多,而且非常耗时,这导致了一个不明显的问题:其他一些线程被阻塞,一直在等待释放这个锁,但我找不到线程将在哪里触发,突然在这个锁上被阻塞。

我有一些问题:

  1. Threads_lock在jvm中的角色以及将使用哪些场景
  2. Threads_lock是否会导致其他线程阻塞

Threads_lock在互斥锁.cpp中。官方解释是

a lock on the Threads table of active Java threads
(also used by Safepoints too to block threads creation/destruction)

thranks

Threads_lock保护JVM托管线程的列表不受并发修改的影响。锁是在新线程启动时、线程退出时以及在安全点获取的。Threads_lock不会阻止正在运行的线程执行其常规工作。

在JDK8中,Threads_lock也是为了对现有线程列表进行迭代而获得的,这确实导致了性能问题。自JDK10以来,JVM维护线程列表快照以实现无锁读取访问。

最新更新