Перейти к основному содержанию

Обзор

ActiveJ Specializer - это инновационная технология для повышения производительности выполнения классов для JVM. Это одна из технологий ActiveJ, не имеющая сторонних зависимостей, поэтому ее можно использовать как самостоятельный компонент.

Как это работает?#

ActiveJ Specializer использует библиотеку ASM для автоматического преобразования экземпляров классов в специализированные статические классы, а полей экземпляров классов - в запеченные статические поля. Это позволяет использовать широкий спектр оптимизаций JVM для статических классов, невозможных в других случаях: устранение мертвого кода, агрессивное инлайнирование методов и статических констант. Согласно нашим измерениям, полученное ускорение может достигать 300% в некоторых случаях.

Почему именно ActiveJ Specializer?#

Этот простой пример иллюстрирует основную концепцию ActiveJ Specializer. Предположим, что существует INT_UNARY_OPERATOR , который можно упростить. INT_UNARY_OPERATOR_SPECIALIZED специализирует уравнение аналогично INT_UNARY_OPERATOR_SPECIALIZED_MANUALLY, но делает это автоматически.

По данным бенчмарков, оригинальное уравнение было обработано за 69,938 нс, а ручная и автоматическая специализация заняла всего 26,533 нс и 26,691 нс соответственно.

static IntUnaryOperator INT_UNARY_OPERATOR =    new IntUnaryOperatorProduct(        new IntUnaryOperatorSum(            new IntUnaryOperatorSum(                 new IntUnaryOperatorIdentity(),                 new IntUnaryOperatorConst(5)),            new IntUnaryOperatorConst(-5)),         new IntUnaryOperatorConst(-1));
static IntUnaryOperator INT_UNARY_OPERATOR_SPECIALIZED_MANUALLY =    new IntUnaryOperator() {        @Override        public int applyAsInt(int x) {            return -x;        }    };
static IntUnaryOperator INT_UNARY_OPERATOR_SPECIALIZED =    SPECIALIZER.specialize(INT_UNARY_OPERATOR);

Предельная гибкость#

ActiveJ Specializer выходит далеко за рамки арифметических уравнений и может использоваться в сложных случаях. Например, по данным benchmarks ActiveJ Specializer делает ActiveJ Inject DI библиотеку быстрее на треть. Чтобы применить ActiveJ Specializer к ActiveJ Inject, просто добавьте Injector.useSpecializer() перед инстанцированием инжектора.

Добавьте ActiveJ Specializer в свой проект#

Вы можете добавить ActiveJ Specializer в свой проект, импортировав его репозиторий Maven. Эта документация охватывает последний выпуск ActiveJ Specializer v5.0-beta2 (см. на сайте Github или Maven).