java 查看字节码_java javap查看class字节码

java为我们提供了javap命令来查看class字节码,下面以实例来进行说明。首先写一段单例懒加载的代码:

class Singleton{

private volatile static Singleton instance = null;

private Singleton() {}

public static Singleton getInstance() {

if(instance==null) {

synchronized (Singleton.class) {

if(instance==null)

instance = new Singleton();

}

}

return instance;

}

}

对上面代码进行编译,操作,这里采用idea的maven环境进行编译,编译之后,class文件位于target目录下。

36dad429f27e4d5343900bc90f560052.png

然后通过idea提供的Terminal工具,进入该目录:

ershixiongdeMacBook-Pro:java-stream zzs$ cd target/classes/com/secbro2/singleton/

ershixiongdeMacBook-Pro:singleton zzs$ ls

Singleton.class

ershixiongdeMacBook-Pro:singleton zzs$

然后执行以下命令,并获得字节码内容:

javap -c Singleton.class

Compiled from "Singleton.java"

public class com.secbro2.singleton.Singleton {

public static com.secbro2.singleton.Singleton getInstance();

Code:

0: getstatic #2 // Field instance:Lcom/secbro2/singleton/Singleton;

3: ifnonnull 37

6: ldc #3 // class com/secbro2/singleton/Singleton

8: dup

9: astore_0

10: monitorenter

11: getstatic #2 // Field instance:Lcom/secbro2/singleton/Singleton;

14: ifnonnull 27

17: new #3 // class com/secbro2/singleton/Singleton

20: dup

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

24: putstatic #2 // Field instance:Lcom/secbro2/singleton/Singleton;

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 instance:Lcom/secbro2/singleton/Singleton;

40: areturn

Exception table:

from to target type

11 29 32 any

32 35 32 any

static {};

Code:

0: aconst_null

1: putstatic #2 // Field instance:Lcom/secbro2/singleton/Singleton;

4: return

}

查看字节码对于java内部执行的逻辑可以有很好的理解,特别是对于线程并发相关方面的有非常大的帮助。

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值