2012-01-07 2 views
3

Soneone сказал мне, что AtomicInteger реализован с использованием JNI, поэтому он намного быстрее, чем синхронизация. Это правда?AtomicInteger реализован на базе JNI?

+1

Действительно ли они сказали «JNI» или они сказали «собственный код»? Есть большая разница. –

+0

В чем разница? – user705414

+2

JNI - это способ взаимодействия с внутренним кодом * external *. В этом случае я ожидаю, что код станет частью JVM, поэтому ему не нужно проходить почти столько же обручей. –

ответ

7

Это вряд ли будет реализовано на основе JNI, поскольку это будет означать значительные накладные расходы. В прошлый раз, когда я смотрел, реализация OpenJDK основана на методах в sun.misc.Unsafe, которые в основном реализованы как примитивы JVM (вызовы методов, которые специально реализованы с помощью собственного кода в JVM).

+3

+1: Я думаю, что это называется JVM intrinsics. Многие «родные» методы в Unsafe эффективно встроены при компиляции в собственный код. –

+1

Достаточно важно отметить, что он не определен (в API) для использования sun.misc.Unsafe, поэтому другие виртуальные машины, чем Sun/Oracle/OpenJDK, могут реализовать AtomicInteger совершенно по-другому. Вероятно, это хорошая идея использовать AtomicInteger, если вам не нужно его запускать, поскольку он, вероятно, хорошо работает на любой виртуальной машине. –

0

Что касается вопроса, AtomicInteger не вызывает механизм блокировки синхронизации, поэтому может предложить преимущества производительности при подходящих обстоятельствах.

Смежные вопросы