我在GrepCode上偶然发现了AtomicInteger类的源代码,并找到了以下代码片段。
static {
try {
valueOffset = unsafe.objectFieldOffset
(AtomicInteger.class.getDeclaredField("value"));
} catch (Exception ex) { throw new Error(ex); }
}
private volatile int value;静态块如何知道实例变量值的偏移量。在加载和链接类时进行静态初始化。那么我们如何知道实例值在类加载时的偏移量呢?对象是在类加载之后创建的。当创建任何对象时,"value“实例变量将具有固定偏移量。请解释一下。
发布于 2016-05-19 12:00:07
Unsafe.objectFieldOffset()获取类中已声明字段的偏移量。这是类级别的信息。它与该字段的实例值无关。
偏移量仅用于在更新AtomicInteger实例的value字段时确定要寻址的内存位置。
https://stackoverflow.com/questions/37313590
复制相似问题