欧尼酱讲JVM(09)——虚拟机栈-变量槽slot
这篇文章接着【JVM】运行时数据区-虚拟机栈 来写,虚拟机栈中提到了局部变量表,那么局部变量表又是存储什么内容呢?
关于Slot的理解
- 参数值的存放总是在局部变量数组的index0开始,到数组长度-1索引结束。
- 局部变量表,最基本的存储单元是Slot(变量槽)
- 局部变量表中存放编译期可知的各种基本数据类型(8种),引用类型(reference),returnAddress类型的变量
- 局部变量表里,32位以内的类型只占用一个solt(包括returnAddress类型),64位的类型(long和double)占用两个slot
- byte、short、char在存储前被转换成int,boolean也被转换成int,0表示false,非0 表示true。
- long和double则占据两个Slot
可以根据索引访问局部变量
JVM会为局部变量表中的每一个slot分配一个访问索引,通过这个索引即可成功访问到局部变量表中指定的局部变量值。
当一个实例方法被调用的时候,它的方法参数和方法体内部定义的局部变量将会被按照顺序被复制到局部变量表中的每一个slot上。
如果需要访问局部变量表中一个64bit的局部变量时,只需要使用前一个索引即可。
如果当前帧室友构造方法或者实例方法创建的,那么该兑现引用this将会存放在index为0的slot处,其余的参数按照参数表顺序排列。
补充说明
在栈帧中,与性能调优关系最为密切的部分就是前面提到的局部变量表,在方法执行前,虚拟机使用局部变量表完成方法的传递。
局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。
拓展-变量的分类
按照数据类型分类
- 基本数据类型
- 引用数据类型
按照在类中声明的位置来分
- 成员变量:在使用前,都经历过默认初始赋值
- 类变量:linking的prepare阶段给变量默认赋值,initial阶段给类变量显示赋值即代码块赋值
- 实例变量:随着对象的创建,会在堆空间中分配实例变量空间,并进行默认赋值
- 局部变量:在使用前必须进行显示的赋值,否则编译不通过
欧尼酱讲JVM(09)——虚拟机栈-变量槽slot相关推荐
- 欧尼酱讲JVM(10)——操作数栈
首先要明确一个概念:操作数栈在栈帧中.我红色框圈起来的部分. 操作数栈的理解 每一个独立的栈针中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也叫 表达式栈. 操作数栈在方法执行过程中,根据字 ...
- 欧尼酱讲JVM(01)——整体概览(导航)
从业这么久了,输入了很多东西,趁我还算不老,趁我还有精力,我觉得把我的知识和经验整理一番,输出出来. 那么首先就从JVM开始吧.我将从以下几个方面讲解JVM: 欧尼酱讲JVM(02)--类的加载过程 ...
- 欧尼酱讲JVM(17)——方法区详解有图有真相
目录 位置图解 方法区的理解 方法区在哪里 方法区的基本理解 HotSpot中方法区的理解(演进过程) 方法区的内部结构 图解方法区内部结构 运行时常量池 class文件中常量池的理解 为什么需要常量 ...
- java的标量和聚合量_欧尼酱讲JVM(16)——如何基于逃逸分析进行代码优化
代码优化是一个涉及面很广的"工程",但是今天呢,本姑娘主要给大家分享基于逃逸分析,如何给代码做优化.那么逃逸分析是什么呢?我前面的文章也仔细的讲解过了,这里就不过多的赘述了.有不明 ...
- 欧尼酱讲JVM(22)——分代收集算法
目录 分代收集算法 HotSpot中的分代收集 年轻代 老年代 没有一种最好的算法吗?没有,没有最好只有最适合.具体问题具体分析! 上一篇文章<欧尼酱讲JVM(21)--垃圾回收相关算法> ...
- 欧尼酱讲JVM(07)——方法的栖身之所—虚拟机栈
虚拟机栈的位置 虚拟机栈在运行时数据区中: 虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台的CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编 ...
- 欧尼酱讲JVM(13)——本地方法栈
位置图解 本地方法栈在运行时数据区中,三个灰色的部分是线程私有的. 本地方法栈作用 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用. 本地方法栈是线程私有了,允许被线程 ...
- 欧尼酱讲JVM(21)——垃圾回收相关算法
目录 前言 垃圾标记阶段 对象存活判断 引用计数算法 原理 优缺点 举例 可达性分析算法 原理 优缺点 引用链 GC Roots 垃圾清除阶段 标记清除算法 清除过程 优缺点 何为清除 复制算法 原理 ...
- 欧尼酱讲JVM(14)——堆
目录 位置图解 堆的简介 堆空间中关于对象创建和GC 堆的细分内存结构 堆空间大小设置和查看 查看设置的参数 OOM异常说明与举例 新生代与老年代相关参数设置 图解对象分配的一般过程 对象分配过程概述 ...
最新文章
- python3 dict.keys() dict_keys类型 转换 list类型
- 《算法设计编程实验:大学程序设计课程与竞赛训练教材》——2.3 构造法模拟的实验范例...
- ping tracert 联系区别
- mysql创建数据库时候同时创建表空间_MySQL 创建InnoDB表空间_编程学问网
- wordcount.java_mapreduce中wordcount的java实现
- MySQL在远程访问时非常慢的解决skip-name-resolve
- mysql添加值_怎么给mysql添加值?
- 数字信号处理前瞻(note1):奈奎斯特与折叠频率
- 服务器装系统鼠标键盘不能动,装系统鼠标键盘不能动
- SEO内链优化,网站内部链接优化方法
- 计算机蓝牙功能,笔记本电脑蓝牙在哪里?笔记本怎么打开蓝牙功能Bluetooth
- java reactjs_从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs
- 安卓日志点击无反应_日志MIUI 12 20.9.22 内测更新综合资讯 “小米营业厅”内测...
- 用trace32分析内核死机
- 在虚拟机中搭建设zookeeper集群配置
- 学习ELMo从文本中提取特征的分步NLP指南
- 手动清除网卡IP地址的方法
- 字符串算法之KMP(字符串匹配)
- 计算机数值分析-插值法-差商-04
- 在C ++中访问类的数据成员