
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就通过案例分析来了解一下,Java虚拟机栈的一些基础知识。
虚拟机栈
虚拟机栈描述的是Java方法执行的内存模型,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法被调用直至执行完毕的时候,就对应着一个栈帧从入栈到出栈的过程。
看到上面这么长的定义可能有点懵逼,栈帧是个啥,里面存的都是些啥玩意,我学它干啥,搞得挺痛苦的。莫慌,我们一个个解释,看完我的解释后绝对让你喊出“真香”。
先,既然虚拟机栈描述的是Java方法的内存模型,那我们就认为他是存储Java方法集合的内存,而栈帧就可以认为集合中的一个方法,方法间的调用就对用着栈帧的调用,当执行一个方法,就将该方法的栈帧压入栈顶,方法执行完就退出栈,也即从方法集合中去掉。
栈帧
局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为Class文件时就在方法的code属性的max_locals数据项中确定了该方法所需要分配的局部变量表的大容量。局部变量可以存放基本数据类型(boolean、byte、char、short、int、float、long、double)和对象引用类型(reference)。
局部变量是以变量槽(Slot)为单位,每个槽的容量为32位,所以对于小于32位的类型占用一个变量槽,64位长度的long和double类型的数据会占用两个变量槽。
变量槽
JVM会为局部变量表中的每一个slot都分配一个访问索引,通过这个索引就可以成功的访问到局部变量表中的指定局部变量值。当一个实例方法被调用的时候,它的方法参数和方法体内部定义的局部变量将会按照声明顺序被复制到局部变量表中的每一个slot上。
Note:栈帧中的局部变量表中的槽位是可以重复利用的,如果一个局部变量过了其作用域,那么在其作用域之后申明的新的局部变量就很有可能会复用过期局部变量的槽位,从而达到节省资源的目的。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。