Java虚拟机栈简单理解
2017-03-01 11:42
211 查看
与PC寄存器一样,Java虚拟机栈也是线程私有的。每一个JVM线程都有自己的java虚拟机栈,这个栈与线程同时创建,它的生命周期与线程相同。
1.虚拟机栈的特点:
“虚拟机栈”描述的是Java方法执行的内存模型:
1.每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(栈帧我的理解就是一个对象,用来存储信 息用)
2.每一个方法被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
2.对象引用 类型
3.returnAddress 类型
除64位 long 和 duble 占2个局部空间外,其余的数据类型只占1个。
注意,局部变量表所需的内存空间在编译期间完成分配,所以进入某个方法时,这个方法需要在栈桢中分配多大的空间完全是确定的,在方法运行时是不会改变局部变量表的大小的。
2.如果虚拟机进行动态扩展,而扩展时无法申请到足够的内存,则抛出 OutOfMemoryError 异常。
注,大部分 Java 虚拟机分为:固定长度 和 动态扩展两种
如果采用固定大小的JVM stack设计,那么每一条线程的JVM Stack容量应该在线程创建时独立地选定。JVM实现应该提供调节JVM Stack初始容量的手段;如果采用动态扩展和收缩的JVM Stack方式,应该提供调节最大、最小容量的手段。
如果线程请求的栈深度大于虚拟机所允许的深度将抛出StackOverflowError;
如果JVM Stack可以动态扩展,但是在尝试扩展时无法申请到足够的内存时抛出OutOfMemoryError。
1.虚拟机栈的特点:
“虚拟机栈”描述的是Java方法执行的内存模型:
1.每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。(栈帧我的理解就是一个对象,用来存储信 息用)
2.每一个方法被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
2.局部变量表:
1.存放了8种基本数据 类型2.对象引用 类型
3.returnAddress 类型
除64位 long 和 duble 占2个局部空间外,其余的数据类型只占1个。
注意,局部变量表所需的内存空间在编译期间完成分配,所以进入某个方法时,这个方法需要在栈桢中分配多大的空间完全是确定的,在方法运行时是不会改变局部变量表的大小的。
3.虚拟机栈出现异常两种情况:
1.如果线程请求的深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常;2.如果虚拟机进行动态扩展,而扩展时无法申请到足够的内存,则抛出 OutOfMemoryError 异常。
注,大部分 Java 虚拟机分为:固定长度 和 动态扩展两种
4.关于动态扩展:
JVM stack 可以被实现成固定大小,也可以根据计算动态扩展。如果采用固定大小的JVM stack设计,那么每一条线程的JVM Stack容量应该在线程创建时独立地选定。JVM实现应该提供调节JVM Stack初始容量的手段;如果采用动态扩展和收缩的JVM Stack方式,应该提供调节最大、最小容量的手段。
如果线程请求的栈深度大于虚拟机所允许的深度将抛出StackOverflowError;
如果JVM Stack可以动态扩展,但是在尝试扩展时无法申请到足够的内存时抛出OutOfMemoryError。
相关文章推荐
- Castle- Startable Facility 简单理解
- .Net 应用程序与进程的简单理解
- 打破沙锅——AOP简单理解
- 简单理解asp.net 2.0 三层开发
- 对Jena的简单理解和一个例子
- 最近做毕业设计发现市场上的Delphi书中关于TArrayField的一个错误理解,这里现简单的提一下以后有时间在好好的研究一下
- Computer.硬盘:简单理解磁盘的物理结构
- [JavaScript] 简单理解Ajax异步调用操作
- 工厂方法的简单理解
- 关于DataRow和DataColumn的一点个人简单理解
- Javascript原型的简单理解
- c# interface 的理解(工厂模式)简单实例
- 简单的理解 类的继承 和 多态性
- 数据仓库概念的简单理解
- MFC 消息处理的简单理解
- 事件处理的简单理解
- 学习计划, -VB delphi 进行简单的编程理解
- 类、对象、接口、继承等概念的理解的简单表述..
- 用CMP访问数据库,简单的,但不理解为什么URL不修改仍然可以运行
- win线程同步--循环锁简单理解