Java编译生成字节码-2020-10-12

2020-10-12  本文已影响0人  中一唐

javap -verbose Hello

Java代码:

<pre><code>public class Hello {

        public static void main(String[] args) {

                System.out.println("hello world");

        }

}</code></pre>

生成的字节码如下:

```Classfile /Users/jessen/learning/JAVA-000/Week_01/demo1/Hello.class

  Last modified 2020-10-12; size 415 bytes

  MD5 checksum f78738196756e74f31907b064c1ee653

  Compiled from "Hello.java"

public class Hello

  minor version: 0

  major version: 52

  flags: ACC_PUBLIC, ACC_SUPER

Constant pool:

#1 = Methodref          #6.#15        // java/lang/Object."":()V

   #2 = Fieldref          #16.#17        // java/lang/System.out:Ljava/io/PrintStream;

   #3 = String            #18            // hello world

   #4 = Methodref          #19.#20        // java/io/PrintStream.println:(Ljava/lang/String;)V

   #5 = Class              #21            // Hello

   #6 = Class              #22            // java/lang/Object

#7 = Utf8

   #8 = Utf8              ()V

   #9 = Utf8              Code

  #10 = Utf8              LineNumberTable

  #11 = Utf8              main

  #12 = Utf8              ([Ljava/lang/String;)V

  #13 = Utf8              SourceFile

  #14 = Utf8              Hello.java

#15 = NameAndType        #7:#8          // "":()V

  #16 = Class              #23            // java/lang/System

  #17 = NameAndType        #24:#25        // out:Ljava/io/PrintStream;

  #18 = Utf8              hello world

  #19 = Class              #26            // java/io/PrintStream

  #20 = NameAndType        #27:#28        // println:(Ljava/lang/String;)V

  #21 = Utf8              Hello

  #22 = Utf8              java/lang/Object

  #23 = Utf8              java/lang/System

  #24 = Utf8              out

  #25 = Utf8              Ljava/io/PrintStream;

  #26 = Utf8              java/io/PrintStream

  #27 = Utf8              println

  #28 = Utf8              (Ljava/lang/String;)V

{

  public Hello();

    descriptor: ()V

    flags: ACC_PUBLIC

    Code:

      stack=1, locals=1, args_size=1

         0: aload_0

1: invokespecial #1                  // Method java/lang/Object."":()V

         4: return

      LineNumberTable:

        line 2: 0

  public static void main(java.lang.String[]);

    descriptor: ([Ljava/lang/String;)V

    flags: ACC_PUBLIC, ACC_STATIC

    Code:

      stack=2, locals=1, args_size=1

         0: getstatic    #2                  // Field java/lang/System.out:Ljava/io/PrintStream;

         3: ldc          #3                  // String hello world

         5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V

         8: return

      LineNumberTable:

        line 4: 0

        line 5: 8

}

SourceFile: "Hello.java"```

上一篇 下一篇

猜你喜欢

热点阅读