0

基準クエリによって返される結果セットのサイズ (行数ではなく) をバイト単位で計算する方法は? Out of Memory Exception を受け取り、heapdump を分析すると、org.hibernate.impl.sessionimpl オブジェクトが最も肥大化したオブジェクトであることがわかりました。複数回実行され、各行に 150 列の 4000 行を超える非常に複雑なクエリが 1 つあります。結果セットのサイズを取得して、これが問題のあるクエリであるかどうかを確認したいですか?

一方、結果セットがフェッチされた後、session.clear (これは機能しますか) を試しています。メモリ内の sessionimpl のサイズを減らすために私が従うことができる他の手順はありますか? ありがとう

4

2 に答える 2

0

クエリを最適化するときに Hibernate Statisticsを使用してみることができます

上記のリンクを参照してください。これには、休止状態で統計を使用する方法についての非常に良い説明があります。

参考までに。

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

これが、コード内の OM エラーの原因を見つけるのに役立つことを願っています。

于 2013-10-07T16:47:13.767 に答える
0

Javaの回答でオブジェクトのサイズを計算することができます。
しかし、メモリに問題がある場合、おそらくより良い解決策は次のとおりです。

  1. メモリ ヒープを最大化する
  2. a を使用しScrollableResultsて、すべてのメモリの問題を回避します

決定的なので、私は解決策 2 を好みます。最初のものはまだメモリの問題を引き起こす可能性があります。

于 2013-10-07T14:33:34.540 に答える