Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3657189
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Java

2021-04-20 16:34:43

字节码层面

通过javac Singleton.java将类编译为class文件,再通过javap -v -p Singleton.class命令反编译查看字节码文件。-p的作用是显示所有类与成员

D:\JavaSE\JavaProject\design-pattern\src\main\java>javap -p -v Singleton.class

Classfile /D:/JavaSE/JavaProject/design-pattern/src/main/java/Singleton.class

  Last modified 2021-4-19; size 509 bytes

  MD5 checksum fc6fcd094d2d9cdf0edd20d59c6b0d22

  Compiled from "Singleton.java"

public class Singleton

  minor version: 0

  major version: 52

  flags: ACC_PUBLIC, ACC_SUPER

Constant pool:

   #1 = Methodref          #5.#20         // java/lang/Object."":()V

   #2 = Fieldref           #3.#21         // Singleton.singleton:LSingleton;

   #3 = Class              #22            // Singleton

   #4 = Methodref          #3.#20         // Singleton."":()V

   #5 = Class              #23            // java/lang/Object

   #6 = Utf8               singleton

   #7 = Utf8               LSingleton;

   #8 = Utf8               

   #9 = Utf8               ()V

  #10 = Utf8               Code

  #11 = Utf8               LineNumberTable

  #12 = Utf8               getInstance

  #13 = Utf8               ()LSingleton;

  #14 = Utf8               StackMapTable

  #15 = Class              #23            // java/lang/Object

  #16 = Class              #24            // java/lang/Throwable

  #17 = Utf8               

  #18 = Utf8               SourceFile

  #19 = Utf8               Singleton.java

  #20 = NameAndType        #8:#9          // "":()V

  #21 = NameAndType        #6:#7          // singleton:LSingleton;

  #22 = Utf8               Singleton

  #23 = Utf8               java/lang/Object

  #24 = Utf8               java/lang/Throwable

{

  private static volatile Singleton singleton;

    descriptor: LSingleton;

    flags: ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE

  private Singleton();

    descriptor: ()V

    flags: ACC_PRIVATE

    Code:

      stack=1, locals=1, args_size=1

         0: aload_0

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

         4: return

      LineNumberTable:

        line 3: 0

        line 5: 4

  public static Singleton getInstance();

    descriptor: ()LSingleton;

    flags: ACC_PUBLIC, ACC_STATIC

    Code:

      stack=2, locals=2, args_size=0

         0: getstatic     #2                  // Field singleton:LSingleton;

         3: ifnonnull     37

         6: ldc           #3                  // class Singleton

         8: dup

         9: astore_0

        10: monitorenter

        11: getstatic     #2                  // Field singleton:LSingleton;

        14: ifnonnull     27

        17: new           #3                  // class Singleton

        20: dup

        21: invokespecial #4                  // Method "":()V

        24: putstatic     #2                  // Field singleton:LSingleton;

        27: aload_0

        28: monitorexit

        29: goto          37

        32: astore_1

        33: aload_0

        34: monitorexit

        35: aload_1

        36: athrow

        37: getstatic     #2                  // Field singleton:LSingleton;

        40: areturn

      Exception table:

         from    to  target type

            11    29    32   any

            32    35    32   any

      LineNumberTable:

        line 7: 0

        line 8: 6

        line 9: 11

        line 10: 17

        line 12: 27

        line 14: 37

      StackMapTable: number_of_entries = 3

        frame_货币代码type = 252 /* append */

          offset_delta = 27

          locals = [ class java/lang/Object ]

        frame_type = 68 /* same_locals_1_stack_item */

          stack = [ class java/lang/Throwable ]

        frame_type = 250 /* chop */

          offset_delta = 4

  static {};

    descriptor: ()V

    flags: ACC_STATIC

    Code:

      stack=1, locals=0, args_size=0

         0: aconst_null

         1: putstatic     #2                  // Field singleton:LSingleton;

         4: return

      LineNumberTable:

        line 2: 0

}

SourceFile: "Singleton.java"

阅读(15341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~