HOWTO · Java

Java での GC オーバーヘッド制限超過エラー

この記事では、Java での GC(ガベージ コレクション) オーバーヘッド制限超過エラーについて説明します。

このページの内容

この記事では、Java のGC オーバーヘッド制限を超えましたエラーについて説明します。

Java での GC オーバーヘッド制限超過エラーの簡単な紹介

Java では、プログラムがオブジェクトを使用しなくなると、JVM (Java 仮想マシン) がメモリを解放します。 メモリを解放するプロセスは、ガベージ コレクション (GC) と呼ばれます。

GC オーバーヘッド制限を超えました エラーは、リソース/メモリが使い果たされていることを示しています。 このエラーは、java.lang.OutOfMemoryError ファミリーのエラーに分類されます。

公式の Java ドキュメントによると、JVM (Java 仮想マシン) はこのエラーをスローして、プログラムまたはアプリケーションが貴重な作業を行うよりも多くの時間をガベージ コレクションに費やしていることを示します。 アプリケーション。

では、理解を深めるために例を見てみましょう。

import java.util.*;
public class test {
  public static void main(String args[]) throws Exception {
    Map<Integer, String> map = new HashMap<>();
    Random rnd = new Random();
    while (true) {
      map.put(rnd.nextInt(), "val");
    }
    catch (Exception e) {
      System.out.println("ye");
    }
  }
}

上記のコードで map を作成し、値を無限に挿入しました。 覚えておくべき注意点は、maps がヒープ メモリを使用することです。

そして、並列ガベージ コレクターでコードを実行して、GC オーバーヘッド制限超過エラー を取得します。

java - Xmx100m - XX : +UseParallelGC test

上記のコードが並列ガベージ コレクターで実行されると、java.lang.OutOfMemoryError: GC オーバーヘッド制限を超えましたというメッセージが表示されます。 ただし、これは、Java ヒープ サイズまたは異なる GC アルゴリズムが原因で、コンピューターごとに異なる場合があります。

Java での GC オーバーヘッド制限超過エラーを解決する

ここでのアイデアは、アプリケーションでのメモリ リークを止めることです。 プログラムでこのエラーを回避するには、以下の点に注意してください。

  1. ヒープ内のメモリ割り当てが行われるオブジェクトの場所を特定します。
  2. メモリ リークの可能性を高めるため、弱参照 オブジェクトと大量の一時オブジェクトを避けます。
  3. ヒープ内で大量のスペースを占めるオブジェクトを特定します。

まとめ

この記事では、プログラムが有用なタスクよりもガベージ コレクションに多くの時間を費やしたときに発生するGC オーバーヘッド制限を超えましたエラーについて学びました。 これは、ヒープ メモリがオブジェクトに割り当てられている位置を適切にチェックして、メモリ リークを回避し、プログラムがこのエラーを取得しないようにすることで回避できることを理解しました。