JVM如何手动使用本地堆栈进行JAVA函数调用

这是参考本文中的答案:JVM堆栈,堆和线程如何映射到物理内存或操作系统

它说“JVM堆栈与本地堆栈相同”,如果是这种情况,那么只要在Bytecode中有函数调用而不是JVM代码函数调用,jvm如何在此堆栈内存上分配堆栈帧。 如果在JVM代码中有函数调用,那么方法局部变量和其他方法相关的东西将被OS存储在这个本地堆栈中。 但是,如果在字节码指令中存在函数调用,JVM如何手动将本地数据存储在本地堆栈中。


每当在Bytecode中有函数调用而不是JVM代码函数调用时,jvm如何在此堆栈内存上分配堆栈帧。

JLS中没有指定JVM的具体内容。 JVM可能

  • 分配一个堆栈帧。
  • 为叶子方法重用现有的堆栈帧。
  • 内联一个方法,所以它不需要它自己的框架。
  • 就字节码而言,一个方法的不同部分可以有自己的框架,JVM可以在一个方法中分配多个框架,尽管我怀疑它实际上是这样做的。

    如果在JVM代码中有函数调用,那么方法局部变量和其他方法相关的东西将被OS存储在这个本地堆栈中。

    总是,除非变量被优化掉,在这种情况下它不会被存储在任何地方。

    但是,如果在字节码指令中存在函数调用,JVM如何手动将本地数据存储在本地堆栈中。

    字节码必须在真机上运行,​​并且必须使用堆栈来存储它的信息,根据它是否在解释字节码或编译的本地代码中运行,这不会发生显着变化。 唯一的区别是在减少局部变量的数量方面发生了多少优化。

    链接地址: http://www.djcxy.com/p/82745.html

    上一篇: How Does JVM Uses Native Stack Manually For JAVA Function Call

    下一篇: Pushing variables to Stack and Variables living in the Stack difference?