JVM 中的帧是在堆中分配还是在堆栈中分配?

2023-11-23

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 堆中分配 JVM 堆栈。这种方法的好处是对包括线程堆栈在内的所有内容进行单一内存管理。这样的 JVM 可以在没有标准内存管理器(如 libc)甚至没有操作系统的平台上运行。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM 中的帧是在堆中分配还是在堆栈中分配? 的相关文章

随机推荐

  • 如何加密非阻塞 PHP 套接字流?

    我正在尝试以非阻塞 异步 方式使用 PHP 的stream socket client 函数 PHP 网站上的文档表明 STREAM CLIENT ASYNC CONNECT 选项标志应该启用此功能 然而 下面的代码 start time
  • C# .net 更改标签文本

    您好 我尝试使用此代码 但由于某种原因它不起作用 确实需要帮助 问题是当我进入网站时 标签不会从 标签 更改名称
  • 是否可以在我的网站上禁用 IE8“加速器”?

    我是一名专注于 UI 的 Web 开发人员 我的 Web 应用程序中的许多界面功能都是基于双击的 在 IE 中 这会带来新的烦人的问题 加速器 图标干扰我的用户界面 是否可以禁用我的页面上的 加速器 也许有一些新的愚蠢的特定于 IE 的me
  • 如何捕获div中的一行文本

    我浏览过与此相关的类似 SO 帖子 但没有一个完全符合我正在寻找的内容 假设我有一些文本 我将其放入 div 中 然后向该 div 添加一些任意 甚至可能是动态 宽度 有没有什么方法可以让我以编程方式捕获和操作 div 中的各个文本行 例如
  • Json.NET 按深度和属性序列化

    例如我们有两个类 class FooA SomeSpecialAttribute public int SomeValueA get set public int SomeValueB get set public int SomeValu
  • Persistence.xml放在eclipse项目的哪里

    简单的问题 我在Eclipse环境中有一些项目MainApp 企业应用项目 其中 包含 Web控制器 EJB项目 WebModel JPA 项目 WebView 动态Web项目 问题是 persistence xml 文件放在哪里 获取异常
  • Spring Boot、静态资源和mime类型配置

    我面临着无法处理的 Spring Boot 配置问题 我正在尝试使用 Spring Boot 为 HbbTV 构建一个 HelloWorld 示例 因此我需要使用 mime type application vnd hbbtv xhtml
  • 从本地服务器迁移到 Azure:TIMEZONE UTC。怎么解决?

    我设计我的应用程序时考虑到了这样一个事实 根据规范 应该在位于意大利的服务器上运行 并且客户端只能是意大利人 大约一个月前 我的老板决定将所有内容都放在 Azure 上 一切都很顺利 唯一给我带来问题的是时间服务器是 UTC 解决方案是 一
  • 标记为“内容”->“始终复制”的文件不会被复制

    我的 C VS2010 项目的文件夹中有一个文件标记为Content and Always Copy 当我更改此文件并将其保存到 VS 外部 然后运行该项目时 修改后的文件不会复制到输出中 如果我重建 那就是 我的猜测是VS不会使用文件的修
  • 在自定义 powershell 函数中模拟 -ErrorAction

    如何在自定义 powershell 函数中模拟 ErrorAction 例如考虑以下脚本 function Foo2 Write Host in Foo2 Error occurs Foo3 function Foo1 Write Host
  • 是否值得在代码中缓存 glsl 统一位置?

    我希望能够通过着色器中的实际名称设置制服 myProgram uniform3fv uniformVector 0 0f 0 1f 1 0f 我是否必须以某种形式的地图缓存位置 std map
  • Android 片段显示为对话框片段或普通片段

    我想要实现的是有一个片段 在平板电脑上显示为DialogFragment 而在智能手机上它将显示为常规片段 我知道已经有一个类似的帖子 但我无法做到这一点 将样式应用于片段 为了自上而下地显示内容 MainActivity java pub
  • Javascript 中的 Infinity 属性有什么用?

    为什么 Infinity 属性用作命令 而不是结果 例如 下面的代码可以工作 但结果不是我所期望的 alert isOdd Infinity function isOdd num return num 2 1 MDN 参考 无穷大是全局对象
  • NHibernate 中有算术运算投影吗?

    我想从 NHibernate 获取此 SQL SELECT SUM color pages SUM total pages FROM connector log entry GROUP BY department name 但我在任何地方都
  • Google 表格中的动态货币换算

    我正在使用 Google 表格来组织我的全球版税报表中的数据 目前 我正在查询多个选项卡 每个国家 地区一个 以生成包含所有国家 地区结果的单个表 正如您可以想象的那样 我不希望 125 日元在我的图表中显示为 125 美元 125 Y 相
  • 一旦参与者被放入路由器,就会出现“遇到死信”

    这就是我所发现的 但我一生都无法找到原因 我正在创建 打印机 参与者 它们基本上要么不执行任何操作 要么根据收到的消息类型打印消息 class Printer extends Actor def receive case m SomeMes
  • 一个类中可以嵌套多少次?

    我在一项在线 Java 测试中遇到了这个问题 选项有 4 5 8 和任意次数 我只使用过一个内部类 但从未尝试过多个内部类 我想知道是否有人知道答案 这是一个完全无关的问题 我希望他们没有将结果用于任何重要的事情 我猜他们正在寻找的答案是
  • 无法写入通过 NFS 连接的 FIFO 文件

    我正在尝试写入位于 NFS 安装上的 FIFO 文件 但它会阻塞 可能是什么问题呢 我的 etc export tmp test 10 0 0 0 24 rw no root squash async NFS 服务器和客户端上的 ls tm
  • 为什么要导入 javax.servlet.*;尽管安装了Java EE仍无法解决|面向 Java EE 开发人员的 Eclipse [重复]

    这个问题在这里已经有答案了 我要使用的开源项目需要导入 import javax servlet import javax servlet http As far as I know those libraries are part of
  • JVM 中的帧是在堆中分配还是在堆栈中分配?

    JVM 规范 JSE 8 版 提到 第 12 页 2 5 2 JVM 堆栈 因为除了推送和弹出帧之外 JVM 堆栈永远不会被直接操作 因此帧可能是堆分配的 第 15 页 2 6 框架 帧是从创建帧的线程的 JVM 堆栈中分配的 第 16 页