Spring和Hibernate使用反射来创建bean(如果是spring)和POJO映射(在Hibernate的情况下)。它会对性能产生负面影响吗?因为与直接对象创建相比,反射速度较慢。
答案 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毫秒,那就严重了。