java虚拟机能并发的启动多少个线程
新建一个类,导入如下的测试代码:
1 public class TestNativeOutOfMemoryError { 2 public static void main(String[] args) { 3 4 for (int i = 0;; i++) { 5 System.out.println("i = " + i); 6 new Thread(new HoldThread()).start(); 7 } 8 } 9 10 } 11 12 class HoldThread extends Thread { 13 CountDownLatch cdl = new CountDownLatch(1); 14 15 public HoldThread() { 16 this.setDaemon(true); 17 } 18 19 public void run() { 20 try { 21 cdl.await(); 22 } catch (InterruptedException e) { 23 } 24 } 25 }
在我的开发环境上运行结果如下:
1 ...... 2 i = 3935 3 Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread 4 at java.lang.Thread.start0(Native Method) 5 at java.lang.Thread.start(Thread.java:714) 6 at com.study.thinking.in.java.concurrent.TestNativeOutOfMemoryError.main(TestNativeOutOfMemoryError.java:15)
每次运行结果并不完全一致,但是大差不差。
影响结果的几个参数:
1. 物理内存 使用64位OS能给虚拟机分配更大内存
2.JVMMemory 减少这项参数能增加并发的线程数,非倍数关系 -Xms1024m -Xmx1024m并不能比-Xms512m -Xmx512m多一倍的线程
3.ThreadStackSize 减少单个线程的栈大小,在有效范围内,是倍数关系
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了