3

有最大值吗?可能是因为底层操作系统确实只允许每个进程有“X”个线程等?

4

3 回答 3

4

这取决于您使用的 CPU、操作系统、其他进程正在执行的操作、您使用的 Java 版本以及其他因素。在关闭机器之前,我已经看到 Windows 服务器有 > 6500 个线程。当然,大多数线程都没有做任何事情。一旦机器达到大约 6500 线程(Java 中),整台机器就开始出现问题并变得不稳定。

我的经验表明,Java(最新版本)可以愉快地使用计算机本身可以承载的尽可能多的线程,而不会出现问题。

当然,您必须有足够的 RAM,并且您必须以足够的内存启动 Java,以完成线程正在执行的所有操作,并为每个线程拥有一个堆栈。任何具有现代 CPU(最近几代 AMD 或 Intel)和 1 - 2 Gig 内存(取决于操作系统)的机器都可以轻松支持具有数千个线程的 JVM。

如果您需要比这更具体的答案,最好的办法是进行分析。

于 2013-01-17T12:59:55.037 回答
3

总是有一些最大值,但它是什么以及它是如何确定的却千差万别。除其他外,该限制可以由 JVM 上的总内存分配池限制或显式操作系统级别限制隐式施加。绕过内存限制的一种方法是使用较小的堆栈大小配置 JVM。

请参阅此答案以了解如何在 Linux 上确定限制。

于 2013-01-17T13:04:46.093 回答
2

在 Linux 上,我最多看到了 ~32000,之后它无法创建新线程。如果您有 CPU 密集型任务,则最佳线程数可能是您拥有的 CPU 数,因此拥有这样的数字通常不是一个好主意。

于 2013-01-17T13:06:09.567 回答