点击上方 蓝色字体 ,选择“设置星标”
优质
作者:miracle1919 来源:
McGovernTheory在StackOverflow提了这样一个问题: Java虚拟机最多支持多少个
Eddie的
这取决于你使用的CPU,操作系统,其他
以我的经验来看,
当然了,你要有足够的本机内存,并且给Java分配了足够的内存,让每个线程都可以拥有栈(虚拟机栈),可以做任何想做的事情。任何一台拥有现代CPU(AMD或者是Intel最近的几代)和1-2G内存(取决于操作系统)的机器很容易就可以支持有上千个线程的Java虚拟机。
如果你需要一个更精确的答案,最好是自己做压测。
Charlie Martin的回答:
这里有很多的
操作系统提供的支持是另一个问题。如果你向下面这样写Java程序:
class DieLikeADog {
public static vo main(String[] argv){
for(;;){
new Thread(new SomeRunaable).s
}
}
}
(不要抱怨语法细节,这才刚刚开始)那你当然
升级版
好了,迫不及待了!下面是我的一个加了点润色的小的
public class DieLikeADog{
private static Object s = new Object();
private static int count = 0;
public static void main(String[] argv){
for(;;){
new Thread(new Runnable(){
public void run(){
count += 1;
System.err.println("New thread #"+count);
}
for(;;){
try {
Thread.sleep(1000);
}
System.err.println(e);
}
}
}
}).start();
}
}
}
在Intel的OS/X 10.5.6系统上,Java 5的输出如下:
New thread #2547
New thread #2548
New thread #2549
Can’t create thread: 5
New thread #2550
Exception in thread "main" to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:592)
at DieLikeADog.main(DieLikeADog.java:6)
benjismith的回答:
读了Charlie Martin的回复以后,我很想知道堆内存的大小是否能够给创建的线程数带来不同,然后我就被结果惊呆了:在Vista Home Premium SP1系统上,使用JDK 1.6.0_11,设置堆内存的大小从2M到1024M来执行Charlie的测试程序。比如:创建2M的堆内存,我使用的虚拟机参数是:-Xms2m -Xmx2m.
下面是我的测试结果:
2 mb –> 5744 threads
4 mb –> 5743 threads
8 mb –> 5735 threads
12 mb –> 5724 threads
16 mb –> 5712 threads
24 mb –> 5687 threads
32 mb –> 5662 threads
48 mb –> 5610 threads
64 mb –> 5561 threads
96 mb –> 5457 threads
128 mb –> 5357 threads
192 mb –> 5190 threads
256 mb –> 5014 threads
384 mb –> 4606 threads
512 mb –> 4202 threads
768 mb –> 3388 threads
1024 mb –> 2583 threads
所以,堆的大小确实很重要。但是,堆大小和最大线程数却是呈反比例关系。
这太诡异了!
Neil Coffey的回答:
绝对理论上的最大线程数是进程的用户地址
然后,我认为,你的问题
很巧的是,你可以在Thread的构造函数中设置线程栈的大小,但是,你不需要也不应该把这个和虚拟机参数弄混淆。
遗漏热文?赶紧标星
1. 阿里社招面试指南
2. 阿里应届生面试指南
3. 探寻
4. 到底线程池应该设置多少合适?
5. 跳槽的必备条件是有一份好的简历
6. 不是所有的 Github 都适合写在简历上
7. 所没有项目经验找工作处处碰壁怎么办
8. 每一个开发人员都应该懂得的 UML 规范
9. 工作环境没机会接触
10. 这算是有史以来讲
11. 你以为认为 count(1) 比 count(*) 效率高么?
12. 用了这么多年