synchronized (obj) {
...
}
大家都知道以上代码可以实现加锁。有没有想过synchronized到底是怎么实现加锁的?synchronized底层的逻辑是什么样的?
要弄清楚这个问题,就有必要了解一下在JVM虚拟机中一个Java对象是怎么存在的,换句话说就是在虚拟机中用什么结构来表示一个Java对象,或者一个Java对象的组成结构是什么样的。
划重点~~
根据JVM虚拟机规范 一个Java 对象由 Object Header (对象头),Instance Data(实例数据), Padding(对齐区域) 三部分组成。
区域名 |
描述说明 |
是否必须 |
对象头 |
JVM规范规定的每个Java对象都有的一块区域,用于实现一些额外的增强功能(如:锁,hashCode,GC) |
必须 |
实例数据 |
当前对象属性数据信息,包括父类的属性信息 |