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

时间:2009-06-10 06:38:41

标签: java performance hibernate spring

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

5 个答案:

答案 0 :(得分:15)

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

但这不是你需要问的问题。

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

与往常一样,如果你有顾虑,基准和简介一个现实的场景。

答案 1 :(得分:10)

查看Hibernate Q&A section in FAQ,几乎所有关于实例化问题

  

在最新版本中   Hibernate,“反射”得到优化   通过CGLIB运行时字节码   生成库。这意味着   “反射”属性获取/设置调用   不再承担开销   实际上是Java反射API   只是正常的方法调用。结果   (非常)小的性能增益。

答案 2 :(得分:10)

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

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

答案 3 :(得分:2)

在任何合理的应用中,反射开销的可能性很小。 (总有不合理的申请:)

进行比较;通过配置文件运行您的应用程序,并查看JDBC驱动程序消耗了多少内存/ CPU。

关于hibernate和spring的重要一点是,它们旨在优化您的性能,提高工作效率,使代码更可靠。

<强>更新 我认为我和Skeet先生试图做的一点是,在这些框架中使用反射的性能影响很小。结合反思是实施这些框架的重要部分这一事实意味着没有多少选择。

答案 4 :(得分:1)

您只能了解自己是否在测量特定工作量。

假设为了检索+保湿100个实体,Spring + Hibernate将增加3毫秒的开销。

如果您的工作单位通常需要120毫秒,那么开销非常小。如果需要5毫秒,那就严重了。