我知道像Harmony JVM这样的虚拟机将Java Stack和Native Stack放在一个堆栈中,并为每个线程使用M2N Frame执行堆栈展开.
其他一些JVM似乎将它们分开.我的问题是JVM的Xss选项设置JVM的最大堆栈大小覆盖Java堆栈的总大小还是包括本机堆栈的大小?
我没有明确的答案,但当你看一下当热点成为默认vm时发布的一些文件,你可以看到这一点,其中说明:
HotSpot没有单独的本机和Java堆栈
另一个轶事证据可以在这篇博文中找到,它涉及堆栈大小调整:
请注意,您的操作系统完全有可能对-Xss参数指定的堆栈大小的值进行舍入.注意这一点.
所以看起来热点每个线程有一个堆栈,实际上是本机的os提供的堆栈(因此是舍入的).
有一些更多的证据在这里:
在HotSpot实现中,Java方法与C/C++本机代码共享堆栈帧,即用户本机代码和虚拟机本身
最后,在openjdk源代码中:
// HotSpot没有单独的本机和Java堆栈
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |