栈区 Stack Area

  栈是运行时的单位,堆是存储单位,栈解决程序的运行问题,即程序如何执行,如何处理数据。

  每个线程在创建时都创建一个该线程私有的虚拟机栈,每个栈里有许多栈帧,一个栈帧对应一个 Java 方法

栈的特点:

  • 每个栈与它所对应的线程生命周期保持一致

  • 栈主管 Java 程序运行,保存方法的局部变量,部分结果,参与方法的调用与返回

  • JVM 对栈的操作只有两种,方法执行入栈和执行结束出栈

  • 栈的访问快速有效,访问速度仅次于程序计数器

  • 对栈来说不存在垃圾回收问题

栈帧

  栈区中的一个栈对应一个线程,栈中的一个栈帧对应一个方法,在栈帧中封装了方法执行的局部变量表、操作数栈、返回地址、动态链接以及一些附加信息,如对程序调优调试信息等。

  在活动的线程中,只有当前正在执行的方法才是有效的,因此该方法对应的栈顶栈帧称为当前栈帧,该方法称为当前方法,定义该方法的类为当前类

  执行引擎所有的字节码指令只针对当前栈帧进行操作。

  如图所示,正在执行的线程所对应的当前线程中,栈帧1 对应的 方法1 调用了 栈帧2 对应的 方法2,方法2 又调用了 方法3,因此当前栈帧入栈。每个栈帧都存有所对应方法的各种信息。当正在执行的 方法3 执行完毕后,当前栈帧把执行结果返回给 栈帧2,当前栈帧出栈,栈帧2 变为当前栈帧,当 栈帧1 也出栈时,该线程执行完毕,执行其他线程。

局部变量表

  局部变量表也称为局部变量数组或本地变量表。

  局部变量表本质上是一个数字数组,主要用于存储方法参数和定义在方法内的局部变量

  • 局部变量表建立在线程私有的栈中,是线程私有数据,不存在安全问题

  • 局部变量表所需的容量大小,在编译器就确定下来,在方法运行期不会改变其大小

  • 方法嵌套调用的次数由栈的大小决定

  • 局部变量表的变量只在当前方法调用中有效,方法调用结束后,方法栈帧销毁,局部变量表随之销毁

操作数栈

  操作数栈也成为了表达式栈。

  操作数栈主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的储存空间。

  • 栈中的任何一个元素可以是任意的 Java 数据类型

  • 操作数栈只能通过标准的入栈出栈操作来完成数据访问,不支持索引

  • 如果被调用方法带有返回值,返回值会被压入当前栈帧的操作数栈中,并更新程序计数器的下一条指令

动态链接

  每个栈帧内部包含一个指向运行时常量池中该栈帧所属方法的引用,这个引用的目的就是为了支持当前方法的代码实现动态链接。

  动态链接的作用就是为了将符号引用转换为方法的直接引用,当一个方法调用其他方法时,就通过常量池中指向方法的符号引用完成。

方法返回地址

  当一个方法被执行后,有两种方式退出这个方法。

  正常完成出口:执行引擎遇到任意一个方法返回的字节码指令,产生返回值传递给上层的方法调用者。

  异常完成出口:在方法执行过程中遇到了异常,并且这个异常没有在方法体内得到处理,只要在本方法的异常表中没有搜索到匹配的异常处理器,就会导致方法退出。异常完成出口的方式退出,不会给它的调用者产生任何返回值。

  无论采用何种方式退出,在方法退出之前,都需要返回到方法被调用的位置,程序才能继续执行,方法返回时可能需要在栈帧中保存一些信息,用来帮助恢复它的上层方法的执行状态。

JVM学习笔记——栈区的更多相关文章

  1. JVM学习笔记:虚拟机的类加载机制

    JVM类加载机制分两部分来总结: (1)类加载过程 (2)类加载器 一.JVM类加载过程 类的加载过程:加载 →连接(验证 → 准备 → 解析)→ 初始化. 类的生命周期:加载 →连接(验证 → 准备 ...

  2. JVM学习笔记:字节码执行引擎

    JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  

  3. JVM学习笔记(四)------内存调优【转】

    转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...

  4. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  5. java jvm学习笔记七(jar包的代码认证和签名)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...

  6. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  7. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  8. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  9. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

随机推荐

  1. 发布 mbtiles 存储的矢量瓦片

    之前我们分享过如何 在本地发布OSM矢量瓦片地图,里面介绍了生成的矢量瓦片会存放在 .mbtiles 文件中,然后用 tileserver-gl 软件发布. mbtiles 是基于sqllite数据库 ...

  2. os.read

    #-*-coding:utf-8-*-__author__ = "logan.xu"import oscmd_res=os.popen("ls").read() ...

  3. Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法

    总是提示 qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法: 也算是花了整整两个小时踩坑 ...

  4. Lucene入门及实际项目应用场景

    导入maven依赖 <dependency> <groupId>org.apache.lucene</groupId> <artifactId>luce ...

  5. 获取input对应的的选项

    需求是把所有题目中的选项ABCDEF等对应保存到后台, 这个问卷中有多选项和单选项 var data = {}; $(".u-box .u-item").each(function ...

  6. Nginx+Tomcat 负载均衡、动静分离集群

    目录: 一.Nginx负载均衡实现原理 二.Nginx动静分离实现原理 三.Nginx+Tomcat 负载均衡.动静分离集群部署 一.Nginx负载均衡实现原理 1.Nginx实现负载均衡是通过反向代 ...

  7. go语言游戏服务端开发(一)——架构

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例.   网络游戏程序分为客户端和服务端.客户端负责图形渲染.交互和一些简单校验处理,服务端负责业务逻辑处理.数据存储. 我们开发一个游戏de ...

  8. 【OI】C++STL初步 排序与检索

    从紫皮书过来的,但是书中内容讲的比较简洁,做一点补充笔记. 一.排序(sort函数) 头文件:<algorithm> 语法:sort(start,end,cmp); start,end必须 ...

  9. Java多线程-1(3)

    本份随记主要为狂神老师的Java多线程教学的学习笔记,记载了视频中一些有关基础概念以及部分代码示例.随机分为1-3共三份,知识点记录的不是很深入,以后的学习过程中随时补充. 1 有关基础概念 1.1 ...

  10. Java基础系列(14)- JavaDoc生成文档

    JavaDoc JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了 参数信息 @author 作者名 @version 版本号 @since 指 ...