AtomicLongFieldUpdater.getAndAdd (и остальные методы класса) работает с примитивным long, тогда как VarHandle.getAndAdd работает только с объектами. В моих тестах VarHandle.getAndAdd показал себя очень убого по сравнению с AtomicLong.getAndAdd (надо было ещё с AtomicLongFieldUpdater.getAndAdd сравнить конечно). Чужих тестов производительности этих методов я не нашел (может быть у меня проблема в тестах была, потому хотелось бы увидеть результаты других людей).
AtomicLongFieldUpdater не должен отличаться от AtomicLong с точки перформанса. В реактивных библиотеках используеться AtomicLongFieldUpdater для того что бы уменьшить количество создаваемых Обьектов и уменьшить колово работы для GC. В RxJava2 такая же имплементация класса наследует AtomicLong github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/flowable/FlowableFromArray.java#L179
AtomicLongFieldUpdater.getAndAdd (и остальные методы класса) работает с примитивным long, тогда как VarHandle.getAndAdd работает только с объектами. В моих тестах VarHandle.getAndAdd показал себя очень убого по сравнению с AtomicLong.getAndAdd (надо было ещё с AtomicLongFieldUpdater.getAndAdd сравнить конечно). Чужих тестов производительности этих методов я не нашел (может быть у меня проблема в тестах была, потому хотелось бы увидеть результаты других людей).
AtomicLongFieldUpdater не должен отличаться от AtomicLong с точки перформанса. В реактивных библиотеках используеться AtomicLongFieldUpdater для того что бы уменьшить количество создаваемых Обьектов и уменьшить колово работы для GC. В RxJava2 такая же имплементация класса наследует AtomicLong github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/internal/operators/flowable/FlowableFromArray.java#L179