我创建了一个程序来检查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中,最大线程数取决于什么因素?
答案 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.