[解決済み] [Solved] java.lang.OutOfMemoryError: GC オーバーヘッドの制限を超えました [重複]。
2022-03-26 06:15:56
質問
数個(15~20個)のテキスト項目を持つHashMapオブジェクトを複数(数十万個)作成するプログラムで、このエラーが発生しました。これらの文字列は、データベースに送信される前に、すべて(より小さい量に分割されることなく)収集されなければなりません。
Sunによると、このエラーはガベージコレクションにあまりにも多くの時間が費やされている場合に発生します。ガベージコレクションに全体の98%以上の時間が費やされ、ヒープの2%未満しか回復していない場合、OutOfMemoryErrorがスローされます。
どうやら、コマンドラインを使って、JVMに引数を渡すことで
- ヒープサイズを大きくするには、"-Xmx1024m" (またはそれ以上)を使用します。
- XX:-UseGCOverheadLimit"により、エラーチェックを完全に無効にする。
最初の方法はうまくいきましたが、2番目の方法は別の java.lang.OutOfMemoryError で、今回はヒープに関するエラーに終わりました。
そこで質問ですが、特定のユースケース(つまり、いくつかの小さなHashMapオブジェクト)に対して、これに代わるプログラム的な方法はあるのでしょうか?例えば、HashMapのclear()メソッドを使えば、問題は解決しますが、HashMapに格納されているデータも消えてしまいます! :-)
また、この問題については StackOverflowの関連トピックにあります。
解決方法を教えてください。
本来、処理をスムーズに行うためのメモリが不足しているのでは?思いつく選択肢
-
ご指摘のようにメモリを多めに指定して、次のような中間的なものを試してみてください。
-Xmx512m
最初 -
の小バッチで作業する。
HashMap
可能であれば、一度に処理するオブジェクト -
重複する文字列が多い場合は
String.intern()
に入れる前にHashMap
-
を使用します。
HashMap(int initialCapacity, float loadFactor)
のコンストラクタを使用して、あなたのケースに合わせてチューニングします。
関連
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] Javaでのスキャナが動作しない
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み] エラー java.lang.OutOfMemoryError: GCオーバーヘッドの制限を超えました
-
[解決済み] java.lang.OutOfMemoryError" の対処法。Java heap space "エラーの対処方法を教えてください。
-
[解決済み】dexを実行できない。EclipseでGCオーバーヘッドの制限を超えた
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] アニメーションGIFの表示
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] エラー java.lang.OutOfMemoryError: GCオーバーヘッドの制限を超えました