每天学一点:java虚拟机3

局部变量区被组织为一个以字长为单位,从0开始计数的数组。类型byte、short、char的值在存入数组前被转换为int值。
类型为long、double的值在数组中占据连续的两项。

静态方法被视为类方法,在其局部变量中不会隐含加入reference(引用)类型参数,此隐含类型参数表示调用该方法的对象本身。

byte、short、char、boolean在局部变量区都被转换成了int,即在帧栈中适当做int来进行处理的,只有当他被存回堆或方法区时,才会转换回原来的类型。

操作数栈
操作数栈被组织成以字长为单位的数组,不是通过索引访问,通过栈操作--压栈、出栈访问。操作数栈中存储数据方式通局部变量区。

帧数据区
java栈帧需要一些数据来支持常量池解析、正常方法返回、异常派发机制,这些信息都保存在java帧栈的帧数据区;
每当虚拟机要执行某个需要用到常量池数据的指令时,他都会通过帧数据区中指向常量池的指针来访问它。
常量池对类型、字段、方法的引用在开始时都是符号,虚拟机在常量池中搜索的时候,如果遇到指向类、接口、字段或者方法的入口,假若它们仍然是符号,虚拟机那时候才会(也必须)进行解析;

加入方法有返回值,虚拟机必须将它加入到发起调用的方法的操作数栈;

本地方法栈
线程调用本地方法栈不受虚拟机控制
本地方法通过本地方法接口访问虚拟机的运行时数据区,它和虚拟机拥有同样的权限
调用本地方法时,虚拟机保持java栈不变,只是简单的动态连接并直接调用指定的本地方法
如果本地方法接口需要毁掉java虚拟机中的java方法,该线程会保存本地方法栈的状态并进入发哦另一个java栈

猜你喜欢

转载自baoxiaofei.iteye.com/blog/2272166