在JVM中,您可以使用-Xmx控制堆的大小,并使用-Xss控制堆栈的大小。
但是,如果创建的线程过多,则会遇到错误:
线程“ main”中的异常java.lang.OutOfMemoryError:无法执行 创建新的本机线程
在JVM Specification中,它允许在堆栈上分配线程堆栈:
因为除了推送和弹出帧外,从不直接操纵Java虚拟机堆栈,所以帧可能是堆分配的
但是,似乎JRockit在堆之外分配了线程堆栈内存:
请注意,JVM使用的内存不仅仅是堆。例如,Java方法,线程堆栈和本机句柄在与堆分开的内存以及JVM内部数据结构中分配。
在HotSpot中,它只是说:
Hotspot中的基本线程模型是Java线程(java.lang.Thread的一个实例)与本机操作系统线程之间的1:1映射。
这是否意味着HotSpot将继续创建更多线程,直到我们耗尽操作系统内存为止?
如果没有,我们如何告诉JVM为线程分配更多的内存?
谢谢