Java 最多支持多少个线程

文章讨论了Java在不同环境下能够支持的最大线程数,指出线程数量受到系统内存、JVM堆大小和方法区容量的影响。通常,32位Windows系统下进程限制约为2G内存,允许3000-5000个线程。线程池大小的配置建议为:CPU密集型应用设为N+1,IO密集型应用设为2N,其中N为CPU核心数。线程栈大小-Xss也会影响可创建的线程数量。
摘要由CSDN通过智能技术生成

(系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss
4G的服务器单个进程可以开大概5000个线程。
操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右
线程多了,就会有线程切换,带来性能开销。
jvm堆越大,系统创建的线程数量越小。
当-Xss的值越小,可生成线程数量越多。

//每个线程栈的大小
-Xss=128K

线程池大小

CPU 密集型应用,线程池大小设置为 N + 1
IO 密集型应用,线程池大小设置为 2N
线程池大小 = ((线程 IO time + 线程 CPU time )/线程 CPU time ) X CPU数目

corePoolSize:线程池的大小,当刚开始创建线程池时,线程数为0,当线程池中线程数量多于corePoolSize时会存于缓存队列
ArrayBlockingQueue:基于数组的先进先出队列,此队列创建时必须指定大小
LinkedBlockingQueue:基于链表的先进先出队列,如果创建时没有指定此队列大小,则默认为Integer.MAX_VALUE
synchronousQueue:这个队列比较特殊,它不会保存提交的任务,而是将直接新建一个线程来执行新来的任务
maxinumPoolSize:线程池容纳的最多线程数量
keepAliveTime:空闲线程的存活时间,一般情
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值