为了账号安全,请及时绑定邮箱和手机立即绑定

在java 8上运行JStack会停止所有线程吗?

在java 8上运行JStack会停止所有线程吗?

蓝山帝景 2022-08-17 10:43:40
我正在执行JStack命令以在特定时间间隔内获取线程转储。我观察到,每当JStack执行时,目标进程上的所有线程都会停止。在查看了我的log4j 2日志后,我得出了这个结论,其中我发现在JStack运行期间没有日志记录。有人可以告诉我JSTack是否暂停/停止目标进程中的所有线程?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

是的,线程转储和堆转储是 JDK 8 中的停止世界操作。
HotSpot JVM 在全局安全点执行它们。

有关详细信息,请参阅答案和此答案。


查看完整回答
反对 回复 2022-08-17
?
PIPIONE

TA贡献1829条经验 获得超9个赞

获取任何线程(即使只有一个线程)的堆栈跟踪都会将所有线程都置于安全点。你可以用

每次因任何原因(不仅仅是 GC)停止 JVM 时,都会打印

-XX:+PrintGCApplicationStoppedTime

这将打印统计信息,包括停止的原因。

-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1

有一个计划引入一个线程特定的停止,但需要安全指向每个线程。jstack


查看完整回答
反对 回复 2022-08-17
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我认为在拍摄线程快照时,会有一个周期性的停止世界暂停。

https://dzone.com/articles/logging-stop-world-pauses-jvm

它不会改变传统意义上的线程状态。


查看完整回答
反对 回复 2022-08-17
  • 3 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信