2

我在GrepCode上遇到了 AtomicInteger 类的源代码,并找到了以下代码片段。

   static {
   try {
       valueOffset = unsafe.objectFieldOffset
       (AtomicInteger.class.getDeclaredField("value"));
    } catch (Exception ex) { throw new Error(ex); }
}
private volatile int value;

静态块如何知道实例变量值的偏移量。加载和链接类时进行静态初始化。那么我们如何知道类加载时实例值的偏移量。类加载后创建对象。当创建对象时,“值”实例变量是否将具有固定的偏移量。请解释 。

4

1 回答 1

0

Unsafe.objectFieldOffset()获取类中声明字段的偏移量。这是类级别的信息。它与该字段的实例值无关。

偏移量仅用于确定在更新实例value字段时要寻址的内存位置。AtomicInteger

于 2016-05-19T04:00:06.933 回答