jvm字大小和操作数堆栈

时间:2015-08-01 21:38:37

标签: java jvm

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

2 个答案:

答案 0 :(得分:7)

是的,它是“浪费的空间”,但它极大地简化了运行时,加上字大小与它们构建的CPU相匹配,因此虽然浪费了空间,但它们在CPU处理方面实际上更有效。

它也仅适用于运行时参数和实际存储数据。

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

答案 1 :(得分:1)

" Java虚拟机"是一个抽象,一个描述Java程序如何执行的模型。来自Oracle JDK的实际JVM实现(如HotSpot JVM)可以在任何地方或根本不分配Java操作数堆栈。

E.g。在JIT编译的方法中,一些操作数可以保存在CPU寄存器中,甚至可以作为直接常量处理,而不是占用实际的堆栈空间。此外,内联方法没有自己的堆栈框架,而是共享父框架。

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