Interactive Brokers Java APIの上に構築された最初の Java プログラムを作成しました。それは重要かもしれないし、そうでないかもしれません。メインの API クラスをいくつかの新しいクラスで拡張しました。
プログラムは、リモート サーバーに対してデータ クエリを実行しています。サーバーが応答すると、受信したデータをローカルの MySQL データベースに記録します。プログラムがデータのログ記録を完了すると、プログラムは次のデータ要求を行います。
数百のサーバー要求を行った後、プログラムをしばらく実行したままにした後、問題が発生しました。このエラーが表示され、プログラムは実行を継続しません。
java.lang.OutOfMemoryError: Java heap space
私はいくつかの調査を行い、読んだ内容から、プログラムは多くの新しい変数を作成しており、古い価値のない変数を破壊していないと結論付けています。私は開発に Netbeans を使用しているので、Netbeans プロファイラーを使用して、これが当てはまるかどうかを調べました。ここの写真を見てください:
かなり長い間プログラムを実行した後、ますます多くのメモリが によって使い果たされByte
ます。ですから、私の理論はまだ正しいようです。
ここからどこへ行けばいいのかわからない。クラスまたは特定の変数への参照はなく、変数の型のみです。問題の原因を特定するにはどうすればよいですか?
アップデート
コメントで BigMike が言及した特定の問題を修正しました。以前は、JDBC MySQL コネクタ API で多くのステートメントを作成していて.execute()
、ステートメントを実行するために呼び出していましたが、ステートメントを で閉じていませんでした.close()
。
statement.close()
各実行後に呼び出しを追加することを確認したところ、プログラムの実行が大幅に改善されました。このプログラムの RAM 使用量を見ると、問題は解決したようです。また、Java heap space
エラーが表示されなくなりました。これは素晴らしいことです。
ありがとう!