Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是限制Java应用程序中创建的线程数?_Java_Multithreading_Jvm - Fatal编程技术网

什么是限制Java应用程序中创建的线程数?

什么是限制Java应用程序中创建的线程数?,java,multithreading,jvm,Java,Multithreading,Jvm,下面的类似乎始终报告2542个线程为最大可能线程,而与分配给应用程序的内存无关。 这里限制线程的数量是什么?内存、CPU、内部JVM设置 谢谢 public static void main(String... args) { int taskNumber = 0; while (true) { try { new MyThread().start(); } catch (OutOfMemoryError e) {

下面的类似乎始终报告2542个线程为最大可能线程,而与分配给应用程序的内存无关。 这里限制线程的数量是什么?内存、CPU、内部JVM设置

谢谢

public static void main(String... args) {

    int taskNumber = 0;
    while (true) {
        try {
            new MyThread().start();
        } catch (OutOfMemoryError e) {
            System.out.println("Thread " + taskNumber+" could not be created.");
            System.exit(0);
        }
        taskNumber++;
    }
}

对于本机线程,限制在JVM进程的底层操作系统资源分配中


对于绿色线程,限制在JVM实现中,但它在单个本机线程上运行。

操作系统对它可以处理的线程数量有限制

要获取号码,请在计算机上执行相应的命令:

Linux:
sysctl内核.threads max

Mac OSX:
sysctl kern.num\u threads


添加:也许你可以在这个线程中找到一些有趣的答案:

@bluebrain不,Java使用本机OS线程机制;至少所有现代JVM(在Linux下,将使用
clone(2)
)都做到了,您已经完成了测试,在OSX 10.6 JDK6和8上测试了32位和64个JVM。在我的框中,根据sysctl,限制是2560,所以这就是我的限制的来源。最有可能的情况是,您有一个32位JVM,并且您的虚拟内存不足。注意:即使您有一个64位JVM,您可能会发现由于允许的内存映射数量的限制,限制在32K左右。在任何情况下,你可能会发现拥有比CPU更多的线程实际上是较慢的,而不是较快的,所以要明智地使用它们。在这种情况下,这纯粹是一个学术练习!简而言之,您正在耗尽不太可能成为堆的资源。事实上,如果虚拟内存不足,增加堆可以为其他事情(如线程堆栈)留下更少的空间。有趣的是,谢谢,我忽略了绿色线程的存在。