3

我创建了一个程序来检查java中的最大线程数

public class Test extends Thread {
static int count;

public static void main (String [] args){
    for(;;){
        count++;
        System.out.println(count);
        new Test().start();
    }
}



@Override
public void run() {
    try {
        Thread.sleep(100000000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
    }

第一次迭代 -Xmx1024m ,max thread = 2011 > 第二次迭代 -Xmx512m ,max thread = 3350 > 第三次迭代 -Xmx2m ,max thread = 5112

我也尝试过设置 -Xss1m ,max thread = 1011,然后我设置了 -Xss256k max thread 4900+

我有两个问题
1)java中堆栈和堆大小的关系是什么?
2)在java中最大线程数取决于什么因素?

4

2 回答 2

2

如果您在 32 位 VM 上运行,则您的虚拟内存空间有限。在 32 位 Windows JVM 上,它可以小至 1.5 GB。每个线程都需要堆栈空间,因此堆后的可用空间越多,您可以拥有的线程就越多。在 32 位 Unix 上,您最多可以拥有 3.5 GB 的虚拟内存,但限制仍然存在。

如果您运行的是 64 位 JVM,则此限制会被取消,您可以拥有一个非常大的堆,例如 1 TB,但仍然不会限制您可以拥有的线程数。注意:在 Linux 上,Java 似乎被限制在大约 32K 线程。我不建议你在任何情况下都使用这样的数字,你应该尽量保持在几千以内。

于 2012-12-24T11:10:07.283 回答
0
May be the answer is  in 
java.lang.Runtime class
java.lang.management package
java.lang.instrument package
If you can see it in depth.
于 2012-12-24T11:38:03.540 回答