2013-10-07 77 views
0

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

同时,我们正在尝试session.clear(将这项工作)在结果集被提取后。 有没有其他的步骤可以减少sessionimpl在内存中的大小?谢谢

回答

0

您可以关注Calculate size of Object in Java回答。
但是,如果你有记忆问题最有可能更好的解决方案可能是:

  1. 最大化内存堆
  2. 使用,以避免所有的内存问题

我喜欢的解决方案2号,因为它是明确的;第一个还是会导致内存问题。

+0

谢谢我们正在最大限度地利用内存堆。我将检查可滚动的结果。 –

+0

yw!如果回答关闭问题,请考虑upvote或接受 –

0

,你可以尝试使用Hibernate Statistics When Optimizing Queries

参见上述这对如何在使用休眠统计数据很能说明问题的链接。

只是FYI。

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

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

+0

谢谢我将检查hibernate统计信息。 –

相关问题