发现关于JVM最大支持线程数的文章都比较老,有没有同学研究过这个.
最常见的公式是:(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize)
感觉总是对不上号.
使用虚拟机做了个试验,配置
ubuntu18.04 4G内存+ openjdk8
1. java -Xms512m -Xmx512m -Xss1024k Hello
2. java -Xms1024m -Xmx1024m -Xss1024k Hello
3. java -Xms2024m -Xmx2024m -Xss1024k Hello
4. java -Xms1024m -Xmx1024m -Xss512k Hello
得到的结果都没有变化.
如果按照上面公式所说的,默认ThreadStackSize为1m, 那么理论上自己创建的线程最大应该4000, 实际结果是9000
如果每个线程1m, 9000不是9G了? 这不可能啦.
所以疑惑是不是在jdk8后, JVM做了某些改进? 那么具体是如何呢?
最常见的公式是:(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize)
感觉总是对不上号.
使用虚拟机做了个试验,配置
ubuntu18.04 4G内存+ openjdk8
1. java -Xms512m -Xmx512m -Xss1024k Hello
2. java -Xms1024m -Xmx1024m -Xss1024k Hello
3. java -Xms2024m -Xmx2024m -Xss1024k Hello
4. java -Xms1024m -Xmx1024m -Xss512k Hello
得到的结果都没有变化.
如果按照上面公式所说的,默认ThreadStackSize为1m, 那么理论上自己创建的线程最大应该4000, 实际结果是9000
如果每个线程1m, 9000不是9G了? 这不可能啦.
所以疑惑是不是在jdk8后, JVM做了某些改进? 那么具体是如何呢?