<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>JVM on shuimo0413</title>
        <link>https://shuimo0413.github.io/categories/jvm/</link>
        <description>Recent content in JVM on shuimo0413</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>shuimo</copyright>
        <lastBuildDate>Tue, 20 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shuimo0413.github.io/categories/jvm/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>JVM 字节码</title>
        <link>https://shuimo0413.github.io/p/jvm-bytecode/</link>
        <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
        
        <guid>https://shuimo0413.github.io/p/jvm-bytecode/</guid>
        <description>&lt;h1 id=&#34;jvm-字节码&#34;&gt;JVM 字节码
&lt;/h1&gt;&lt;p&gt;注：指令按「功能大类」划分，同一类内按使用频率排序，每个指令包含「格式」「作用」「使用场景」，结合实际代码案例便于理解。&lt;/p&gt;
&lt;h2 id=&#34;一数据操作指令最常用占字节码总量-60&#34;&gt;一、数据操作指令（最常用，占字节码总量 60%+）
&lt;/h2&gt;&lt;h3 id=&#34;1-局部变量操作指令操作方法内的局部变量如参数临时变量&#34;&gt;1. 局部变量操作指令（操作方法内的局部变量，如参数、临时变量）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;iload_n（n=0-3）&lt;/td&gt;
          &lt;td&gt;加载第 n 个局部变量（int/boolean 类型）到操作数栈&lt;/td&gt;
          &lt;td&gt;int a=1; 中加载a（iload_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;istore_n（n=0-3）&lt;/td&gt;
          &lt;td&gt;从操作数栈存 int/boolean 值到第 n 个局部变量&lt;/td&gt;
          &lt;td&gt;a=2; 中存值到a（istore_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;aload_n（n=0-3）&lt;/td&gt;
          &lt;td&gt;加载第 n 个局部变量（引用类型，如对象 / 数组）到操作数栈&lt;/td&gt;
          &lt;td&gt;int[] arr=new int[3]; 加载arr（aload_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;astore_n（n=0-3）&lt;/td&gt;
          &lt;td&gt;从操作数栈存引用值到第 n 个局部变量&lt;/td&gt;
          &lt;td&gt;arr=new int[3]; 存arr到局部变量（astore_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;iload index&lt;/td&gt;
          &lt;td&gt;加载指定索引（&amp;gt;3）的 int/boolean 局部变量&lt;/td&gt;
          &lt;td&gt;局部变量超过 4 个时使用（如iload 4）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;aload index&lt;/td&gt;
          &lt;td&gt;加载指定索引（&amp;gt;3）的引用局部变量&lt;/td&gt;
          &lt;td&gt;局部变量超过 4 个时使用（如aload 5）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-常量操作指令往操作数栈压入常量值&#34;&gt;2. 常量操作指令（往操作数栈压入常量值）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;iconst_n（n=-1~5）&lt;/td&gt;
          &lt;td&gt;压入 int 常量 n（boolean 用 1=true/0=false）&lt;/td&gt;
          &lt;td&gt;return true;（iconst_1）、int a=3;（iconst_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;lconst_n（n=0/1）&lt;/td&gt;
          &lt;td&gt;压入 long 常量 n（占 2 个操作数栈位置）&lt;/td&gt;
          &lt;td&gt;long b=1L;（lconst_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;fconst_n（n=0-2）&lt;/td&gt;
          &lt;td&gt;压入 float 常量 n&lt;/td&gt;
          &lt;td&gt;float c=2.0f;（fconst_2）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dconst_n（n=0/1）&lt;/td&gt;
          &lt;td&gt;压入 double 常量 n（占 2 个操作数栈位置）&lt;/td&gt;
          &lt;td&gt;double d=1.0;（dconst_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ldc 常量&lt;/td&gt;
          &lt;td&gt;压入 int/long/float/double/ 字符串常量（从常量池取）&lt;/td&gt;
          &lt;td&gt;String s=&amp;ldquo;abc&amp;rdquo;;（ldc &amp;ldquo;abc&amp;rdquo;）、int a=100;（ldc 100）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ldc2_w 常量&lt;/td&gt;
          &lt;td&gt;压入 long/double 常量（常量池索引 &amp;gt; 255 时用）&lt;/td&gt;
          &lt;td&gt;long e=1000L;（ldc2_w 1000L）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;3-数组操作指令操作数组的创建赋值取值&#34;&gt;3. 数组操作指令（操作数组的创建、赋值、取值）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;newarray 类型&lt;/td&gt;
          &lt;td&gt;创建一维基本类型数组（如 int/char）&lt;/td&gt;
          &lt;td&gt;int[] arr=new int[3];（iconst_3→newarray int）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;anewarray 类&lt;/td&gt;
          &lt;td&gt;创建一维引用类型数组（如 Object []/int [][]）&lt;/td&gt;
          &lt;td&gt;int[][] grid=new int[3][];（iconst_3→anewarray &amp;ldquo;[I&amp;rdquo;）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;iaload&lt;/td&gt;
          &lt;td&gt;从 int 数组中取元素（数组引用 + 索引→元素值）&lt;/td&gt;
          &lt;td&gt;int a=arr[2];（aload_1→iconst_2→iaload）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;iastore&lt;/td&gt;
          &lt;td&gt;往 int 数组中存元素（数组引用 + 索引 + 值→存值）&lt;/td&gt;
          &lt;td&gt;arr[2]=5;（aload_1→iconst_2→iconst_5→iastore）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;aaload&lt;/td&gt;
          &lt;td&gt;从引用数组中取元素（如 int [][] 取某一行）&lt;/td&gt;
          &lt;td&gt;int[] row=grid[0];（aload_1→iconst_0→aaload）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;aastore&lt;/td&gt;
          &lt;td&gt;往引用数组中存元素（如 int [][] 存某一行）&lt;/td&gt;
          &lt;td&gt;grid[0]=new int[3];（aload_1→iconst_0→aload_2→aastore）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;arraylength&lt;/td&gt;
          &lt;td&gt;获取数组长度（数组引用→长度值）&lt;/td&gt;
          &lt;td&gt;int len=arr.length;（aload_1→arraylength→istore_2）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;multianewarray 类 维度&lt;/td&gt;
          &lt;td&gt;创建多维数组（如 int [2][3]）&lt;/td&gt;
          &lt;td&gt;较少用，int[][][] arr=new int[2][3][4];（iconst_2→iconst_3→iconst_4→multianewarray &amp;ldquo;[[[I&amp;rdquo; 3）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;二算术与逻辑指令常用处理数值计算和比较&#34;&gt;二、算术与逻辑指令（常用，处理数值计算和比较）
&lt;/h2&gt;&lt;h3 id=&#34;1-算术指令intlongfloatdouble-类型的加减乘除&#34;&gt;1. 算术指令（int/long/float/double 类型的加减乘除）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;iadd&lt;/td&gt;
          &lt;td&gt;操作数栈顶两个 int 值相加（a+b→结果压栈）&lt;/td&gt;
          &lt;td&gt;int c=a+b;（iload_1→iload_2→iadd→istore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;isub&lt;/td&gt;
          &lt;td&gt;操作数栈顶两个 int 值相减（a-b→结果压栈）&lt;/td&gt;
          &lt;td&gt;int c=a-b;（iload_1→iload_2→isub→istore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;imul&lt;/td&gt;
          &lt;td&gt;操作数栈顶两个 int 值相乘（a*b→结果压栈）&lt;/td&gt;
          &lt;td&gt;int c=a*b;（iload_1→iload_2→imul→istore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;idiv&lt;/td&gt;
          &lt;td&gt;操作数栈顶两个 int 值相除（a/b→结果压栈，整除）&lt;/td&gt;
          &lt;td&gt;int c=a/b;（iload_1→iload_2→idiv→istore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;irem&lt;/td&gt;
          &lt;td&gt;操作数栈顶两个 int 值取余（a% b→结果压栈）&lt;/td&gt;
          &lt;td&gt;int c=a%b;（iload_1→iload_2→irem→istore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ladd/lsub&lt;/td&gt;
          &lt;td&gt;long 类型的加减（占 2 个操作数栈位置）&lt;/td&gt;
          &lt;td&gt;long c=a+b;（lload_1→lload_2→ladd→lstore_3）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;fadd/dadd&lt;/td&gt;
          &lt;td&gt;float/double 类型的加法&lt;/td&gt;
          &lt;td&gt;较少用，float c=a+b;（fload_1→fload_2→fadd→fstore_3）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-比较指令比较操作数栈顶值结果用于分支跳转&#34;&gt;2. 比较指令（比较操作数栈顶值，结果用于分支跳转）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用（int 类型，其他类型类似：lcmp/fcmpg 等）&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;if_icmpeq 目标行&lt;/td&gt;
          &lt;td&gt;比较两个 int 值：相等则跳转到目标行&lt;/td&gt;
          &lt;td&gt;if(a==b) { &amp;hellip; }（iload_1→iload_2→if_icmpeq 10）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if_icmpne 目标行&lt;/td&gt;
          &lt;td&gt;比较两个 int 值：不相等则跳转到目标行&lt;/td&gt;
          &lt;td&gt;if(a!=b) { &amp;hellip; }（iload_1→iload_2→if_icmpne 10）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if_icmplt 目标行&lt;/td&gt;
          &lt;td&gt;比较两个 int 值：a&amp;lt;b 则跳转到目标行&lt;/td&gt;
          &lt;td&gt;if(a&amp;lt;b) { &amp;hellip; }（iload_1→iload_2→if_icmplt 10）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if_icmpge 目标行&lt;/td&gt;
          &lt;td&gt;比较两个 int 值：a&amp;gt;=b 则跳转到目标行&lt;/td&gt;
          &lt;td&gt;for(int i=0;i&amp;lt;len;i++)（iload_1→iload_2→if_icmpge 20）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ifeq 目标行&lt;/td&gt;
          &lt;td&gt;比较 int 值与 0：等于 0 则跳转&lt;/td&gt;
          &lt;td&gt;if(flag==false) { &amp;hellip; }（iload_1→ifeq 10，因 false=0）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ifne 目标行&lt;/td&gt;
          &lt;td&gt;比较 int 值与 0：不等于 0 则跳转&lt;/td&gt;
          &lt;td&gt;if(flag==true) { &amp;hellip; }（iload_1→ifne 10，因 true=1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;acmp_eq 目标行&lt;/td&gt;
          &lt;td&gt;比较两个引用类型：地址相等则跳转&lt;/td&gt;
          &lt;td&gt;if(obj1==obj2) { &amp;hellip; }（aload_1→aload_2→if_acmpeq 10）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;三分支与循环指令常用控制代码执行流程&#34;&gt;三、分支与循环指令（常用，控制代码执行流程）
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;goto 目标行&lt;/td&gt;
          &lt;td&gt;无条件跳转到目标行（不依赖条件）&lt;/td&gt;
          &lt;td&gt;while(true) { &amp;hellip; }（循环体结束→goto 5）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if_icmpne 目标行&lt;/td&gt;
          &lt;td&gt;见「比较指令」，常用于 if/for 条件判断&lt;/td&gt;
          &lt;td&gt;if(a!=1) return false;（iload_1→iconst_1→if_icmpne 7）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;tableswitch&lt;/td&gt;
          &lt;td&gt;按 int 值跳转（用于 switch-case，值连续时）&lt;/td&gt;
          &lt;td&gt;switch(a) { case 1: &amp;hellip; case 2: &amp;hellip; }&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;lookupswitch&lt;/td&gt;
          &lt;td&gt;按 int 值跳转（用于 switch-case，值不连续时）&lt;/td&gt;
          &lt;td&gt;switch(a) { case 1: &amp;hellip; case 100: &amp;hellip; }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;四方法调用与返回指令常用调用方法和返回结果&#34;&gt;四、方法调用与返回指令（常用，调用方法和返回结果）
&lt;/h2&gt;&lt;h3 id=&#34;1-方法调用指令按调用类型排序静态方法最常用&#34;&gt;1. 方法调用指令（按调用类型排序，静态方法最常用）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;invokestatic 类.方法&lt;/td&gt;
          &lt;td&gt;调用静态方法（无 this）&lt;/td&gt;
          &lt;td&gt;Math.min(a,b)（iload_1→iload_2→invokestatic java/lang/Math.min:(II)I）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;invokevirtual 类.方法&lt;/td&gt;
          &lt;td&gt;调用实例方法（有 this，动态绑定）&lt;/td&gt;
          &lt;td&gt;System.out.println(a)（getstatic→iload_1→invokevirtual java/io/PrintStream.println:(I)V）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;invokespecial 类.方法&lt;/td&gt;
          &lt;td&gt;调用特殊方法（构造方法、private 方法、super 方法）&lt;/td&gt;
          &lt;td&gt;构造方法（aload_0→invokespecial java/lang/Object.&amp;quot;&lt;init&gt;&amp;quot;:()V）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;invokeinterface 接口.方法&lt;/td&gt;
          &lt;td&gt;调用接口方法（动态绑定）&lt;/td&gt;
          &lt;td&gt;较少用，List.add(obj)（aload_1→aload_2→invokeinterface java/util/List.add:(Ljava/lang/Object;)Z）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;invokedynamic 引导方法&lt;/td&gt;
          &lt;td&gt;调用动态方法（Lambda/Stream 用）&lt;/td&gt;
          &lt;td&gt;Java 8 + 特性，List.forEach(System.out::println)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-方法返回指令按返回值类型排序&#34;&gt;2. 方法返回指令（按返回值类型排序）
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;ireturn&lt;/td&gt;
          &lt;td&gt;返回 int/boolean 类型结果&lt;/td&gt;
          &lt;td&gt;return true;（iconst_1→ireturn）、return 5;（iconst_5→ireturn）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;lreturn&lt;/td&gt;
          &lt;td&gt;返回 long 类型结果&lt;/td&gt;
          &lt;td&gt;return 100L;（lconst_1→lreturn）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;freturn&lt;/td&gt;
          &lt;td&gt;返回 float 类型结果&lt;/td&gt;
          &lt;td&gt;return 2.0f;（fconst_2→freturn）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dreturn&lt;/td&gt;
          &lt;td&gt;返回 double 类型结果&lt;/td&gt;
          &lt;td&gt;return 3.0;（dconst_1→dreturn）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;areturn&lt;/td&gt;
          &lt;td&gt;返回引用类型结果（对象 / 数组 / 字符串）&lt;/td&gt;
          &lt;td&gt;return arr;（aload_1→areturn）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;return&lt;/td&gt;
          &lt;td&gt;无返回值（void 方法）&lt;/td&gt;
          &lt;td&gt;void func() { &amp;hellip; }（方法结束→return）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;五类型相关指令较常用处理类型转换静态变量&#34;&gt;五、类型相关指令（较常用，处理类型转换、静态变量）
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;i2l/i2f/i2d&lt;/td&gt;
          &lt;td&gt;int 转 long/float/double（宽转换，无溢出）&lt;/td&gt;
          &lt;td&gt;long a=1;（iconst_1→i2l→lstore_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;l2i/f2i/d2i&lt;/td&gt;
          &lt;td&gt;long/float/double 转 int（窄转换，可能溢出）&lt;/td&gt;
          &lt;td&gt;int a=(int)100L;（lconst_1→l2i→istore_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;checkcast 类&lt;/td&gt;
          &lt;td&gt;检查引用类型强制转换是否合法（如 Object→String）&lt;/td&gt;
          &lt;td&gt;String s=(String)obj;（aload_1→checkcast java/lang/String→astore_2）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;instanceof 类&lt;/td&gt;
          &lt;td&gt;判断引用是否为某类 / 接口的实例（返回 boolean）&lt;/td&gt;
          &lt;td&gt;if(obj instanceof String) { &amp;hellip; }（aload_1→instanceof java/lang/String→ifne 10）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;getstatic 类.字段&lt;/td&gt;
          &lt;td&gt;获取静态变量值（如 System.out）&lt;/td&gt;
          &lt;td&gt;PrintStream out=System.out;（getstatic java/lang/System.out:Ljava/io/PrintStream;→astore_1）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;putstatic 类.字段&lt;/td&gt;
          &lt;td&gt;给静态变量赋值（如 Math.PI 不可用，用自定义静态变量）&lt;/td&gt;
          &lt;td&gt;MyClass.count=5;（iconst_5→putstatic com/xxx/MyClass.count:I）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;六异常与同步指令不常用处理异常和线程安全&#34;&gt;六、异常与同步指令（不常用，处理异常和线程安全）
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;athrow&lt;/td&gt;
          &lt;td&gt;抛出异常对象（如 throw new Exception ()）&lt;/td&gt;
          &lt;td&gt;throw new RuntimeException();（new→dup→invokespecial→athrow）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;monitorenter&lt;/td&gt;
          &lt;td&gt;获取对象监视器锁（synchronized 代码块入口）&lt;/td&gt;
          &lt;td&gt;synchronized(obj) { &amp;hellip; }（aload_1→monitorenter）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;monitorexit&lt;/td&gt;
          &lt;td&gt;释放对象监视器锁（synchronized 代码块出口）&lt;/td&gt;
          &lt;td&gt;synchronized 代码块结束→aload_1→monitorexit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;jsr 目标行&lt;/td&gt;
          &lt;td&gt;跳转到异常处理代码（Java 6 前用，现已被异常表替代）&lt;/td&gt;
          &lt;td&gt;极少用，现代字节码用「异常表」记录异常处理逻辑&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;七栈操作指令较常用操作操作数栈&#34;&gt;七、栈操作指令（较常用，操作操作数栈）
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令格式&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
          &lt;th&gt;使用场景举例&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;dup&lt;/td&gt;
          &lt;td&gt;复制操作数栈顶元素（常用于对象创建后调用构造方法）&lt;/td&gt;
          &lt;td&gt;new Object()（new→dup→invokespecial）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dup_x1&lt;/td&gt;
          &lt;td&gt;复制栈顶元素，插入到栈顶下第 1 个元素前&lt;/td&gt;
          &lt;td&gt;较少用，复杂栈操作（如a,b→a,b,a）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pop&lt;/td&gt;
          &lt;td&gt;弹出操作数栈顶元素（丢弃，无返回）&lt;/td&gt;
          &lt;td&gt;不需要的计算结果（如a+b;→iadd→pop）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;pop2&lt;/td&gt;
          &lt;td&gt;弹出栈顶 2 个元素（用于 long/double）&lt;/td&gt;
          &lt;td&gt;long a=1L;→lconst_1→pop2（丢弃 a）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
        </item>
        
    </channel>
</rss>
