Java中ldc与lconst区别_写Java不懂Java系列之加载和存储

Java中ldc与lconst区别_写Java不懂Java系列之加载和存储很多 Java 工程师语法用的很 666 但是真的让他说说 Java 是怎样编译运行的 我相信他会懵逼 希望处于这个阶段的同学可以仔细阅 Class 文件系列的文章 这里涵盖了 Class 文件的绝大部分内容 当你阅读并理解之后 相信你不再迷茫 不知道是否还记得 Code 属性 不记得的小伙伴建议回顾一下 Code 属性中存储了今天我们将要讲解的字节码指令 今天介绍一下字节码指令 加载和存储指令 所谓的字

很多Java工程师语法用的很666,但是真的让他说说Java是怎样编译运行的,我相信他会懵逼!!!

2b5c7fc40f4c5fe3a4fd74a6c71f5e22.png

希望处于这个阶段的同学可以仔细阅

Class文件系列

的文章,这里涵盖了Class文件的绝大部分内容,当你阅读并理解之后,相信你不再迷茫!!

不知道是否还记得Code属性,不记得的小伙伴建议回顾一下,Code属性中存储了今天我们将要讲解的字节码指令!!

今天介绍一下字节码指令(加载和存储指令)。所谓的字节码指令就是JVM在运行时所需要进行的操作,字节码指令大致分以下集中类型:

加载和存储指令

运算指令

类型转换指令

对象创建与访问指令

操作数栈管理指令

控制转移指令

方法调用和返回指令

异常处理指令

同步指令

对于大部分字节码指令,都包含了其操作所对应的数据类型,i对应Integer类型,l代表Long类型,f代表Float类型,d代表Double类型,a代表Reference类型,b代表byte类型,s代表short类型,c代表char类型。

加载存储指令

加载和存储指令用于将数据在栈帧的局部变量表和操作数栈中传输。

01-局部变量加载到操作数栈

iload,iload_

,lload, lload_

, fload, fload_

, dload, dload_

, aload, aload_

其实只是助记符,比如iload_1意思是将局部变量表slot索引为1的int型元素压入操作数栈顶,iload_1完全等同于iload(1)。

f11fa9e39aa962f187a9bc932a7d99a6.png

02-操作数栈加载到局部变量表

istore,istore_

、lstore, lstore_

, fstore, fstore_

, dstore, dstore_

, astore, astore_。

istore_1作用就是将操作数栈顶元素保存到局部变量表索引为1的位置处。

03-将常量压入到操作数栈

bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_m1,iconst_

,lconst_

,fconst_

,dconst_

这里我们说一下ldc、ldc_w、ldc2_w,我们先看一下Java8虚拟机规范对它的定义,如下图

8ae2aec1d2ce3543404bdb67075d3426.png

图上的意思大致是说将常量池中的一些特定类型的常量推入操作数栈顶,这些类型包括int,float,String, Class,java.lang.invoke.MethodType, java.lang.invoke.MethodHandle。

ldc等同于ldc_w, ldc2_w等同于ldc的特定类型的long和double。

public class ClassTest{

public void test(){

Class c = Long.class;

String s = “test”;

int r = Integer.MAX_VALUE;

float f = Float.MAX_VALUE;

long l = Long.MAX_VALUE;

double d = Double.MAX_VALUE;

}

}

0eb538eafe702cca4dcf00a20a19a445.png

注意看红框中的部分,ldc #2,常量池中的第二项是个Class类型,符合虚拟机规范的描述;在看 ldc #3,常量池中的第三项是个String类型,符合虚拟机规范的描述;ldc2_w #8、ldc2_w #11,在常量池的第8和第11项分别是Long和Double型,符合虚拟机规范。

005f2d3fe4389b7e07f3ba2ab983f085.png

JVM支持的是栈式指令集,在我们代码运行过程中,需要通过加载和存储指令来完成变量在局部变量表和操作数栈之间的传递。

本期的加载和存储指令就介绍到这,我们下期再见!!!

我是shysh95,希望可以和你专注技术的路上并肩作战,做跟绝大多数人不一样的事情,离平庸更远一点,扫码关注微信公众号,更多精彩文章!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176101.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:42
下一篇 2026年3月26日 下午10:42


相关推荐

  • wps插入批注快捷键是哪个?

    wps插入批注快捷键是哪个?前言 写论文的时候有时看文章想记录一下当时遇到的疑问 经常会用到注释 WPS 里怎么快速调出这一功能呢 方法 1 方法 2 如果使用键盘以上方法分别为 方法快捷键方法 1ait N L 方法 2alt R C

    2026年3月16日
    2
  • ❤️Windows系统❤️cmd命令+实用工具 大全❤️完整总结

    ❤️Windows系统❤️cmd命令+实用工具 大全❤️完整总结计算机系统自带实用命令+暗黑工具大全集【建议收藏】

    2022年5月1日
    47
  • 2025详解GPT-4o图像API完全指南:输入解析与生成功能【实战教程】

    2025详解GPT-4o图像API完全指南:输入解析与生成功能【实战教程】

    2026年3月16日
    2
  • zen cart template zencart模板修改[通俗易懂]

    zen cart template zencart模板修改[通俗易懂]encarttemplatezencart模板修改byZENCART模板 | postacomment下面简单的介绍下zencart网站模板的修改。修改较多的地方:(常用代码)一:头部文件为(例子):D:AppServwwwzencart12698includestemplatestheme3common–tpl_header.php1.

    2022年7月27日
    6
  • 数据分析,主成分分析例题

    数据分析,主成分分析例题已知协方差矩阵求X的各主成分以及主成分的贡献率主成分分析原理:找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,且彼此之间互不相关统计方法:主成分分析(主分量分析)主成分分析步骤1.根据已知协方差矩阵,求出相应的特征值(特征根)令|kE-A|=0(其中k是特征值),求出的k就是所需要的特征值2.求出对应特征值的特征向量解方程|kE-A|X=0,求X的所有情况(参考高等代数的第三章解线性方程组)求出基本解系,设定自由未知量的值(X是向量)3.对所求出来

    2025年7月12日
    7
  • quartus ii引脚分配再学习下

    quartus ii引脚分配再学习下最近开始鼓捣AC620这个板子,上来第一步就是要把引脚分配整理下,因为本身附带的文档并没有引脚分配文档。开发板:AC620芯片:CycloneIVEEP4CE10F17C8软件:quartusii一般来说对于芯片的引脚分配,最稳妥的方式就是在pinplanner中手动设置,当然用脚本文件也是可以的,一般的板子会提供一个.csv来提供所有的引脚分配。不过这个板子没有所以只…

    2022年10月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号