ホームページ Java &#&チュートリアル JVM メモリ管理-----ガベージ コレクターの概要

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

Dec 28, 2016 pm 03:50 PM

前の章でさまざまな 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? 適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

See all articles