【问题标题】:AtomicInteger is implemented base on JNI?AtomicInteger 是基于 JNI 实现的?
【发布时间】:2012-01-07 09:21:01
【问题描述】:

Soneone 告诉我AtomicInteger 是使用 JNI 实现的,所以它比同步快得多。这是真的吗?

【问题讨论】:

  • 他们实际上是说“JNI”还是说“本机代码”?有很大的不同。
  • JNI 是一种与 external 本机代码互操作的方式。在这种情况下,我希望代码成为 JVM 的一部分,因此它不需要经过几乎那么多的循环。

标签: java multithreading jvm java-native-interface


【解决方案1】:

它不太可能基于 JNI 来实现,因为这会带来很大的开销。上次我查看 OpenJDK 的实现是基于 sun.misc.Unsafe 中的方法,这些方法主要实现为 JVM 原语(使用 JVM 中的本机代码专门实现的方法调用)。

【讨论】:

  • +1:我认为它被称为 JVM 内在函数。 Unsafe 中的许多“本机”方法在编译为本机代码时会被有效内联。
  • 一个相当重要的注意事项是(在 API 中)未定义使用 sun.misc.Unsafe,因此 Sun/Oracle/OpenJDK 以外的其他 VM 可能以完全不同的方式实现 AtomicInteger。如果您不必硬塞进去,使用 AtomicInteger 可能是个好主意,因为它可能在任何 VM 上都表现良好。
【解决方案2】:

切入正题,AtomicInteger 不调用同步的锁机制,因此可以在适当的情况下提供性能优势。

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2013-02-15
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多