Javaでのガベージコレクション:知っておくべきことすべて



Javaでのガベージコレクションに関するこの記事では、Javaでのガベージコレクションでのガベージコレクションの仕組み、タイプ、およびさまざまなメソッドについて明確なアイデアを提供します。

は汎用プログラミング言語であり、プログラムに未使用のデータがあり、その処理方法がわからない場合は、Javaのガベージコレクションが便利です。したがって、これらの関数の処理を支援するためにこの記事を書いています。

次の順序でトピックを取り上げます。





始めましょう!

Javaのガベージコレクションとは何ですか?

Javaでは、プログラマーは破壊しなければならないという問題に直面します。 オブジェクト 使用されていません。しかし、ガベージコレクターを使用すると、これを簡単に処理できます。このガベージコレクタの主な目的は、参照が含まれていないオブジェクトを破棄することでヒープメモリを解放することです。この手法は、 ガベージコレクション。



また、自動メモリ管理を実行するのに役立つプログラムと見なされます。いつ がJVMで実行されると、オブジェクトはヒープ上に作成されます。ヒープは、実際にはプログラム専用のメモリの一部です。最終的に、一部のオブジェクトは不要になります。ザ・ ガベージコレクター これらの未使用のオブジェクトを見つけて削除し、メモリを解放します。

  • メモリの割り当てを解除しないプログラムは、システムに割り当てるメモリが残っていない場合、最終的に破損する可能性があります。これらのプログラムはすべて、メモリリークがあると言われています。
  • Javaでのガベージコレクションは、プログラムの存続期間中に自動的に行われるため、メモリの割り当てを解除する必要がなくなり、メモリリークが回避されます。
  • のような方法 自由() Cおよび delete() C ++では使用されますが、Javaでは自動的に実行されます。そう、 より良いメモリ管理を提供します。

それでは、この自動ガベージコレクションがJavaでどのように機能するかを理解しましょう。

注意 :オブジェクトが到達不能である場合、そのオブジェクトはガベージコレクションの対象であると言われます。



ガベージコレクションはどのように機能しますか?

ガベージコレクションは、ヒープメモリを操作するプロセスです。 マーク または、到達不能なオブジェクトを特定し、圧縮してそれらを破壊します。

Javaでのガベージコレクションは自動プロセスであり、プログラマーは削除するオブジェクトを明示的にマークする必要はありません。実装は主に 。各JVMはガベージコレクションを実装できます。唯一の要件は、JVM仕様を満たす必要があることです。

利用可能なJVMはたくさんありますが、 オラクルの HotSpot 堅牢で成熟したガベージコレクションオプションのセットを提供するため、これが最も一般的です。

  • HotSpotには、さまざまなユースケースに最適化された複数のガベージコレクターがあり、すべてのガベージコレクターは同じ基本プロセスに従います。
  • 最初のステップでは、 参照されていないオブジェクト ガベージコレクションの準備ができていると識別され、マークされます。
  • 2番目のステップでは、マークされたオブジェクトが削除されます。オプションで、ガベージコレクターがオブジェクトを削除した後にメモリを圧縮できるため、残りのオブジェクトはヒープの開始時に連続したブロックにあります。圧縮プロセスにより、既存のオブジェクトに割り当てられたメモリのブロックの後に、新しいオブジェクトにメモリを順番に割り当てることが容易になります。

HotSpotのすべてのガベージコレクターは、オブジェクトを年齢別に分類する世代別収集戦略を実装しています。世代別ガベージコレクションの背後にある理論的根拠は、ほとんどのオブジェクトは短命であり、作成後すぐにガベージコレクションの準備ができるということです。

それでは、さまざまな種類のガベージコレクターを見てみましょう。

ガベージコレクターの種類

JVMは、4つの異なるガベージコレクターを提供し、それらはすべて世代別です。それぞれに独自の利点と制限があります。使用するガベージコレクターの選択はユーザーに依存し、スループットとアプリケーションの一時停止には多くの違いがあります。

つまり、4種類のガベージコレクターがあります。

  • シリアルガベージコレクター(GC)すべてのガベージコレクションイベントは、1つの単一スレッドで連続して実行されます。圧縮は、各ガベージコレクションの後に実行されます。
  • パラレル/スループットGC: マイナー/スモールガベージコレクションには複数のスレッドが使用されます。単一のスレッドは、主要なガベージコレクションと旧世代の圧縮に使用されます。また、Parallelバリアントは、主要なガベージコレクションと旧世代の圧縮に複数のスレッドを使用します。
  • CMSコレクターParallelと同じアルゴリズムを使用して、スモール/マイナーガベージコレクションに複数のスレッドが使用されます。ガベージコレクションの大部分はマルチスレッドですが、CMSはアプリケーションプロセスと同時に実行され、アプリケーションイベントを最小限に抑えます。圧縮は実行されません。
  • G1コレクターこのガベージコレクターは、基本的にCMSの代替として意図されています。これはCMSのように並列かつ並行していますが、古いガベージコレクターと比較すると動作がまったく異なります。

Javaでのガベージコレクションの利点を理解しましょう。

利点

  • Javaガベージコレクションの最大の利点は、自動的に収集されることです。 削除を処理します 未使用のオブジェクトまたはメモリリソースを解放するためにアクセスできないいくつかのオブジェクトの。
  • ガベージコレクションは現在、多くの一般的なプログラミング言語の新しい標準コンポーネントです。
  • これにより、Javaのメモリ効率が向上します。これは、ガベージコレクタが参照されていないオブジェクトをヒープメモリから削除するためです。
  • です 自動的に行われます JVMの一部であるガベージコレクターによって。

ベストプラクティス

Javaガベージコレクションに適応するための最良のアプローチは、JVMにフラグを設定することです。フラグには、使用するガベージコレクターを調整する機能があります。ガベージコレクションの長い一時停止が許容されるバックエンド処理に最適にするのに役立ちます。

ここで注意すべきもう1つの点は、CMSガベージコレクターは一時停止を最小限に抑えるように設計されているため、応答性が非常に重要なGUIアプリケーションに最適です。ヒープまたはそのセクションのサイズを変更し、ガベージコレクションの効率を測定することで、追加の微調整を行うことができます。

このプログラムを見てみましょう。

class Edureka {int a int b public void setData(int c、int d){a = cb = d} public void showData(){System.out.println( 'Value of a =' + a)System.out.println ( 'bの値=' + b)} public static void main(String args []){Edureka e1 = new Edureka()Edureka e2 = new Edureka()e1.setData(1,2)e2.setData(3、 4)e1.showData()e2.showData()// Edureka e3 // e3 = e2 //e3.showData()// e2 = null //e3.showData()// e3 = null //e3.showData ()}}

この場合、2つオブジェクトと2つの参照変数が作成されます。別のコマンドe3 = Nullを追加すると、2つの参照変数は同じオブジェクトを指します。また、変数への参照がない場合、e3 = e2e3.showData()この時点では、オブジェクトを指す参照はなく、ガベージコレクションの対象になります。

これで、この「Javaのガベージコレクション」の記事は終わりです。ヒープ内の未使用のオブジェクトとさまざまなタイプのコレクションを削除する方法を学びました。

「Javaでのガベージコレクション」に関するこの記事を見つけた場合は、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。私たちはあなたの旅のすべてのステップであなたを助けるためにここにいます、私たちはJava開発者になりたい学生と専門家のために設計されたカリキュラムを考え出します。

改行のhtmlタグ

質問がありますか?この「Javaのガベージコレクション」のコメントセクションで言及してください。 「」 できるだけ早くご連絡いたします。