Java VisualVM如何显示未运行/未完成的线程?

时间:2018-11-13 06:23:47

标签: java multithreading jvm visualvm jvisualvm

enter image description here

为了进行测试,我创建了一个仅休眠的线程。而且我知道即使使用完毕,GC也不会在一段时间内收集它们,但是当您在完成它们的任务后不将它们保留为对象时,它们应该消失了。

因此,出于测试目的,我使用了Java VisualVM,但这是我第一次使用它。而且我看到所有这些计时器线程都在0ms左右,但我仍然可以看到它们。这正常吗?那是什么意思呢?如果我向成千上万的垃圾邮件发送垃圾邮件,会降低我的应用程序运行速度吗?

2 个答案:

答案 0 :(得分:0)

您将看到所有Thread-线程,因为默认情况下,VisualVM将向您显示所有线程(包括那些在监视会话期间完成的线程)。要仅查看Live个线程,请将View组合从All threads切换到Live threads。 VisualVM不会保留对所有启动线程的引用,可以对它们进行垃圾回收。

答案 1 :(得分:-1)

一旦VisualVM连接到正在运行的JVM, it 将保留对所有启动线程的引用,因此当线程停止运行时,不会Thread对象被垃圾回收。

它们由VisualVM保留,因此您仍然可以查看为其收集的统计信息。

一旦退出VisualVM,Thread对象将变得不可访问且可访问GC,因此停止和重新启动VisualVM将“清除”已结束线程的列表。