关于在AtomicInteger的static块中unsafe.objectFieldOffset干什么用的简介

sun.misc.Unsafe 是JDK内部用的工具类。它通过暴露一些Java意义上说“不安全”的功能给Java层代码,来让JDK能够更多的使用Java代码来实现一些原本是平台相关的、需要使用native语言(例如C或C++)才可以实现的功能。该类不应该在JDK核心类库之外使用。

JVM的实现可以自由选择如何实现Java对象的“布局”,也就是在内存里Java对象的各个部分放在哪里,包括对象的实例字段和一些元数据之类。sun.misc.Unsafe里关于对象字段访问的方法把对象布局抽象出来,它提供了objectFieldOffset()方法用于获取某个字段相对Java对象的“起始地址”的偏移量,也提供了getInt、getLong、getObject之类的方法可以使用前面获取的偏移量来访问某个Java对象的某个字段。

关于对齐:

64位机器普通对象:

1. 对象头(_mark), 8个字节

2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节

3. 数据区

4.Padding(内存对齐),按照8的倍数对齐---用于补齐8的倍数,凑整;

5、引用类型是:4个字节,我认为就是Oop指针;

java的基本数据类型:byte,short,int,long,float,double,char,boolean(脑补他们分别占几个字节)

从长到短排列,引用排最后:  long/double --> int/float -->  short/char --> byte/boolean --> Reference


猜你喜欢

转载自blog.csdn.net/blogs_broadcast/article/details/80672515