java.lang.invoke.VarHandle.compareAndSet()实现位置及C/C++源码查询
VarHandle.compareAndSet 的 C/C++ 实现源码位置
VarHandle的compareAndSet是带有native和@IntrinsicCandidate标记的方法,它的实现分为两部分:
- 通用Native绑定逻辑:在OpenJDK源码的
src/java.base/share/native/libjava/lang/invoke/VarHandle.c文件中,这里主要处理参数解析、方法分发的通用逻辑,之后会调用HotSpot虚拟机提供的底层原子操作接口。 - 平台相关的Intrinsic优化实现:因为它是 intrinsics 候选方法,不同CPU架构会有针对性的高性能实现:
- x86_64架构:核心代码在
src/hotspot/cpu/x86/atomic_x86.cpp这类原子操作相关文件中,依赖Atomic::cmpxchg系列函数实现 - AArch64架构:对应实现文件为
src/hotspot/cpu/aarch64/atomic_aarch64.cpp,基于架构原生原子指令完成操作
- x86_64架构:核心代码在
另外需要注意,compareAndSet使用了@MethodHandle.PolymorphicSignature,属于多态方法,会通过方法句柄机制根据参数类型路由到对应类型的原子操作实现。
内容的提问来源于stack exchange,提问作者coderodde
相关产品推荐
相关产品推荐

