首页 存档 技术 查看内容

JVM源码分析之一个Java进程究竟能创建多少线程

2018-3-30 13:00 |来自: 互联网 312 0

摘要: 点击上方“云栖社区”可以订阅哦 概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于Linux Kernel的源码分析,今天要说的是JVM里比较常见的一个问题。 这个问题可 ...

点击上方“云栖社区”可以订阅哦

概述


虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于Linux Kernel的源码分析,今天要说的是JVM里比较常见的一个问题。


这个问题可能有几种表述:

一个Java进程到底能创建多少线程?

到底有哪些因素决定了能创建多少线程?

java.lang.OutOfMemoryError: unable to create new native thread的异常究竟是怎么回事


不过我这里先声明下可能不能完全百分百将各种因素都理出来,因为毕竟我不是做Linux Kernel开发的,还有不少细节没有注意到的,我将我能分析到的因素和大家分享一下,如果大家在平时工作中还碰到别的因素,欢迎在文章下面留言,让更多人参与进来讨论。


从JVM说起


线程大家都熟悉,new Thread().start()即会创建一个线程,这里我首先指出一点new Thread()其实并不会创建一个真正的线程,只有在调用了start方法之后才会创建一个线程,这个大家分析下Java代码就知道了,Thread的构造函数是纯Java代码,start方法会调到一个native方法start0里,而start0其实就是JVM_StartThread这个方法。



从上面代码里首先要大家关注下最后的那个if判断if (native_thread-

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部