在java中创建什么因子最大线程,堆大小是否与线程的最大值成反比?

时间:2012-12-24 10:47:10

标签: java multithreading

我创建了一个程序来检查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,最大线程= 5112

     

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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.