跳到主要内容

概述

ActiveJ Specializer是一项创新技术,用于提高JVM的类运行时性能。 它是没有第三方依赖的ActiveJ技术之一,所以它可以作为一个独立的组件使用。

它是如何工作的?#

ActiveJ Specializer使用ASM库来自动将类实例转化为专门的静态类,并将类实例字段转化为烘托的静态字段。 这使得JVM对静态类进行了广泛的优化,否则是不可能的:消除死代码,积极地内联方法,以及静态常量。 根据我们的措施,在某些情况下,由此产生的速度可以达到 300%

为什么是ActiveJ Specializer?#

这个简单的例子说明了ActiveJ Specializer的核心概念。 假设有一个 INT_UNARY_OPERATOR ,可以被简化。 INT_UNARY_OPERATOR_SPECIALIZEDINT_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实例化之前添加 Injector.useSpecializer()

将ActiveJ Specializer添加到你的项目中#

您可以通过导入Maven资源库将ActiveJ Specializer加入您的项目。 这些文档涵盖了ActiveJ Specializer的最新版本 v5.0-beta2 (见上 GithubMaven)。)