nested exception is java.lang.OutOfMemoryError: unable to create new native thread |
这个错误是因为无法再创建新线程导致的,原因可能是没有更多的空间用于创建线程,还有一个公式用来计算:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads |
这其中各个参数的意思是:
MaxProcessMemory:进程最大寻址空间。
JVMMMEMORY:jvm的内存空间(堆+永久区)-Xmx大小 (应该是实际分配大小)
ReservedOsMemory:操作系统预留内存
ThreadStackSize:-Xss大小
Xss与线程个数
Xss越大,每个线程的大小就越大,占用的内存越多,能容纳的线程就越少。
Xss越小,则递归的深度越小,容易出现栈溢出 java.lang.StackOverflowError。
减少局部变量的声明,可以节省栈帧大小,增加调用深度。