JVM中的最大线程数?

Cra*_*cke 19 java

Java虚拟机可以维护的最大线程数是多少?

我没有在原始问题中解释这一点,但我试图对JVM进行基准测试,并希望尝试查看它可以同时维护多少个线程.

在循环中创建线程直到抛出异常是一个选项,但是,我想知道是否有更好的方法来执行此操作.

flo*_*lob 33

您的操作系统和硬件配置会受到一些限制.

要增加并发线程数,您应该降低默认的stacksize java -Xss 64k.

  • Oracle 32位JVM 默认为每个线程320kb堆栈大小.
    • 对于具有2gb可寻址内存的32位JVM,这将为您提供最多6.5k个线程.
  • Oracle 64位JVM 默认为每个线程1M的堆栈大小.
    • 对于每千兆字节的内存,您将使用默认值获得1024个线程.
  • 仅适用于Linux:
    • ulimit -a 将为您提供用户进程和内存的配置限制
    • 你只能在linux中获得32k个独特的PID cat /proc/sys/kernel/pid_max- 最多32k个进程.
    • 你将只获得255k线程 cat /proc/sys/kernel/threads-max


Jay*_*Jay 10

编写一个创建新线程的循环,直到它爆炸为止是确定的最终方法.在实际死亡之前,您可能会看到性能严重下降.

我不知道JVM中是否有任何配置参数或其他内置限制.我在练习中从未遇到过限制.当然,迟早你会耗尽内存,也许是其他一些资源.

我怀疑线程数本​​身没有限制,而是与线程相关的资源.也就是说,你可能会看到你可以拥有10,000个线程,如果它们只运行一个只有几个字节数据的小类,但当它们各自拥有一千万个字符串的数组时,它会快速下降.


Mau*_*rry 7

如果存在限制,则将由操作系统强加,而不是jvm