https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html
搜索 arrayBaseOffset 可快速定位到举的例子
举的例子的图片里说,unsafe.arrayBaseOffset(int[].class) 能获取到数组首元素地址。。
可首先,这个是静态的,final 的,不可能不同 AtomicIntegerArray 实例有着不同的地址,但不同 AtomicIntegerArray 的实例内的数组不是同一个吧?
比如说
public static void main(String[] args) {
AtomicIntegerArray a = new AtomicIntegerArray();
AtomicIntegerArray b = new AtomicIntegerArray();
}
a 和 b 内部真的用来存储数据的数组不能同一个,那么它们各自的数组的起始地址应该不一样。但由于 private static final int base = unsafe.arrayBaseOffset(int[].class);
中 static final
的限定,base 不可能在 a 和 b 中不一样,那接着用 base 以及元素地址增量 scale 去算数组中某个元素的内存地址,怎么可能算对呢?
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.