我遇到了一个问题:在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)
thrank的复数
1条答案
按热度按时间xggvc2p61#
Threads_lock
保护JVM管理的线程列表不被并发修改。在新线程启动、线程退出以及在安全点时获取锁。Threads_lock
不会阻止正在运行的线程执行其常规工作。在JDK 8中,
Threads_lock
也被用于迭代现有线程的列表,这确实导致了性能问题。从JDK 10开始,JVM维护线程列表快照,用于无锁读访问。