如何减少Hibernate SessionFactory内存使用和加载时间

时间:2012-10-03 14:38:14

标签: java performance hibernate

我有一个包含大约3000个实体类的应用程序。

由于类的数量很大,SessionFactory对象占用大约150 MB的内存,并且需要几分钟的时间来设置(处理所有类,生成代理并构建元模型)。
在对流程进行概要分析后,我发现在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory中花费了一分钟时间,而org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(EntityMetamodel, PersistentClass)中有一半时间。SessionFactory。 我正在寻找减少{{1}}内存使用量和加载时间的方法 一种想法是将类增强功能转移到编译时,但我没有找到关于它的更多信息 实体的数量是我无法改变的事实,但如果有人对如何处理他们的数据库访问(除了Hibernate)有更好的想法,我会很高兴听到它。

2 个答案:

答案 0 :(得分:2)

3000课程对我来说太疯狂了。
你是什​​么意思“课堂增强”?
我认为您应该仔细重新考虑您的应用程序的设计。
Hibernate大量使用Proxy对象(例如,当您运行setter时,Proxy会“聚合”此更改,因此Hibernate可以生成只更改字段的更新SQL)。 Hibernate还使用代理使用的内存中的类信息(如上所述),这就是为什么你的内存增长如此

答案 1 :(得分:1)

首先查看SessionFactory中发生的事情。 Hibernate提供了一个JMX连接器,请参阅documentation here。然后你可以开始研究你的热点以及如何重构它们。您真的需要从收集更多指标开始。现在它可能是任何东西,包括GC问题。