从此文可以大体了解,

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虚拟机常量池和本地变量表、自己定义的数值自动装入常量池相关推荐

  1. 【Java 虚拟机原理】栈帧 | 局部变量表 | 操作数栈 | 方法出口 | JVM 指令逐条解析

    文章目录 前言 一.JVM 指令逐条解析 1.Java 代码 2.Java 虚拟机指令 3.分析 JVM 指令 4.局部变量表 与 操作数栈 二.方法出口 前言 " 栈帧 " 中存 ...

  2. 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理

    前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...

  3. java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...

    今天在看深入理解JAVA虚拟机的9.3节,作者实现了一个远程执行功能.这个功能可以在远程服务器中临时执行一段程序代码,而去不依赖jdk版本,不改变原有服务端程序的部署,不依赖任何第三方库,不入侵原有的 ...

  4. Java虚拟机(七)——本地方法接口与本地方法栈

    文章目录 本地方法接口 什么是本地方法? 为什么要使用本地方法? 本地方法栈 本地方法接口 什么是本地方法? 一个Native Method(本地方法)就是一个Java调用非Java代码的接口,,该方 ...

  5. java中的关键字static(静态变量)和final定义常量

    package point;class Point {int x = 0;int y = 0;static int z = 100; // 定义静态变量z,类变量static final double ...

  6. 关于如何让Excel表中输入的数值自动做乘法运算

    不需其他单元格参与 所有输入的数字自动乘以1.5 1 新建excel表格文件     2 右键表名称(sheet1)->查看代码     3 双击sheet1(sheet1) 粘贴以下代码 ' ...

  7. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

  8. Java常量什么时候被回收,JVM GC调优(2)-GC算法判定对象可以被回收(部分摘自深入理解Java虚拟机) - Java 技术驿站-Java 技术驿站...

    这次我们介绍JVM中的GC算法 引用计数法 可达性分析法 首先我们提出四个问题 哪里的内存需要回收? 什么时候回收? 如何回收? Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的&quo ...

  9. 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

    方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆. 1.此区域是线程共享的.储存已加载的类型信息.常 ...

最新文章

  1. 分享一个Go按行读取命令行输入的例子
  2. 用户测评 | EDAS Serverless 上手体验
  3. SQL 日期格式 问题
  4. PyTorch-图像分类演示
  5. STM32 map文件解析
  6. 双向链表操作c语言 函数,c语言 双向链表的基础操作
  7. Duplicate entry ‘XXX‘ for key
  8. Loadrunner的使用
  9. 了解计算机中的信息编码教案,五年级下册信息技术《奇妙的编码》教学设计
  10. svc的参考文献_WCF服务三:svc文件详解
  11. 原创(网络克隆 )视频教程
  12. powershell的stable和preview版本
  13. 【洛谷】【treap/堆】P2073 送花
  14. 金士顿100 G3U盘写保护无法格式化的解决方法记录
  15. 子母钟运用在什么领域,设备如何调试,天穹告诉你子母钟系统授时的意义
  16. OpenCV零基础从配置环境到读取图片,输出各种灰度腐蚀图,最后输出直方图,做矩阵运算等等
  17. 使用网络图展示Venn图集合及Cytoscape操作视频
  18. 已删除的回收站文件恢复方法
  19. 【前端探索】移动端H5生成截图海报的探索
  20. System Silencer – 离开时 让电脑自动开始任务

热门文章

  1. 4行关键代码实现灰色模型GM(1, 1)
  2. Gumbel-Softmax Trick和Gumbel分布 附VAE讲解
  3. JS中 let 和var的区别
  4. JDK源码解析 —— IO流中的包装类使用到了装饰者模式
  5. 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
  6. QT各种版本第三方下载地址
  7. 【C language】函数指针
  8. 第2周项目2程序的多文件组织
  9. java中insert函数
  10. Python标准库02 时间与日期 (time, datetime包)