2012-03-10 8 views
0

問題は次のようなものです。どこに行くのが最善の方法ですか?必要な時に、どこかにJavaのarraylistやアクセステーブルにテーブルデータを格納しますか?

ポイントから緯度と経度を取得して、agentクラスに格納しています。 クラスには、id、緯度、経度のメンバーと、assosciated関数があります。

javaアプリケーションの開始時に、ローカルのMySQLテーブル(座標値を持つ)からすべての行を読み込み、変数agentのarraylistに格納します。その後、このarraylistを読み込み、必要な機能を呼び出し、最後にグラフを描きます。

これは8K - 10K行のテーブルで正常に動作しますが、約200,000行の別のテーブルでは、Javaでヒープサイズエラーが発生し始めます。

私は、エージェントの毎回の座標が必要なdbにアクセスするようにコードを変更することを考えています。これは必要なメモリを減らすはずですか?しかし、このagent ArrayListのIteratorを使用するループが多数あります。私はそれをどう扱うかについてまだ修正しています。

だから、いつでもテーブルから読んだり、そのまま実行したり、Javaメモリの割り当てを増やしたりするのが良い選択でしょうか? 読んでいただきありがとうございます。

+0

eclipseでメモリアナライザツールを使用して、JFreeチャートのXYSeriesがほとんどのヒープスペースを使用していたことを確認しました。チャートに表示されているポイントを減らしました。現在は動作しています。 – redDevil

答えて

1

あなたがそれを必要としてのみ負荷データにしてみてください。我々はあまり情報を持っていませんが、ユーザーが一度にすべての10,000データポイントを見たり操作したりする必要はないと仮定しています。現実的には、デバイス画面のサイズの物理的な制限に加えて、多くの情報がユーザーに圧倒されます。

私はページングシステムを実装しようとします。繰り返しますが、Agentクラスをどのように使用しているのかわかりませんが、ユーザーに表示しているときにだけAgentをロードしてみてください。

+0

表示されているエージェントを減らすための提案に感謝します。 – redDevil

0

あなたの戦略には重大な欠点があります。大量のデータがディスクから読み込まれ、データベースのメモリに保存され、Javaアプリに送信され、最終的にJVMのメモリに格納されます。これには多くの時間とリソースが必要です。

カーソルを使用すると、dbから読み込んで同時にjava app内の結果セットを反復することができ、JVMはあまりメモリを割り当てる必要はありません。

一部のマニュアル: