Java虚拟机常量池和本地变量表、自己定义的数值自动装入常量池
从此文可以大体了解,
https://blog.csdn.net/bcbobo21cn/article/details/109108970
自己的程序中定义的数值,像 int a=999; ,这样的,999这个值是自动装入虚拟机常量池的;下面来看一下具体情况是不是;
hello4.java;此程序只是定义数值,啥也不做;然后反汇编之;
public class hello4 {public static void main(String[] args) { int a11 = -21474999;int a16 = -32769;int a07 = 32768;int a08 = 65535;int a09 = 65536;int a10 = 21474999;}
}
构建;反汇编;
看一下对于每个定义的数值执行了2条指令:ldc,istore_n;
ldc: 从运行时常量池中提取数据并压入操作数栈;
istore_<n>: 将一个int类型数据保存到本地变量表中;
也就是说,自己程序给定的数值,是自动装入了虚拟机常量池;然后用ldc放入操作数栈,用istore指令在本地变量表中再存一份;
常量池在网上资料有很多解释;什么是本地变量表,还有一个词叫局部变量表,目前还不清楚二者的区别;
看一下下图的描述;
从这图看;每个线程有一个java虚拟机实例,其中包含一个虚拟机栈;各个类的方法调用的栈帧在虚拟机栈中;一个具体的栈帧中包含本地变量表、操作数栈等这些;本地变量表就放各种具体类型的数值;
使用如下命令可以查看常量池;javap -verbose hello4
看 Constant pool:后面;自己程序给定的数值都在常量池中,这是自动装入的;常量池中还有一些固定的符号,如 hello4 这些;
此命令还有如下输出;
还有一个叫行号表,LineNumberTable ,的东西;先到这里;
Java虚拟机常量池和本地变量表、自己定义的数值自动装入常量池相关推荐
- 【Java 虚拟机原理】栈帧 | 局部变量表 | 操作数栈 | 方法出口 | JVM 指令逐条解析
文章目录 前言 一.JVM 指令逐条解析 1.Java 代码 2.Java 虚拟机指令 3.分析 JVM 指令 4.局部变量表 与 操作数栈 二.方法出口 前言 " 栈帧 " 中存 ...
- 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理
前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...
- java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
今天在看深入理解JAVA虚拟机的9.3节,作者实现了一个远程执行功能.这个功能可以在远程服务器中临时执行一段程序代码,而去不依赖jdk版本,不改变原有服务端程序的部署,不依赖任何第三方库,不入侵原有的 ...
- Java虚拟机(七)——本地方法接口与本地方法栈
文章目录 本地方法接口 什么是本地方法? 为什么要使用本地方法? 本地方法栈 本地方法接口 什么是本地方法? 一个Native Method(本地方法)就是一个Java调用非Java代码的接口,,该方 ...
- java中的关键字static(静态变量)和final定义常量
package point;class Point {int x = 0;int y = 0;static int z = 100; // 定义静态变量z,类变量static final double ...
- 关于如何让Excel表中输入的数值自动做乘法运算
不需其他单元格参与 所有输入的数字自动乘以1.5 1 新建excel表格文件 2 右键表名称(sheet1)->查看代码 3 双击sheet1(sheet1) 粘贴以下代码 ' ...
- 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)
46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...
- Java常量什么时候被回收,JVM GC调优(2)-GC算法判定对象可以被回收(部分摘自深入理解Java虚拟机) - Java 技术驿站-Java 技术驿站...
这次我们介绍JVM中的GC算法 引用计数法 可达性分析法 首先我们提出四个问题 哪里的内存需要回收? 什么时候回收? 如何回收? Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的&quo ...
- 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?
方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆. 1.此区域是线程共享的.储存已加载的类型信息.常 ...
最新文章
- 分享一个Go按行读取命令行输入的例子
- 用户测评 | EDAS Serverless 上手体验
- SQL 日期格式 问题
- PyTorch-图像分类演示
- STM32 map文件解析
- 双向链表操作c语言 函数,c语言 双向链表的基础操作
- Duplicate entry ‘XXX‘ for key
- Loadrunner的使用
- 了解计算机中的信息编码教案,五年级下册信息技术《奇妙的编码》教学设计
- svc的参考文献_WCF服务三:svc文件详解
- 原创(网络克隆 )视频教程
- powershell的stable和preview版本
- 【洛谷】【treap/堆】P2073 送花
- 金士顿100 G3U盘写保护无法格式化的解决方法记录
- 子母钟运用在什么领域,设备如何调试,天穹告诉你子母钟系统授时的意义
- OpenCV零基础从配置环境到读取图片,输出各种灰度腐蚀图,最后输出直方图,做矩阵运算等等
- 使用网络图展示Venn图集合及Cytoscape操作视频
- 已删除的回收站文件恢复方法
- 【前端探索】移动端H5生成截图海报的探索
- System Silencer – 离开时 让电脑自动开始任务