为什么转储中有这么多 SessionFactoryImpl 对象?

Why are there so many SessionFactoryImpl objects in the dump?

我的转储中有大约 15,000 个相同的 SessionFactoryImpl 对象:

具有传入引用的对象之一:

具有出站引用的对象之一:

我没有配置以下参数,它们是默认设置的:

hibernate.query.plan_cache_max_size
hibernate.query.plan_parameter_metadata_max_size

问题:

  1. 为什么有那么多 SessionFactoryImpl 对象,为什么没有 删除了吗?
  2. 它们是在代码中的某处错误创建的,还是由于 未指定缓存参数?
  3. 如果是,我应该为缓存设置什么参数?
  4. 我应该设置任何其他设置吗?
  5. 如果这些对象是在代码中创建的,我怎样才能找到 class 在 Jprofiler 中创建这些对象?

版本:

也许您可以找到使用 "Show Selection In Heap Walker " 创建的 SessionFactoryImpl 对象所在的代码行号,并查看 "Allocations"

中对象的分配树

问题出在记录到数据库的错误实施方法中。当某个任务完成时,总是会创建用于记录日志的工厂,它引用了 SessionFactoryImpl。并且有很多这样的任务,每次都创建这些工厂。我们能够在代码中找到这个地方并修复它,以便在应用程序启动时创建一次日志工厂。