日期:2014-05-20  浏览次数:20643 次

java jvm最大支持启动多少个线程?
我简单做了一下测试.
用for   循环启动1000个线程,
每个线程的run()中只写两句  
println( 'start ')  
sleep(2000)   //休眠2秒.

1000个线程启动完成(for循环结束).只用了十几豪秒.

当我把1000改成10000的时候.
共用了5000多豪秒.  
我想是因为jvm   限制了最多启动的线程数,   当线程数超过最大数时,要启动新的线程必须要等待其它线程运行完才能启动.  
假如我把sleep(2000),改成sleep(1),完成启动10000个thread只需要100多豪秒.  

由此可见jvm是有最大启动线程限制的,我想知道有没有具体的数字.




------解决方案--------------------
gc会耗费时间
------解决方案--------------------
mark 一下,没注意过
------解决方案--------------------
应该跟JVM所允许的最大内存有关吧
------解决方案--------------------
应该不是线程数有限制造成了这种现象,可能是因为线程数和线程之间切换还有内存分配时间等等的关系不是正比造成的,所以当线程数由1000变成10000时,启动时间不是由几十毫秒变成了几百毫秒!