java - 为什么 VisualVM 本身运行 50 个线程?

标签 java multithreading visualvm

更新

提出这个问题的另一种方式是“应用程序可用的线程数量是否有必要超过内核数量?”。

原始问题

我的笔记本电脑上共有 8 个核心。我刚刚下载了最新版本的 VisualVM,然后单击 VisualVM 选项卡来查看它的运行情况。我注意到的一件事是它使用 32 个 Activity 线程和 22 个守护线程。为什么要用这么多呢? IIUC 使用超过 8 个的效率较低,IIUC JVM 知道我有多少个核心,因此它可以将线程总数限制为 8。

有人将此标记为重复,因此我将尝试以不同的方式解释我的要求。我不是在问如何使用 VisualVM 的特定功能。我问为什么它运行超过 8 个线程,因为 IIUC 超过 8 个线程将不是最佳的,而 VisualVM 来自 Oracle,所以我认为他们会将其设计为以最佳方式运行,所以我想知道我是否遗漏了一些东西,或者 Oracle 只是允许它运行比应运行的线程更多的线程?

最佳答案

仅仅因为您有 50 个 VisualVM 线程正在运行,并不一定意味着所有这些线程都应该同时活跃地工作。如果您对“正在运行”列进行排序,您将看到只有前 7 或 8 个线程正在运行。其余线程正在 hibernate 或等待 I/O。

关于java - 为什么 VisualVM 本身运行 50 个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268239/

相关文章:

java - EEE 的日期格式是什么,dd MMM yyyy HH :mm:ssZ?

java - JDBC 不需要的语句关闭

java - 为什么 VisualVM Profiler 不能分析我的应用程序?

eclipse - 打开堆转储时出错

java - 按值和索引搜索数组

java - 设置当前位置

java - android 作业队列路径优先级

wpf - WPF中的“Please wait” Windows

java - 无法从 VisualVM 通过 JMX+SSL 进行连接

java - 从 Java 中的字符串解析 int、double 和 String