北斗系统 Vue全家桶 macos datetime generics cakephp get null openssl mui vue的钩子函数 后台界面模板 jquery清除子元素 centos查看python版本 matlab不等于怎么表示 linux重启mysql 二分查找python 安装python教程 python中def的用法 python中re模块 java抽象类 java包 java语言基础教程 java怎么连接数据库 java重命名 java网课 java获取url rar去广告 din字体下载 eclipse中文版下载 脚本大全 idataparameter 小程序开发工具下载 vue引入第三方js 解压tar ps出血 正当防卫4存档 js刷新当前页 透视网格工具怎么取消 魔兽天龙八部
当前位置: 首页 > 学习教程  > 编程语言

JVM最多支持多少个线程

2020/9/19 15:44:03 文章标签:

McGovernTheory在StackOverflow提了这样一个问题:

 

Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗?

 

Eddie的回答:

 

这取决于你使用的CPU,操作系统,其他进程正在做的事情,你使用的Java的版本,还有其他的因素。我曾经见过一台Windows服务器在宕机之前有超过6500个线程。当然,大多数线程什么事情也没有做。一旦一台机器上有差不多6500个线程(Java里面),机器就会开始出问题,并变得不稳定。

 

以我的经验来看,JVM容纳的线程与计算机本身性能是正相关的。

 

当然了,你要有足够的本机内存,并且给Java分配了足够的内存,让每个线程都可以拥有栈(虚拟机栈),可以做任何想做的事情。任何一台拥有现代CPU(AMD或者是Intel最近的几代)和1-2G内存(取决于操作系统)的机器很容易就可以支持有上千个线程的Java虚拟机。

 

如果你需要一个更精确的答案,最好是自己做压测。

 

Charlie Martin的回答:

 

这里有很多的参数(可以设置)。对于特定的虚拟机,都会有自己的运行时参数。(最大线程数)一定程度上由操作系统决定的:底层的操作系统要给线程提供哪些支持?施加哪些限制?虚拟机使用的是原生的操作系统的线程还是red thread或者green thread?

 

操作系统提供的支持是另一个问题。如果你向下面这样写Java程序:

 

 

 

 

 

(不要抱怨语法细节,这才刚刚开始)那你当然希望能得到成百上千个运行的线程。但是,创建一个线程的成本是相对较大的,(过多线程)调度的开销会变得突出。能否让这些线程做有用的事情还不确定。

 

升级版

 

好了,迫不及待了!下面是我的一个加了点润色的小的测试程序:

 

 

 

 

在Intel的OS/X 10.5.6系统上,Java 5的输出如下:

 

 

 

 

 

benjismith的回答:

 

读了Charlie Martin的回复以后,我很想知道堆内存的大小是否能够给创建的线程数带来不同,然后我就被结果惊呆了:在Vista Home Premium SP1系统上,使用JDK 1.6.0_11,设置堆内存的大小从2M到1024M来执行Charlie的测试程序。比如:创建2M的堆内存,我使用的虚拟机参数是:-Xms2m -Xmx2m.

 

下面是我的测试结果:

 

 

 

 

 

 

所以,堆的大小确实很重要。但是,堆大小和最大线程数却是呈反比例关系。

这太诡异了!

 

 

Neil Coffey的回答:

 

绝对理论上的最大线程数是进程的用户地址空间除以线程栈的大小(现实中,如果内存全部给线程栈使用,就不会有能运行的程序了)。因此,以32位Windows系统为例,每一个进程的用户地址空间是2G,假如每个线程栈的大小是128K,最多会有16384(=2*1024*1024 / 128)个线程。实际在XP系统上,我发现大约能启动13000个线程。

 

然后,我认为,你的问题本质上是:(a)你是否可以在你的代码中有效的管理许多的线程,不让他们做很显然是愚蠢的事情(比如:让他们在同一个object对象上等待随后被调用notifyAll()…),(b)操作系统是否可以有效地管理这许多线程。基本上来说,如果(a)的答案是”yes”的话,(b)的答案也是”yes”。

 

很巧的是,你可以在Thread的构造函数中设置线程栈的大小,但是,你不需要也不应该把这个和虚拟机参数弄混淆。


本文链接: http://www.dtmao.cc/news_show_200299.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?