深入了解java虚拟机(JVM) 第二章 内存区域---栈空间
一、栈的含义
用于描述方法执行的动态内存模型,简单来说就是代码中的方法模块。主要用于局部变量表。栈的大小在编译器中就已经分配了空间,在进入一个方法时,这个方法需要栈帧分配多少内存是固定的,运行期间是不会改变大小。
局部变量表示指:存放编译期可知的各种基本类型和引用类型。
二、栈帧
说到了栈,就不得不说栈中最为重要的东西,栈帧。什么是栈帧,我们先来看看比较官方的定义:程序执行时,调用每个方法执行时,都会为其创建一个栈帧,栈帧伴随着方法从创建到执行完成。看了这段话是不是还是很难理解,接下来我们就用一张图来简单表示一下:
如图所示,在方法执行的时候,方法会被分配到一个栈帧中,然后栈帧入栈,开始执行方法,当方法结束时,栈帧就出栈。这样看起来是不是比较清晰,有此定义我们可以就可以想到在内存分配的过程中,可以优先考虑栈上分配。至于栈上分配,在垃圾回收器中会继续讲到。
三、本地方法栈
本地方法栈是jvm执行native方法时使用的,native方法是本地方法,这个方法没有在JVM中执行,而是在本地就已经编译好,一般本地方法用于跨语言操作,简单来说就是用C或者其他语言封装好一个方法,然后在java中去调用这个方法。