Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何减少Hibernate SessionFactory内存使用和加载时间_Java_Performance_Hibernate - Fatal编程技术网

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

Java 如何减少Hibernate SessionFactory内存使用和加载时间,java,performance,hibernate,Java,Performance,Hibernate,我有一个大约3000个实体类的应用程序 由于类的数量很大,SessionFactory对象消耗了大约150 MB的内存,设置(处理所有类、生成代理和构建元模型)几乎需要一分钟的时间。 在分析了这个过程之后,我发现一分钟的时间花在org.hibernate.ejb.ejb3配置.buildEntityManagerFactory上,而一半的时间花在org.hibernate.tuple.entity.AbstractEntityTuplizer.(EntityMetamodel,Persisten

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

由于类的数量很大,SessionFactory对象消耗了大约150 MB的内存,设置(处理所有类、生成代理和构建元模型)几乎需要一分钟的时间。
在分析了这个过程之后,我发现一分钟的时间花在
org.hibernate.ejb.ejb3配置.buildEntityManagerFactory
上,而一半的时间花在
org.hibernate.tuple.entity.AbstractEntityTuplizer.(EntityMetamodel,PersistentClass)

我正在寻找减少
SessionFactory
内存使用和加载时间的方法。
一个想法是将类增强移到编译时,但我没有找到太多关于它的信息。

实体的数量是我无法改变的事实,但是如果有人对如何处理他们的数据库访问有更好的想法(除了Hibernate),我会很高兴听到这个消息。

3000个类对我来说太疯狂了
你说的“班级提升”是什么意思
我认为你应该仔细地重新考虑你申请书的设计
Hibernate大量使用代理对象(例如,当您运行setter时,代理“聚合”了此更改,因此Hibernate可以生成只包含更改字段的更新SQL)。
Hibernate还使用代理使用的内存中的类信息(如上所述),这就是为什么您的内存会像这样增长

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

在大多数关系中都使用属性惰性吗?阅读本文我的意思是代理生成,我认为这可以在构建时完成(org.hibernate.tool.instrument.javassist.InstrumentTask),但这不一定能解决内存问题,因为这些代理的对象仍将在运行时创建