gpt4 book ai didi

java - JVM中的frame是堆分配的还是栈分配的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:35 25 4
gpt4 key购买 nike

JVM规范(JSE 8版)提到:

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

第 15 页:2.6:框架:“框架是从创建框架的线程的 JVM 堆栈中分配的。”在第 16 页:“请注意,一个线程创建的帧是该线程的本地帧,不能被任何其他线程引用。”

这听起来让我很困惑。由于框架对于创建框架的线程是本地的,为什么在堆中分配框架,因为堆在所有 JVM 线程之间共享?除非这里遗漏了什么,否则这没有意义。第 12 页上的句子是一个有趣的陈述。

有什么提示吗?谢谢。

最佳答案

JVM 堆栈是一种抽象。它可以分配到任何地方,也可以根本不分配到任何地方。例如。如果方法由 JIT 内联,则它没有单独的堆栈框架。

HotSpot JVM 使用 native 线程堆栈作为 JVM 堆栈。然而,有一些 JVM 实现(例如 CLDC HI)在 Java 堆中分配 JVM 堆栈。这种方法的好处是对包括线程堆栈在内的所有内容进行单一内存管理。这样的 JVM 可以在没有标准内存管理器(如 libc)甚至没有操作系统的平台上运行。

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

关于java - JVM中的frame是堆分配的还是栈分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com