ByteBuddy 在 Hibernate 中的性能

ByteBuddy Performance in Hibernate

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

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

我是不是漏掉了什么?

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

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

最后,像cglib这样的Byte Buddy在创建class和创建最高效代码之间面临着权衡。这种权衡强烈倾向于在 Byte Buddy 接近基线的情况下创建高效代码,即它本身不会增加任何开销,而只会增加所添加代码的开销,这对于 cglib 而言并非如此。