0

如何计算条件查询返回的结果集的字节大小(不是行数)?我们收到 Out of Memory 异常,在分析 heapdump 时我们发现 org.hibernate.impl.sessionimpl 对象是最臃肿的对象。我们有一个非常复杂的查询,它被执行多次并返回 >4000 行,每行 150 列。我们想通过尝试获取结果集的大小来确定这是否是有问题的查询?

同时,我们正在获取结果集后尝试 session.clear (这会起作用)。我可以遵循任何其他步骤来减少内存中的 sessionimpl 大小吗?谢谢

4

2 回答 2

0

您可以按照在 Java答案中计算对象的大小。
但是,如果您有内存问题,很可能更好的解决方案是:

  1. 最大化内存堆
  2. 使用 aScrollableResults来避免所有内存问题

我更喜欢解决方案 2,因为它是确定的;第一个仍然会导致内存问题。

于 2013-10-07T14:33:34.540 回答
0

您可以尝试在优化查询时使用 Hibernate 统计信息

请参阅上面的链接,该链接对如何在休眠中使用统计信息有很好的解释。

仅供参考。

SessionFactory sessionFactory = getSessionFactoryForApplication();
Statistics stats = sessionFactory.getStatistics();
stats.setStatisticsEnabled(true); 

希望这有助于在您的代码中找到 OM 错误的原因。

于 2013-10-07T16:47:13.767 回答