OutOfMemoryError系列(5): Unable to create new native thread

java.lang.OutOfMemoryError: Unable to create new native thread 错误表达的意思是: 程序创建的线程数量已达到上限值

原因分析

JVM向操作系统申请创建新的 native thread(原生线程)时, 就有可能会碰到 java.lang.OutOfMemoryError: Unable to create new native thread 错误. 如果底层操作系统创建新的 native thread 失败, JVM就会抛出相应的OutOfMemoryError. 原生线程的数量受到具体环境的限制, 通过一些测试用例可以找出这些限制, 请参考下文的示例. 但总体来说, 导致 java.lang.OutOfMemoryError: Unable to create new native thread 错误的场景大多经历以下这些阶段:

Java程序向JVM请求创建一个新的Java线程;

JVM本地代码(native code)代理该请求, 尝试创建一个操作系统级别的 native thread(原生线程);

操作系统尝试创建一个新的native thread, 需要同时分配一些内存给该线程;

如果操作系统的虚拟内存已耗尽, 或者是受到32位进程的地址空间限制(约2-4GB), OS就会拒绝本地内存分配;

JVM抛出 java.lang.OutOfMemoryError: Unable to create new native thread 错误。

你可能感兴趣的:(OutOfMemoryError系列(5): Unable to create new native thread)