JVM堆分配或栈分配框架?

JVM规范(JSE 8版)提到:

第12页:2.5.2 JVM堆栈:“因为除了推送和弹出帧之外,JVM堆栈不会被直接操作,所以可能会分配堆。”

页面15:2.6:框架:“框架从创建框架的线程的JVM堆栈中分配。” 并且在第16页上:“请注意,由线程创建的框架对于该线程是本地的,并且不能由任何其他线程引用。”

这听起来让我感到困惑。 由于帧是创建帧的线程本地的,为什么在堆中分配帧,因为堆是在所有JVM线程之间共享的? 除非在这里遗漏某些东西,否则没有任何意义。 第12页的句子是一个有趣的陈述。

任何提示? 谢谢。


JVM堆栈是一个抽象。 它可能被分配到任何地方或任何地方。 例如,如果一个方法由JIT内联,它没有单独的堆栈框架。

HotSpot JVM使用本地线程堆栈作为JVM堆栈。 但是,有一些JVM实现(例如CLDC HI)可以在Java Heap中分配JVM堆栈。 这种方法的好处是对包括线程堆栈在内的所有东西都拥有单一的内存管理。 这样的JVM可以在没有标准内存管理器(如libc)或甚至没有OS的平台上运行。

JVM堆也是一个抽象。 JVM线程之间的“共享”不比本地线程堆栈更“共享”。 堆可能也有线程局部区域。 同时,本地线程堆栈驻留在虚拟内存中,该虚拟内存也在进程的所有线程之间共享。

链接地址: http://www.djcxy.com/p/14519.html

上一篇: Is frame in JVM heap allocated or stack allocated?

下一篇: Threading heap and stack