JVM最多支持多少个线程?
点击上方“方志朋”,选择“置顶公众号”
技术文章第一时间送达!
原文:www.jb51.net/article/49087.htm
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程序:
class DieLikeADog {public static void main(String[] argv){for(;;){new Thread(new SomeRunaable).start();}}}
(不要抱怨语法细节,这才刚刚开始)那你当然希望能得到成百上千个运行的线程。但是,创建一个线程的成本是相对较大的,(过多线程)调度的开销会变得突出。能否让这些线程做有用的事情还不确定。
升级版
好了,迫不及待了!下面是我的一个加了点润色的小的测试程序:
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(){synchronized(s){count += 1;System.err.println("New thread #"+count);}for(;;){try {Thread.sleep(1000);} catch (Exception e){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" java.lang.OutOfMemoryError: unable to create new native threadat 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的回答:
绝对理论上的最大线程数是进程的用户地址空间除以线程栈的大小(现实中,如果内存全部给线程栈使用,就不会有能运行的程序了)。因此,以32位Windows系统为例,每一个进程的用户地址空间是2G,假如每个线程栈的大小是128K,最多会有16384(=210241024 / 128)个线程。实际在XP系统上,我发现大约能启动13000个线程。
然后,我认为,你的问题本质上是:(a)你是否可以在你的代码中有效的管理许多的线程,不让他们做很显然是愚蠢的事情(比如:让他们在同一个object对象上等待随后被调用notifyAll()…),(b)操作系统是否可以有效地管理这许多线程。基本上来说,如果(a)的答案是”yes”的话,(b)的答案也是”yes”。
很巧的是,你可以在Thread的构造函数中设置线程栈的大小,但是,你不需要也不应该把这个和虚拟机参数弄混淆。
原文:www.jb51.net/article/49087.htm
热门内容:
微服务架构之「 容错隔离 」
Sharding-jdbc教程:Mysql数据库主从搭建
谈谈服务雪崩、降级与熔断
从零开始搭建创业公司后台技术栈
基于SpringBoot开发一个Restful服务,实现增删改查功能
开发者说:基于 Nacos 的网关灰度路由和服务权重灰度
如何在微服务架构中实现安全性?
Spring Cloud Alibba教程:Sentinel的使用
感谢搓一下“在看
JVM最多支持多少个线程?相关推荐
- JVM 最多支持多少个线程?
McGovernTheory在StackOverflow提了这样一个问题: Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗? Eddie的回答: 这取决于你使用 ...
- Java虚拟机最多支持多少个线程的探讨
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源 | jb51.net/article/49087.htm McGovernTheory ...
- java虚拟机线程数_Java虚拟机最多支持多少个线程?
作者:miracle1919 来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商 ...
- JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程
2019独角兽企业重金招聘Python工程师标准>>> JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程 博客分类: java jvm 前言: 上一 ...
- sql 时间范围查询_Excel中使用SQL查询,单元格范围最多支持65536行?
1.先建立一个excel,本人的版本为2016 2.然后向下填充数字,操作为填充--序列 这样生成1-66666的序列 3.使用SQL查询语句,进行查询 使用语句 : select 序列 from [ ...
- 可遇不可求的Question之不支持一个STA 线程上针对多个句柄的WaitAll
不支持一个 STA 线程上针对多个句柄的 WaitAll. 题设: 在.NET开发多线程控制台程序过程中,由于业务要求,需要实现"一次扫描多笔订单",然后,通过多线程实现并发提交的 ...
- WPF 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
该问题出现在WPF中的VM类中,ObservableCollection类型,该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改, ...
- Python 多线程 threading.Thread 同时最多有 n 个线程
Regular无限多线程 import threading import numpy as np import timeclass BuildThread(threading.Thread):def ...
- Line推出新语音群聊功能 最多支持200人
3月11日,据科技博客VentureBeat报道,日本移动通讯巨头Line公司近日宣布,为支持企业电话会议,该公司将在最新版Line应用中增加语音群聊功能,最多支持200人同时群聊. Line的这项新 ...
最新文章
- 实用插件_这些实用的PR插件你知道吗?
- Sprint(第一天11.14)
- 了解员工工作的四种方法
- MySQL各部门求最值_mysql 求分组最大值的十个解法
- Linux系统调优概述
- 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
- object数据类型
- php5.4 windows2003,PHP实战:Windows2003下php5.4安装配置教程(IIS)
- 根文件系统定制【ZT】
- poj 楼天成的男人八题系列 A New Stone Game 博弈问题
- 图片拉伸和保持长宽比的问题
- 9.FLINK Sink\API\自定义sink
- 网站QQ扫码登录代码及详细说明
- 前端面试题汇总及答案十二
- 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)
- Scratch中基本演绎法小故事
- 计算机系统千年虫问题
- DataFrame的数据处理笔记
- ros摄像头参数标定
- Axure 运行开发工具