ByteBuddy在Hibernate中的表现

时间:2017-08-02 08:55:53

标签: hibernate byte-buddy

我目前正在考虑用bytebuddy替换javassist(主要是出于性能原因)。 作为第一步,我尝试在hibernate中使用bytebuddy代理工厂(5.2.10)。 不幸的是,代理类生成现在比以前慢三倍。

这是预期的吗?我发现的基准(https://zeroturnaround.com/rebellabs/testing-the-performance-of-4-java-runtime-code-generators-cglib-javassist-jdk-proxy-byte-buddy/)似乎表明bytebuddy应该比javassist更快。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

自从这篇文章以来,Byte Buddy已经变得更加先进并增加了更多功能。添加这些功能的一个不幸的副作用当然是处理它们需要时间。

与此早期版本相比,导致性能下降的功能是处理泛型类型信息。 Byte Buddy查看泛型类型,只检查它们是否存在需要一些额外的时间,即使一个类是非泛型的。此外,考虑到使用所谓桥接方法的泛型方法覆盖,Byte Buddy解释了类型层次结构。另一方面,忽略通用方法的cglib可以进行更简单的分析,但在处理可见性桥时有时会出错。

最后,像cglib这样的Byte Buddy在创建类和创建最有效代码的时间之间进行权衡。这种权衡强烈倾向于创建Byte Buddy接近基线的高效代码,即它本身不会增加任何开销,而只会增加添加的代码,而cglib则不然。