下面的信息可以通过javap这个反编译命令或者jclasslib这个插件查看
第一部分:CA FE BA BE 前四个字节 魔数
第二部分:次版本号 00 00(0)
第三部分:00 34(52)-->1.8 51->1.7 ...JDK主版本号
第四部分:常量池的个数2个字节 00 19(25-1=24)第0号常量被jvm给占用了,表示什么都不引用
常量池分类:字面量、符号引用,第一个字节是tag
//java/lang/Object."<init>":()V 没有入参,返回值为 null
第一个常量:0A 00 04 00 15 methodref_info: 0A class_index: 00 04(4) #4 00 15(21)(nameAndType_index)
第五个常量:01 -> utf-8 length: 00 08(8个字节) 75 73 65 72 4E 61 6D 65->userName
access_flag 类的权限描述符(2个字节)0x0021 acc_public acc_super
this 关键字是jvm传入方法的第一个参数
This class Name: 2个字节(索引值)00 03
super class name:2个字节(索引值)00 04
实现接口的个数:2个字节:00 00 -->最多65535个
字段的个数:00 01(1)
filed_info(1),可以通过下面3个描述符唯一确定一个字段
访问修饰符:00 02 acc_private
字段名称的索引: 00 05#5 -> userName
字段描述索引:00 06#6 -> Ljava/lang/String;
指令:
2A --> aload_0
B7 -->调用父类的构造方法 #00 01 java/lang/Object."<init>":()V
B1 -->return void
分布式锁:
1.基于数据库实现分布式锁
2.基于缓存(Redis等)实现分布式锁
3.基于Zookeeper实现分布式锁
基于数据库缺点:
1.这把锁强依赖于数据库的可用性,