我有大约3000个实体类的应用程序.
由于存在大量的类,因此SessionFactory对象将消耗约150 MB的内存,并且几乎要花一分钟的时间来设置(处理所有类,生成代理并构建元模型).
在对该过程进行概要分析之后,我发现一分钟的时间花在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory中,而一半的时间花在org.hibernate.tuple.entity.AbstractEntityTuplizer.< init>(EntityMetamodel,PersistentClass)中.
我正在寻找减少SessionFactory内存使用和加载时间的方法.
一种想法是将类增强功能转移到编译时,但是我没有找到太多有关它的信息.
实体的数量是我无法更改的事实,但是如果有人对如何处理其数据库访问有更好的想法(Hibernate除外),我将很乐意听到.
解决方法:
首先查看SessionFactory内部发生的情况. Hibernate提供了一个JMX连接器,请参见documentation here.然后您就可以开始研究热点以及如何重构它们.您确实需要从收集更多指标开始.目前可能是任何问题,包括GC问题.