`

openjdk jvm 字节码

    博客分类:
  • jvm
阅读更多
简单测试:
1 Test.java
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
       int a = 0;
       int b = 1;
       int c = 10;
       int d = a + b;
    }
}

2 运行:
E:\jvm>javac Test.java
E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_1
   3:   istore_2
   4:   bipush 10
   6:   istore_3
   7:   iload_1
   8:   iload_2
   9:   iadd
   10: istore 4
   12: return
}
If else测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int b = 1;
       int c = 2;
      
       if( a > b ) {
          c++;
       } else if ( a < c ) {
          c--;
       } else {
          c = c + 10;
       }
      
       System.out.println(c);
      
    }    

}

运行测试:
E:\jvm>javac Test.java
E:\jvm>java Test
1
E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_1
   3:   istore_2
   4:   iconst_2
   5:   istore_3
   6:   iload_1
   7:   iload_2
   8:   if_icmple       17
   11: iinc    3, 1
   14: goto    33
   17: iload_1
   18: iload_3
   19: if_icmpge       28
   22: iinc    3, -1
   25: goto    33
   28: iload_3
   29: bipush 10
   31: iadd
   32: istore_3
   33: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   36: iload_3
   37: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   40: return

}

Do while测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int result = 0;
              do {
              result += a;
              a++;
       } while(a<100);
       System.out.println(result);
}
}

运行测试:
E:\jvm>javac Test.java
E:\jvm>java Test
4950

E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_0
   3:   istore_2
   4:   iload_2
   5:   iload_1
   6:   iadd
   7:   istore_2
   8:   iinc    1, 1
   11: iload_1
   12: bipush 100
   14: if_icmplt       4
   17: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   20: iload_2
   21: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   24: return

}
While do测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int result = 0;
      
       while (a < 100) {
              result += a;
              a++;
       }
      
       System.out.println(result);
      
    }    

}

运行测试:
E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_0
   3:   istore_2
   4:   iload_1
   5:   bipush 100
   7:   if_icmpge       20
   10: iload_2
   11: iload_1
   12: iadd
   13: istore_2
   14: iinc    1, 1
   17: goto    4
   20: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   23: iload_2
   24: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   27: return

}

循环体测试:
1 Test.java
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
       double i;
           for (i = 10; i < 100.0; i++) {
               ;                   
           }
    }
}

2 运行:
E:\jvm>javac Test.java
E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   ldc2_w #2; //double 10.0d
   3:   dstore_1
   4:   dload_1
   5:   ldc2_w #4; //double 100.0d
   8:   dcmpg
   9:   ifge    19
   12: dload_1
   13: dconst_1
   14: dadd
   15: dstore_1
   16: goto    4
   19: return

}

Switch语句测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int c = 10;
       switch (a) {
       case 0 : c++;
              break;
        case 1 : c--;
              break;
        default: c++;
       }
       System.out.println(c);
    }    
}

运行测试:
E:\jvm>javac Test.java
E:\jvm>java Test
11

E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_0
   1:   istore_1
   2:   bipush 10
   4:   istore_2
   5:   iload_1
   6:   lookupswitch{ //2
                0: 32;
                1: 38;
                default: 44 }
   32: iinc    2, 1
   35: goto    47
   38: iinc    2, -1
   41: goto    47
   44: iinc    2, 1
   47: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   50: iload_2
   51: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   54: return

}

参数传递:
public class Test {
    public static void main(String[] args) {
      
       int c = add(1,2);

       System.out.println(c);
      
    }    

    private static int add(int a, int b) {

       return a + b;
    }

}

运行测试:

E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_1
   1:   iconst_2
   2:   invokestatic    #2; //Method add:(II)I
   5:   istore_1
   6:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   9:   iload_1
   10: invokevirtual   #4; //Method java/io/PrintStream.println:(I)V
   13: return

}
 
public class Test {
    public static void main(String[] args) {
      
       int a = 1;
        int b = 10;
        int c = 0;

       try {
              int i = 1 / c;
       } catch(Exception e)
       {
               //    
       }
       finally{
             
       }
      
    }    



}

E:\jvm>javac Test.java
E:\jvm>java Test
E:\jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
Code:
   0:   iconst_1
   1:   istore_1
   2:   bipush 10
   4:   istore_2
   5:   iconst_0
   6:   istore_3
   7:   iconst_1
   8:   iload_3
   9:   idiv
   10: istore 4
   12: goto    25
   15: astore 4
   17: goto    25
   20: astore 5
   22: aload   5
   24: athrow
   25: return
Exception table:
   from   to target type
     7    12    15   Class java/lang/Exception

     7    12    20   any
    15    17    20   any
    20    22    20   any

}

synchronized(args)

    3:   monitorenter
   4:   aload_1
   5:   monitorexit
   Exception table:
   from   to  target type
     4     6     9   any
     9    12     9   any

Field 测试:

Test.java

public class Test {
    public static String username = "username";
    private static int age = 0;
    public static void main(String[] args) {
String name = username;
System.out.println(name);

    }

}

E:\jvm>javap -c Test

Compiled from "Test.java"
public class Test extends java.lang.Object{
public static java.lang.String username;
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
public static void main(java.lang.String[]);
  Code:
   0:   getstatic       #2; //Field username:Ljava/lang/String;
   3:   astore_1
   4:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   7:   aload_1
   8:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   11:  return
static {};
  Code:
   0:   ldc     #5; //String username
   2:   putstatic       #2; //Field username:Ljava/lang/String;
   5:   iconst_0
   6:   putstatic       #6; //Field age:I
   9:   return
}
Person类及编译结果:
public class Person ...{

String name;
int age;


public void setAge(int age)
...{
    this.age = age;
}

public void setName(String name)
...{
    this.name = name;
}

private int getAge()
...{
    return age;
}

private String getName()
...{
    return name;
}

}

E:jvm>javap -c Person
Compiled from "Person.java"
public class Person extends java.lang.Object...{
java.lang.String name;

int age;

public Person();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void setAge(int);
  Code:
   0:   aload_0
   1:   iload_1
   2:   putfield        #2; //Field age:I
   5:   return

public void setName(java.lang.String);
  Code:
   0:   aload_0
   1:   aload_1
   2:   putfield        #3; //Field name:Ljava/lang/String;
   5:   return

}



Inner Class:
public class Person ...{
       
         String name;
         int age;


        public void setAge(int age)
        ...{
            this.age = age;
        }
       
        public void setName(String name)
        ...{
            this.name = name;
        }
       
        int getAge()
        ...{
            return age;
        }
       
        private String getName()
        ...{
            return name;
        }

}

class ManPerson extends Person ...{
   
        int getAge()...{
                    return super.getAge();
            }
   
    }



E:jvm>javap -c Person
Compiled from "Person.java"
public class Person extends java.lang.Object...{
java.lang.String name;

int age;

public Person();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void setAge(int);
  Code:
   0:   aload_0
   1:   iload_1
   2:   putfield        #2; //Field age:I
   5:   return

public void setName(java.lang.String);
  Code:
   0:   aload_0
   1:   aload_1
   2:   putfield        #3; //Field name:Ljava/lang/String;
   5:   return

int getAge();
  Code:
   0:   aload_0
   1:   getfield        #2; //Field age:I
   4:   ireturn

}


E:jvm>
类的调用实例:
public class Person ...{
       
         String name;
         int age;


        public void setAge(int age)
        ...{
            this.age = age;
        }
       
        public void setName(String name)
        ...{
            this.name = name;
        }
       
        int getAge()
        ...{
            return age;
        }
       
        private String getName()
        ...{
            return name;
        }

}

class ManPerson extends Person ...{
   
        int getAge()...{
                    return super.getAge();
            }
   
    }

public class Test...{


public static void main(String[] args)...{

    System.out.println("test");

    Person p = new Person();
    p.setName("psetName");
    p.setAge(22);

    System.out.println(p.getAge());

}
}
翻译结果:
E:jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object...{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
public static void main(java.lang.String[]);
  Code:
   0:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #3; //String test
   5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   8:   new     #5; //class Person
   11:  dup
   12:  invokespecial   #6; //Method Person."<init>":()V
   15:  astore_1
   16:  aload_1
   17:  ldc     #7; //String psetName
   19:  invokevirtual   #8; //Method Person.setName:(Ljava/lang/String;)V
   22:  aload_1
   23:  bipush  22
   25:  invokevirtual   #9; //Method Person.setAge:(I)V
   28:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   31:  aload_1
   32:  invokevirtual   #10; //Method Person.getAge:()I
   35:  invokevirtual   #11; //Method java/io/PrintStream.println:(I)V
   38:  return
}

分享到:
评论

相关推荐

    java字节码文件查看工具,查看class文件

    字节码是平台无关的,这意味着它能在任何支持Java虚拟机(JVM)的系统上运行。通过查看反编译的字节码,我们可以看到类的方法定义、变量声明、控制流结构等,这些都是原始Java源代码的逻辑表示。 在JD-GUI中,我们...

    Java lambda表达式和JVM字节码功能详解.pdf

    Java字节码和Lambda表达式之间的关系体现在JVM的LambdaMetafactory机制上,它负责在运行时动态生成对应的函数式类。Lambda表达式在编译后的`.class`文件中,通常以`ClassName$Lambda$1`这样的形式命名,其中`...

    openjdk8u60+jvm jdk源码+jvm源码

    JVM(Java Virtual Machine)是 JDK 的核心组成部分,它负责执行字节码,提供了一个“一次编写,到处运行”的环境。JVM 的源码对于理解 Java 性能优化、垃圾回收机制、类加载过程以及内存管理等方面有着至关重要的...

    Bytecoder:用于JVM字节码的丰富域模型和用于解释和转换它的框架

    当前构建状态:高水平目标能够将JVM字节码交叉编译为JavaScript,WebAssembly,OpenCL和其他语言主要的编译目标是JavaScript和WebAssembly ...OpenJDK 14作为JRE Classlib支持编译策略JVM字节码被解析并转换为中间表示...

    jvm8源码, openjdk8

    类加载器负责加载字节码文件,运行时数据区包括堆内存、栈内存、方法区、程序计数器和本地方法栈。执行引擎执行字节码,本地方法接口用于调用非Java语言实现的库。 2. **类加载机制**:JVM采用双亲委派模型进行类...

    编译调试jvm, openjdk8源码, openjdk7, make3.81源码

    源代码的获取和编译使得开发者可以深入理解JVM内部机制,包括垃圾回收、类加载、字节码执行等核心部分,同时也能根据需求进行定制化修改。 文件"openjdk-7u75-b13-linux-x64-18_dec_2014.tar.gz"包含了OpenJDK7的...

    OpenJDK-Research_codefollower.tar.gz

    7. **代码分析**:通过对OpenJDK源代码的深入分析,开发者可以学习到JVM如何管理内存、如何执行字节码、垃圾收集是如何工作的,以及Javac如何进行类型检查和优化等复杂话题。 通过研究这个压缩包中的内容,开发者...

    openjdk-6.tar.gz

    OpenJDK 6还包含HotSpot虚拟机,这是一个高性能的JVM实现,具有动态编译功能,可以将频繁执行的字节码转换为机器码以提高运行速度。 "openjdk-6-6b31-1.13.3.orig"是压缩包内的一个文件,可能是源代码或者编译后的...

    openjdk8完整源码

    2. 字节码执行:Java的字节码由JVM负责解释执行。OpenJDK的HotSpot虚拟机中,通过即时编译(JIT)技术将热点代码转换为机器码,提高运行速度。 3. 类库实现:Java的标准类库如集合框架、I/O流、网络通信等,其底层...

    jdk,jvm源码

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而无需修改代码。本文将详细探讨这些概念: 1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类...

    jvm虚拟机开源平台

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为Java应用程序提供跨平台的运行环境。开源JVM平台为开发者提供了深入理解JVM内部工作原理以及定制化JVM的可能性。"jvm虚拟机开源平台"这个...

    OpenJdk-7.zip

    1. **JVM(Java Virtual Machine)**:Java虚拟机,它是Java程序运行的平台,负责解释和执行字节码。 2. **JRE(Java Runtime Environment)**:Java运行时环境,提供了运行Java应用程序所需的库和环境。 3. **JDK...

    openjdk 1.7 windows 32位

    Java虚拟机是OpenJDK的核心部分,它是Java平台的基石,负责执行字节码并提供平台无关的运行环境。JVM使得Java程序能够在任何支持Java的平台上运行,无需重新编译。1.7版本,也被称为Java 7,引入了多项重要的新特性...

    OpenJDK源码

    JVM是Java程序运行的平台,它负责将字节码转换为机器码执行。在OpenJDK源码中,你可以找到JVM的主要组件,如类加载器、执行引擎、内存管理(包括垃圾收集器,如G1、ZGC等)和性能优化策略。例如,HotSpot虚拟机是...

    openjdk7源码

    Javac将源代码转换为字节码,这是一种平台无关的中间表示,可以在任何支持JVM的设备上运行。JDK7引入了诸如钻石操作符、try-with-resources语句和多线程并发API的改进等新特性,这些都在源码中有体现。 接下来是...

    openjdk6-sourcecode

    1. JVM实现:通过阅读OpenJDK6的源代码,开发者可以深入理解JVM如何解析和执行字节码,以及垃圾回收的实现细节。 2. 类库设计:OpenJDK6的源代码包含了丰富的类库,比如集合框架、I/O流、网络通信等,这些都是Java...

    openjdk-17.0.2(openjdk-17.0.2_windows-x64_bin.zip)

    2. **javac**: Java编译器,用于将源代码编译成可执行的字节码。 3. **java**: Java命令行工具,用于启动Java应用程序。 4. **javadoc**: 工具用于生成Java API文档。 5. **jar**: 工具用于创建、管理和提取Java归档...

    JVM分享pdf

    JVM是运行Java字节码的抽象计算机,是Java平台的一个重要组成部分,允许Java应用程序在不同的操作系统上运行而无需重新编译。JVM有多种实现,其中最著名的是HotSpot虚拟机,它是Oracle JDK和OpenJDK的默认虚拟机。 ...

    揭秘Java虚拟机-JVM设计原理与实现

    4. **字节码执行**:JVM通过解释器或即时编译器(JIT)来执行字节码。解释器逐行解释执行,而JIT将热点代码编译成机器码,提升运行效率。 5. **内存管理**:JVM自动进行垃圾收集,管理堆内存。它采用分代收集算法,...

Global site tag (gtag.js) - Google Analytics