在HotSpot JVM中,如何使更多的内存可用于线程堆栈?

时间:2019-02-18 13:08:18

标签: java jvm out-of-memory java-threads hotspot

在JVM中,您可以使用-Xmx控制堆的大小,并使用-Xss控制堆栈的大小。

但是,如果创建的线程过多,则会遇到错误:

  

线程“ main”中的异常java.lang.OutOfMemoryError:无法执行   创建新的本机线程

JVM Specification中,它允许在堆栈上分配线程堆栈:

  

因为除了推送和弹出帧外,从不直接操纵Java虚拟机堆栈,所以帧可能是堆分配的

但是,似乎JRockit在堆之外分配了线程堆栈内存:

  

请注意,JVM使用的内存不仅仅是堆。例如,Java方法,线程堆栈和本机句柄在与堆分开的内存以及JVM内部数据结构中分配。

HotSpot中,它只是说:

  

Hotspot中的基本线程模型是Java线程(java.lang.Thread的一个实例)与本机操作系统线程之间的1:1映射。

这是否意味着HotSpot将继续创建更多线程,直到我们耗尽操作系统内存为止?

如果没有,我们如何告诉JVM为线程分配更多的内存?

谢谢

0 个答案:

没有答案