工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java ガベージコレクションの仕組みと重要性

Java ガベージコレクションとは?

Java のガベージコレクタ(GC)はメモリを自動管理し、開発者を手動のメモリ解放から解放します。オブジェクトへのライブ参照がなくなると、GC がヒープ領域を回収し、アプリケーションをクラッシュさせるメモリリークを防ぎます。

Java では、オブジェクトは new 演算子でヒープ上に作成されます。ランタイムは参照を追跡し、最後の参照が消えるとそのオブジェクトは回収対象になります。GC はバックグラウンドで定期的に実行され、コードをよりシンプルかつ安全にします。

C 言語では free() が必要ですが、Java ではダングリングポインタや未定義動作のリスクを排除し、信頼性とセキュリティを強化しています。

Java のすべてのオブジェクトは、GC がスキャンするメモリの ヒープ 領域に存在します。

実践例:GC の動作を観察

ステップ 1 – 以下のコードをエディタにコピー:

class Student {
    int a;
    int b;
    public void setData(int c, int d) {
        a = c;
        b = d;
    }
    public void showData() {
        System.out.println("Value of a = " + a);
        System.out.println("Value of b = " + b);
    }
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        s1.setData(1, 2);
        s2.setData(3, 4);
        s1.showData();
        s2.showData();
        //Student s3;
        //s3 = s2;
        //s3.showData();
        //s2 = null;
        //s3.showData();
        //s3 = null;
        //s3.showData();
    }
}

ステップ 2 – コンパイルして実行。 最初に2つの Student オブジェクトと2つの参照変数が作成されます。以下の図を参照してください。

Java ガベージコレクションの仕組みと重要性

ステップ 3 – 20〜22行目のコメントを外して再実行。 これで s3 が s2 と同じオブジェクトを指すようになります。図は両方の参照が1つのオブジェクトを共有していることを示します。

Java ガベージコレクションの仕組みと重要性

ステップ 4 – 23〜24行目のコメントを外す。 s2 を null に設定すると、s3 だけが参照として残り、オブジェクトは依然として生存しています。

Java ガベージコレクションの仕組みと重要性

ステップ 5 – 25〜26行目のコメントを外す。 s2 と s3 の両方を null にすると、オブジェクトは GC の対象になります。最終的な図がこの状態を示します。

Java ガベージコレクションの仕組みと重要性

オブジェクトを回収対象にする方法

  1. 参照変数を null に代入する。GC が実行されるとメモリが回収される。
  2. プリミティブ型(int、double など)はオブジェクトではないため、null にできない。

Java ガベージコレクションの仕組みと重要性

注意:明示的なファイナライザは推奨されません。GC に任せましょう。

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  3. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  4. Javaアノテーション完全ガイド:種類、配置場所、実践例
  5. Java static 完全解説:変数・メソッド・ブロックの実践例
  6. Java インターフェース vs 抽象クラス:適切な抽象化の選び方
  7. Java コンストラクタオーバーロード完全解説:実践コード例付き
  8. Javaコレクションフレームワーク完全ガイド: インターフェース・実装クラス・アルゴリズム・イテレータ・Comparator
  9. Java 10のガベージコレクターインターフェースとG1並列フルGCでメモリ管理を効率化
  10. Java 10でヒープをNV-DIMMに割り当て:-XX:AllocateHeapAtオプション
  11. Java 9コレクションファクトリメソッド:不変List、Set、Mapを簡潔に作成