我知道一些虚拟机,比如Harmony JVM将Java Stack和Native Stack放在一个栈中,并使用M2N Frame为每个线程执行堆栈展开。
其他一些JVM似乎将它们分开。我的问题是,对于设置JVM最大堆栈大小的Xss选项,它是否覆盖Java堆栈的总大小,还包括本地堆栈的大小?
我知道一些虚拟机,比如Harmony JVM将Java Stack和Native Stack放在一个栈中,并使用M2N Frame为每个线程执行堆栈展开。
其他一些JVM似乎将它们分开。我的问题是,对于设置JVM最大堆栈大小的Xss选项,它是否覆盖Java堆栈的总大小,还包括本地堆栈的大小?
HotSpot没有单独的本地和Java堆栈。
另一个例证可以在这篇博客文章中找到,该文章涉及堆栈大小调整:
请注意,您的操作系统可能会将由-Xss参数指定的堆栈大小值四舍五入。小心。
因此,似乎hotspot每个线程只有一个堆栈,实际上是本机提供的堆栈(因此会进行四舍五入)。
还有一些证据在这里:
在HotSpot实现中,Java方法与C / C ++本机代码共享堆栈帧,即用户本机代码和虚拟机本身
最后,在openjdk源代码中这里:
// HotSpot没有单独的本地和Java堆栈