栈桢的局部变量表是如何定位变量的?是如何完成实参到形参传递的?
栈桢的局部变量表是如何定位变量的?是如何完成实参到形参传递的?
java虚拟机通过索引定位的方式来使用局部变量表。索引值从0开始,至局部变量表变量槽最大的数量。如果是访问的32位数据类型的变量,索引n就代表了第n个变量槽,如果是64位,则访问的是第n和n+1两个变量槽。对于64位的2个变量槽,不允许任何方式访问其中一个变量槽。如果出现这种情况,在类加载校验阶段会抛出异常。
当一个方法被调用时,java虚拟机会使用局部变量表来完成参数值到参数变量列表的传递过程,即实参到形参的传递。如果执行的是实例方法,那局部变量表的第0位索引的变量槽默认是用于传递方法所属对象实例的引用,在方法中可以通过this关键字来访问到这个隐含的参数。其余参数则按照顺序在变量槽中排列,参数表分配完后,在根据方法体内部定义的变量和作用域来分配其余的变量槽