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

Обзор

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.4.3 (см. на сайте Github или Maven).