JVM之 javap指令的使用

JVM — javap

什么是Java字节码指令?简而言之,Java字节码指令就是Java虚拟机能够听得懂、可执行的指令,可以说是Jvm层面的汇编语言,或者说是Java代码的最小执行单元
javac命令可以将源文件翻译成Jvm可以执行的指令
javap命令,它可以解析字节码,将字节码内部逻辑以可读的方式呈现出来

前置知识JVM字节码指令表(以下是本次文章会用到的指令)

iconst_m1   将int型的m1推送至栈顶
iload_m 将指定的第m个int型本地变量推送至栈顶
以上使用i来代表int
d:double,f:float
a:Reference,l:long
ps:当int 取值-1~5 采用iconst 指令,取值-128~127 采用bipush 指令,取值-32768~32767 采用sipush 指令,取值-2147483648~2147483647 采用ldc 指令

详细内容可以查看https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5
在这里插入图片描述

上一个Demo:

public class Demo {
    public static void main(String[] args) {
        int i = 11;
        int j = 12;
        int c = i + j;
        System.out.println(c);
    }
}
使用javap来分解一下
javap -verbose Demo.class > Demo.txt

打开Demo.txt,截取一部分

JVM执行字节码指令的时候基于栈结构的(先入后出)

我们重点看的是Code后面的

//常量池
Constant pool:
   #1 = Methodref          #5.#14         // java/lang/Object."<init>":()V
   #2 = Fieldref           #15.#16        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Methodref          #17.#18        // java/io/PrintStream.println:(I)V
   #4 = Class              #19            // Demo
   #5 = Class              #20            // java/lang/Object
   #6 = Utf8               <init>
   #7 = Utf8               ()V
   ......
{
  public Demo();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
    //操作数栈最大深度,本地变量表最大长度(64位操作系统为2其余为1),参数个数
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 7: 0
  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    //字节码
    Code:
      stack=2, locals=4, args_size=1
         0: bipush        11  //将11入栈
         2: istore_1		 //取出栈顶元素存进本地变量1
         3: bipush        12 //将12入栈
         5: istore_2	     //取出栈顶元素存进本地变量2
         6: iload_1          //把本地变量1入栈
         7: iload_2          //把本地变量2入栈
         8: iadd             //把栈顶取两个元素进行加法,进行入栈
         9: istore_3         //取出栈顶元素存进本地变量3
        10: getstatic     #2 //调用System.out   // Field java/lang/System.out:Ljava/io/PrintStream;
        13: iload_3          //把本地变量3入栈
        14: invokevirtual #3//print语句                // Method java/io/PrintStream.println:(I)V
        17: return          //返回值
      //行号表,第一个数字代表代码的行号,第二个数字代表字节码的行号
      LineNumberTable:
        line 9: 0
        line 10: 3
        line 11: 6
        line 12: 10
        line 13: 17
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值