ホームページ  >  記事  >  Java  >  Java自動ガベージコレクションチュートリアルの詳細説明

Java自動ガベージコレクションチュートリアルの詳細説明

烟雨青岚
烟雨青岚転載
2020-06-18 13:21:203222ブラウズ

Java自動ガベージコレクションチュートリアルの詳細説明

Java 自動ガベージ コレクションの詳細なチュートリアル

Java プログラミングで不適切に使用すると、メモリがどれほど大きくても、疲れ果てる。この記事では、そのうちの 1 つである Java メモリ領域を節約し、Java プログラムにゴミを自動的にリサイクルさせる方法を紹介します。

ポイント 1. Java の自動ガベージ コレクションを理解する

ガベージ コレクションは Java 言語の主要な機能であり、パフォーマンスを犠牲にしてプログラミングを容易にします。そして、ここでのゴミは単なる役に立たないオブジェクトです。 C では、プログラマはメモリを解放するために独自のデストラクタを作成する必要がありますが、これは面倒なだけでなく、忘れられてメモリ リークを引き起こす可能性もあります。

Java 言語のメモリ割り当て管理は、JVM の内部メカニズムによって決定されます。プログラマはその処理についてあまり気にしなくて済みます。

ポイント2. ガベージコレクションの原理と意義

Java仮想マシンにはガベージコレクタと呼ばれるものがありますが、実はこれは存在しない可能性があります。 . 、または JVM に統合されていますが、それは問題ではなく、引き続きガベージ コレクターと呼ぶことができます。

ガベージ コレクターの役割は、不要なオブジェクトを見つけてリサイクル (クリーンアップ) することです。 JVM がメモリをより効率的に使用できるようにするため。

ガベージ コレクターの実行時間は JVM によって決定されるため不確実であり、実行時に断続的に実行されます。 System.gc() を使用してガベージ コレクションを強制することはできますが、このコマンドの発行後すぐに JVM が応答するという保証はありませんが、経験上、コマンドの発行後、リクエストは短期間で実行されることがわかっています。 JVM は通常、メモリ不足を感じるとガベージ コレクション操作を実行します。

ガベージ コレクションが頻繁すぎるとパフォーマンスの低下につながり、ガベージ コレクションがまばらすぎるとメモリ不足が発生します。この JVM は、プログラマが心配することなく、それを最適に制御します。ただし、一部のプログラムは短期間で大量のメモリを消費し、これらの恐ろしいオブジェクトはすぐに使い果たされてしまいます。現時点では、ガベージ リターン コマンドを強制的に実行する必要がある場合があります。これは、より多くの物理メモリを使用できるようにするために必要です。 。

上記から学んだように、役に立たないオブジェクトはゴミです。正確に言うと、オブジェクトにアクセスするスレッドが存在しない場合、そのオブジェクトはガベージ コレクションの対象となります。

String には文字列プールがありますが、これはこの記事の範囲を超えています。文字列プールのガベージ コレクションとアルゴリズムは、ここで説明するガベージ コレクションとはまったく異なります。しかし、文字列のランダムな結合は、特に巨大なループ ステートメントの場合、パフォーマンスの急激な低下につながることが多く、文字列の結合によりプログラムがゆっくりと自殺する原因となっていると言わざるを得ません。これは、多くの Java プログラマーが犯すよくある間違いでもあります。

文字列はプールであるため、バッファリングとヒット率を高めるためのものであるため、ガベージ コレクションの頻度は JVM オブジェクトのガベージ コレクターよりもはるかに低い可能性があります。
ガベージ コレクターができることは、使用可能なメモリをできるだけ効率的に使用して、使用可能なメモリを効率的に管理できるようにすることだけです。プログラマはガベージ コレクションの実行に影響を与えることはできますが、制御することはできません。

ポイント 3: プログラミングを通じてガベージ コレクションに影響を与える

ただし、プログラマは JVM のガベージ コレクション メカニズムを制御できません。ただし、オブジェクトをガベージ コレクションの対象にすることで、プログラミングを通じて影響を受ける可能性があります。

いくつかのタイプがあります:

1. 役に立たないオブジェクトを null に割り当てます。

2. 変数 Assignment を再参照します。例:

Person p = new Person("aaa");
  p = new Person("bbb");

このように、オブジェクト new person ("aaa") はガベージです。これはガベージ コレクションの条件を満たします。

3. 相互接続されたオブジェクトを「アイランド」オブジェクトと呼びます

Person p1 = new Person("aaa"); 
Person p2 = new Person("bbb"); 
Person p3 = new Person("ccc");  
p1=p2; 
p2=p3; 
p3=p1;  
p1=null; 
p2=null;
p3=null;

p1、p2、および p3 が null に設定される前に、それらの間の関係それは三角関係です。それぞれが null に設定されている場合、三角関係は引き続き存在しますが、3 つの変数はそれらを使用しなくなります。 3 人の人物オブジェクトが島を形成し、最終的にはガベージ コレクションによってヒープ上で消滅しました。

4. 強制ガベージ コレクション System.gc()

実際、ここでの強制はプログラマの希望と提案であり、いつ実行するかは JVM のガベージです。最終決定権はリサイクル業者にあります。

ガベージ コレクションを呼び出しても、未使用のオブジェクトがメモリから削除されるとは限りません。

唯一保証されているのは、メモリが非常に少ない場合、プログラムが OutofMemaryException をスローする前にガベージ コレクターが 1 回実行されることです。


読んでくれた皆さん、ありがとうございます。たくさんの利益が得られることを願っています。

この記事は次から転載されています: http://community.itbbs.cn/thread/17817/

推奨チュートリアル: "java ビデオ チュートリアル

"# ##

以上がJava自動ガベージコレクションチュートリアルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はitbbs.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。