JVM中的栈和局部变量.docx

JVM中的栈和局部变量.docx

ID:59254548

大小:392.21 KB

页数:3页

时间:2020-09-08

JVM中的栈和局部变量.docx_第1页
JVM中的栈和局部变量.docx_第2页
JVM中的栈和局部变量.docx_第3页
资源描述:

《JVM中的栈和局部变量.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、JVM中的栈和局部变量java栈的组成元素——栈帧栈帧由三部分组成:局部变量区、操作数栈、帧数据区。局部变量区和操作数栈的大小要视对应的方法而定,他们是按字长计算的。但调用一个方法时,它从类型信息中得到此方法局部变量区和操作数栈大小,并据此分配栈内存,然后压入Java栈。局部变量区:局部变量区被组织为以一个字长为单位、从0开始计数的数组,类型为short、byte和char的值在存入数组前要被转换成int值,而long和double在数组中占据连续的两项,在访问局部变量中的long或double时,只

2、需取出连续两项的第一项的索引值即可,如某个long值在局部变量区中占据的索引时3、4项,取值时,指令只需取索引为3的long值即可。说再多也没用,下面就看个例子,好让大家对局部变量区有更深刻的认识。这个图来自《深入JVM》:public static int runClassMethod(int i,long l,float f,double d,Object o,byte b) {           return 0;        }            public int runInsta

3、nceMethod(char c,double d,short s,boolean b) {           return 0;        } runInstanceMethod的局部变量区第一项是个reference(引用),它指定的就是对象本身的引用,也就是我们常用的this,但是在runClassMethod方法中,没这个引用,那是因为runClassMethod是个静态方法。操作数栈和局部变量区一样,操作数栈也被组织成一个以字长为单位的数组。但和前者不同的是,它不是通过索引来访问的,而

4、是通过入栈和出栈来访问的。可把操作数栈理解为存储计算时,临时数据的存储区域。下面我们通过一段简短的程序片段外加一幅图片来了解下操作数栈的作用。Inta=100;Intb=98;Intc=a+b;从图中可以得出:操作数栈其实就是个临时数据存储区域,它是通过入栈和出栈来进行操作的。帧数据区 除了局部变量区和操作数栈外,java栈帧还需要一些数据来支持常量池解析、正常方法返回以及异常派发机制。这些数据都保存在java栈帧的帧数据区中。当JVM执行到需要常量池数据的指令时,它都会通过帧数据区中指向常量池的指针

5、来访问它。除了处理常量池解析外,帧里的数据还要处理java方法的正常结束和异常终止。如果是通过return正常结束,则当前栈帧从Java栈中弹出,恢复发起调用的方法的栈。如果方法又返回值,JVM会把返回值压入到发起调用方法的操作数栈。为了处理java方法中的异常情况,帧数据区还必须保存一个对此方法异常引用表的引用。当异常抛出时,JVM给catch块中的代码。如果没发现,方法立即终止,然后JVM用帧区数据的信息恢复发起调用的方法的帧。然后再发起调用方法的上下文重新抛出同样的异常。class Exampl

6、e3C{    public static void addAndPrint(){        double result = addTwoTypes(1,88.88);        System.out.println(result);    }    public static double addTwoTypes(int i, double d){    return i+d;    }}1.只有在调用一个方法时,才为当前栈分配一个帧,然后将该帧压入栈2 帧中存储了对应方法的局部数据,方法执

7、行完,对应的帧则从栈中弹出,并把返回结果存储在调用 方法的帧的操作数栈中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。