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 Heap也是一个抽象。JVM线程之间的共享不是本机线程堆栈更多。堆也可能具有线程局部区域。同时,本机线程堆栈驻留在虚拟内存中,该虚拟内存也在进程的所有线程之间共享。
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |