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

plicqrtu  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(110)

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

  1. JVM中Threads_lock的角色以及将使用的方案。
  2. 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)

thrank的复数

xggvc2p6

xggvc2p61#

Threads_lock保护JVM管理的线程列表不被并发修改。在新线程启动、线程退出以及在安全点时获取锁。Threads_lock不会阻止正在运行的线程执行其常规工作。
在JDK 8中,Threads_lock也被用于迭代现有线程的列表,这确实导致了性能问题。从JDK 10开始,JVM维护线程列表快照,用于无锁读访问。

相关问题