由于反射,Hibernate和Spring的性能开销

Sil*_*ior 5 java performance spring hibernate

Spring和Hibernate使用反射来创建bean(如果是spring)和POJO映射(在Hibernate的情况下).它会对性能产生负面影响吗?因为与直接对象创建相比,反射较慢.

Jon*_*eet 15

是的,它可能会.Hibernate以各种狡猾的方式进行了大量优化,但它仍然比低级数据访问速度慢,并且具有正确的预准备语句,假设缓存对您没有帮助.

但无论如何,这不是你需要问的问题.

您需要询问它是否会显着影响性能- 此时我怀疑您会发现答案是"否".就Hibernate而言,由于Hibernate,底层数据库访问可能比开销慢很多.就Spring而言,bean的创建通常只发生在程序的最开始,一次.

与往常一样,如果您有顾虑,基准和配置文件是一个现实的场景.


vic*_*ugo 10

查看常见问题解答中的Hibernate Q&A部分,几乎所有关于实例化问题

在最新版本的Hibernate中,"反射"通过CGLIB运行时字节码生成库进行了优化.这意味着"反射"属性get/set调用不再承载Java反射API的开销,实际上只是普通的方法调用.这导致(非常)小的性能增益.

  • 仅供记录,此常见问题解答现已过时.CGLIB不再是Hibernate的默认反射提供者:从Hibernate 3.3开始,CGLIB已被Javassist替换为默认提供者. (3认同)

Mic*_*les 10

虽然存在性能损失,但它相对较低且可以忽略不计.这里的关键问题是,使用ORM(带反射)所获得的好处远远超过您支付的非常小的性能损失.

请记住,在查看性能时,请按照您希望的方式设计系统,并在出现问题时担心性能.