如何计算条件查询返回的结果集的字节大小(不是数字行)? 我们收到Out of Memory Exception并且在分析heapdump时我们发现org.hibernate.impl.sessionimpl对象是最臃肿的对象。我们有一个非常复杂的查询,它被执行多次并返回> 4000行,每行有150列。我们想通过尝试获取结果集的大小来查明这是否是违规查询?
同时我们在获取结果集后尝试session.clear(这会工作)。 我可以遵循哪些其他步骤来减少内存中的sessionimpl大小?感谢
答案 0 :(得分:0)
您可以关注Calculate size of Object in Java回答 但如果你有记忆问题,最好的解决方案可能是:
ScrollableResults
来避免所有内存问题我更喜欢2号解决方案,因为它是明确的;第一个仍然可能导致记忆问题。
答案 1 :(得分:0)
您可以尝试使用Hibernate Statistics When Optimizing Queries
请参阅上面的链接,其中有关于如何在休眠中使用统计信息的非常好的解释。
仅供参考。
SessionFactory sessionFactory = getSessionFactoryForApplication();
Statistics stats = sessionFactory.getStatistics();
stats.setStatisticsEnabled(true);
希望这有助于找到代码中出现OM错误的原因。