jvm字长和操作数栈

jvm word size and operand stack

JVM 规范指出 jvm 操作数堆栈以字大小为单位工作,在许多实现中,字大小是本机指针的大小 - 32 位系统为 4 个字节,64 位系统为 8 个字节。我的问题是,如果被压入堆栈的操作数是 char(2 字节)并且操作数堆栈以字大小(64 位系统中为 8 字节)为单位压入和弹出操作数,那么这不是浪费吗space?

是的,它是 "wasted space",但它极大地简化了运行时间,而且字的大小与它们所基于的 CPU 相匹配,所以虽然浪费了 space,但它们在 CPU 处理方面实际上更有效率。

而且它也仅用于运行时参数,而不是实际存储的数据。

最后,如果您查看大多数 Java 程序,它们传递的大部分内容是指向对象的指针,而不是标量。所以这一切都在洗涤中很有效。

"Java Virtual Machine" 是一种抽象,一种描述 Java 程序如何执行的模型。实际的 JVM 实现,如来自 Oracle JDK 的 HotSpot JVM,可能会在任何地方或任何地方分配 Java 操作数堆栈。

例如在 JIT 编译的方法中,一些操作数可以保存在 CPU 寄存器中,甚至可以被视为立即常量,而不是占用真正的堆栈 space。此外,内联方法没有自己的堆栈框架,而是共享一个父框架。

所以,不,这不是浪费,因为规范不会阻止 JVM 实现使用优化表示。尽管 JVM 通常不关心:堆栈 space 通常不是限制因素 - 堆栈主要包含少量临时值,而实际数据驻留在 Java 堆中。