ホームページ  >  記事  >  Java  >  JVM メモリ管理-----ガベージ コレクターの概要

JVM メモリ管理-----ガベージ コレクターの概要

黄舟
黄舟オリジナル
2016-12-28 15:50:231343ブラウズ

前の章でさまざまな GC アルゴリズムについて説明しましたが、ガベージ コレクターとは何でしょうか?
平たく言えば、プログラミング言語を使用してアルゴリズムを実装すると、結果として得られるプログラムはガベージ コレクターです。プログラミング言語の実装について説明しましたが、ガベージ コレクターについて説明するときには、特定の仮想マシンの実装がすでに関係しています。
おそらく、多くの JAVA 開発者は、私たちが普段使用している JDK では、デフォルトの JVM がホットスポットであることを知りません。つまり、私たちがほとんどの場合使用する JVM は、ホットスポットの実装バージョンであるということです。 LZ によるものはすべて JVM のホットスポット バージョンに基づいていることに注意してください。
より直感的には、 java -version と入力して、私たちが普段開発しているマシンの JVM バージョンを確認できます。このコマンドはほとんどの猿の友人がよく知っていると思います。LZ のマシンのスクリーンショットは次のとおりです。

JVM メモリ管理-----ガベージ コレクターの概要

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

ガベージコレクターが実際にはアルゴリズムのプログラミング言語実装であることを上で述べました。プログラミング言語が関係しているため、スレッドは分離不可能でなければなりません。先ほどアルゴリズムを説明したとき、GC スレッドが GC 作業を実行していると常に想定していました。
そのため、ガベージコレクターは大きく以下の3つに分類されます。
シリアル コレクター: GC スレッドが 1 つだけあり、前述したように、実行中にユーザー プログラムを一時停止する (世界を停止する) 必要があります。
並列コレクター: 複数の GC スレッドがあり、ユーザー プログラムを一時停止する (世界を停止する) 必要もあります。
並行コレクター: 1 つ以上の GC スレッドがあり、いくつかのステージでユーザー プログラムを一時停止 (世界を停止) し、ユーザー プログラムと同時にいくつかのステージを実行する必要があります。

同時実行と並列

上記の定義を読んで、場合によってはシングルスレッド、場合によってはマルチスレッド、場合によってはシリアル、場合によっては並列、場合によっては混乱した人もいると思います。 、これはすべてナンセンスですか?
シングルスレッドとマルチスレッドについては説明する必要はありません。シリアルとパラレルの区別も簡単です。
同時実行性に関する多くの説明について、LZ は最も適切な説明があると考えています。このように説明すると、同時実行とは、2 つのタスク A と B が互いに独立して実行する必要があり、タスク A が最初に開始された後、タスク A が終了する前にタスク B が開始されることを意味します。
同時実行自体は比較的理解しやすいですが、並列処理との関係や違いは何でしょうか?
実際、並列処理は並行性の実装方法です。 LZ は、これを言うことでよりよく理解できると考えています。もちろん、並行処理を実現する唯一の方法ではありません。それは、私たちがよく知っているタイム スライスの切り替えです。つまり、タスク A がしばらく実行され、タスク B がしばらく実行され、その後交互に実行されます。
並列処理は、マルチコア マルチプロセッサーまたは分散システム (本質的には依然としてマルチコア マルチプロセッサー) の前提下でのみ発生しますが、代替実行またはタイム スライスの切り替えはシングルコア プロセッサーで発生します。

ホットスポットのガベージ コレクター

上記でガベージ コレクターの分類について簡単に説明しました。hotspotJVM では、各タイプのガベージ コレクターには次のように対応する実装があります。
シリアルコレクターの実装: Serial (コピーアルゴリズムを使用して新世代で使用)、Serial Old (マーキング/照合アルゴリズムを使用して旧世代で使用)
パラレルコレクターの実装: ParNew (で使用)新しい世代、コピー アルゴリズムを使用)、Parallel Scavenge (新しい世代で使用、コピー アルゴリズムを使用)、Parallel old (古い世代で使用、マーキング/照合アルゴリズムを使用)
同時コレクターの実装: 同時マーク スイープ[CMS] (旧世代で使用され、マーク/クリア アルゴリズムを使用)
ご覧のとおり、上記の各ガベージ コレクターは、新世代で使用されるすべてのアルゴリズムが異なるため、異なるメモリ領域用に設計されています。コピーアルゴリズムは、旧世代で使用されていたマーク/クリアまたはマーク/照合アルゴリズムが使用されます。
実際のアプリケーションでは、JVM の新世代と旧世代のガベージ コレクターを選択する必要があります。つまり、新世代と旧世代の両方に 3 つの実装があることがわかります。 = 9 つの選択肢。しかしそうではありません。

実際には、これら 6 つのガベージ コレクターには 6 つの選択肢しかありません。これは、以下に示すように、特定の実装方法などの一連の理由により一部のガベージ コレクターが連携できないためです。

JVM メモリ管理-----ガベージ コレクターの概要

上の写真で、赤いのがシリアルコレクタ、緑のがパラレルコレクタ、そして唯一の黄色いのがコンカレントコレクタです。上位 3 人は新世代のコレクター、下位 3 人は旧世代のコレクターです。両者の間につながりがある場合、それは両者が協力できることを意味します。
これら 6 つの組み合わせは、どの組み合わせが最も強く、どの組み合わせが最も弱いかを示すものではありません。繰り返しになりますが、存在するのは最適なものだけであり、最適なものではありません。したがって、ガベージ コレクターを使用する場合は、より適切なガベージ コレクターを選択するために、それぞれの組み合わせをある程度理解する必要があります。

結論

上記は JVM メモリ管理の内容です -- ガベージ コレクターの紹介 詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。