を「GCオーバーヘッドの制限を超えて」多くの努力の後、私は避けエラー
GCオーバーヘッドの制限を得ることの問題を克服するために見えることはできませんが、私のJavaプログラムで
エラーを超えていました。
大規模な文字列操作、多数のオブジェクトのリスト、およびDBへのアクセスを含む大きなメソッドの内部で発生します。 Iは、以下を試してみました:
- それぞれのArrayListの使用後に、私が追加しました:リスト=新しいArrayListの<を>();リスト= null;
- などの文字列ではなく、 50個の追加(str + = "....")私は、各テキストに合計テキスト
- を追加しようとすると、各DBアクセス後にステートメントとresultSetsを閉じます。
このメソッドは、このようにメインから呼び出される:
このループは1回または2回実行されますfor(int i=0; i<L; i++) {
cns = new Console(i);
cns.processData();//this is the method
cns=null;
}
、すべてがOKです。 L> = 3の場合、ガベージコレクタエラーが発生することはほぼ確実です。
このメソッドを実行するたびに、cns = nullということはありませんか?強制的にGCを実行し、以前の実行からすべてを解放しますか?
オブジェクトのすべてのプライベート属性を削除してからnullにする必要がありますか?たぶんThread.sleep()を入れては、各ループの後にGCを強制する可能性がありますか?
おそらく、3回目の実行ではあまりにも多くのメモリを占有しています。大きな方法を小さな方法に分割することをお勧めします。 GCを手動で呼び出すとThread.spleepは間違ったアプローチです。 – Admit