ホームページ Java &#&チュートリアル JAVAのガベージコレクションメカニズム

JAVAのガベージコレクションメカニズム

Aug 19, 2017 pm 01:44 PM
java ごみ 機構

ガベージコレクションはJAVAの大きな知識ポイントであり、有名な知識ポイントでもあります。結局のところ、JAVAは先進的であると主張するときに常にガベージコレクションをもたらします。その結果、面接ではガベージ コレクションとは何か、その原理について説明するように求められることがよくあります。もちろん、ガベージ コレクションについて質問した面接官は、99% がそれについて少ししか知りません。面接官がガベージ コレクション メカニズムとは何ですかと尋ねたら、真剣な態度で「ガベージ コレクション メカニズムについて質問しているのはどの VM ですか?」と尋ねる必要があります。

ガベージ コレクションに関連する概念とアルゴリズムは複雑であるため、詳細をすべて理解したい場合は、得るものよりも失うものの方が確実に多くなります。ただし、以下のガベージコレクションの仕組みの概要をマスターしておけば、ほとんどの面接で減点されることはないと思います。

1: ゴミとは何ですか?

たとえば、オブジェクトをもう使用しない場合、そのオブジェクトはゴミになります。例:

public void test01(){
User user = new User();
//...
}

test01 メソッドが実行された場合、ユーザー オブジェクトはもう役に立たず、ゴミになります。

2: ガベージ コレクションが必要なのはなぜですか?

オブジェクトがヒープに保存されることはわかっていますが、ヒープの大きさはどれくらいでしょうか?コマンド パラメータを通じて調整できますが、通常 32 ビット システムでは、Java ヒープ サイズは 2 GB に設定され、500 MB が新しい世代 (YoungGen) に割り当てられ、1.5 GB が古い世代 (OldGen) に割り当てられます。空間。 64 ビットであっても、PC にどれだけのハードウェア メモリを搭載できるかを考えてください。

つまり、無駄なゴミはすべてリサイクルされ、メモリ空間は他のオブジェクトに利用できるようになります。

3: JDK のデフォルトの HotSpot VM ガベージ コレクション メカニズム

1: ヒープ メモリの分類

このメカニズムを理解するには、まずヒープの分類を理解する必要があります。はい、オブジェクトがヒープ上に存在することだけがわかっていますが、次の図に示すように、ヒープの内部もいくつかの空間に分割されていることはわかりません。

内部はエデンに分かれており、2つの生存者スペースで構成されています。新しく作成されたすべてのオブジェクトは、新しい世代に割り当てられます。古い世代は、プログラム内で数回のガベージ コレクション後に生き残ったオブジェクトを保存するために使用されます

JAVAのガベージコレクションメカニズム

(

追記) : 永続生成非ヒープ メモリは、Java クラス、メソッドなどの静的ファイルを保存するために使用されます。永続生成はガベージ コレクションに大きな影響を与えません

2: リサイクル順序

の実行順序。各スペースは次のとおりです:

新しく作成されたオブジェクトのほとんどは Eden スペースに保存されます。

Eden スペースで最初の GC が実行された後、生き残ったオブジェクトは Survivor スペースの 1 つに移動されます。

その後、Eden空間でGCを実行すると、生き残ったオブジェクトが同じSurvival空間に積み上げられます。

Survivor スペースが飽和状態になると、生き残ったオブジェクトは別の Survivor スペースに移動されます。その後、飽和した生存者スペースがクリアされます。
    1. 上記の手順を数回繰り返した後、まだ生きているオブジェクトが古い世代に移動されます。

    2. IV: ガベージ コレクターとリサイクル アルゴリズム

    3. どちらのタイプの世代にも独自のコレクターがあり、各コレクターは異なるアルゴリズムを使用します。初心者の場合、すべてのアルゴリズム原理を習得する必要はないことを覚えておいてください。

      新世代コレクターが使用するコレクター: Serial、PraNew、Parallel Scavenge
    4. 旧世代コレクターが使用するコレクター: Serial Old、Parallel Old、CMS

      対応するアルゴリズムは次のとおりです。
シリアルコレクター ( コピーアルゴリズム)

新世代のシングルスレッドコレクター、マーキングとクリーニングは両方ともシングルスレッドであり、シンプルで効率的であるという利点があります。

Serial Old Collector (Marking-Collat​​ion Algorithm)

旧世代のシングルスレッド コレクター、旧世代バージョンのシリアル コレクター。

ParNew コレクター (ストップコピー アルゴリズム)

新世代のコレクターは、シリアル コレクターのマルチスレッド バージョンと考えることができ、マルチコア CPU 環境ではシリアルよりも優れたパフォーマンスを発揮します。

パラレル スカベンジ コレクター (ストップ コピー アルゴリズム)

パラレル コレクターは、高スループットを追求し、CPU を効率的に利用します。スループットは通常 99%、スループット = ユーザー スレッド時間/(ユーザー スレッド時間 + GC スレッド時間) です。高度なインタラクション応答を必要としないバックグラウンド アプリケーションなどのシナリオに適しています。

Parallel Old Collector (Stop-Copy Algorithm)

Parallel Scavenge Collector の旧世代バージョン、並列コレクター、スループット優先

CMS (Concurrent Mark Sweet) Collector (Mark-Sweet Algorithm)

高い同時実行性、低い一時停止、最短の GC リサイクル一時停止時間の追求、比較的高い CPU 使用率、速い応答時間、短い一時停止時間、高い応答時間を追求するにはマルチコア CPU が選択です

5: いつガベージが発生するかコレクションは実行されますか?

ガベージコレクションには、Scavenge GC と Full GC の 2 種類があります。

新しいオブジェクトが生成され、エデンのスペースへの適用に失敗すると、スカベンジ GC がトリガーされます。このとき、新しい世代に対してガベージ コレクションが実行されます。

古い世代 (Tenured) がいっぱいになり、永続世代 (Perm) がいっぱいになると、System.gc() が明示的に呼び出され、最後の GC 後に各ドメインのヒープの割り当て戦略が動的に変更され、フル GC が実行されます。 。

どのようなリサイクルであっても、すべてのゴミがリサイクルされるわけではなく、アルゴリズムが独自に判断した時間と量に基づいて一定期間内に一定量のゴミが除去されることに注意してください。私たちには未知です。

上記は、必ず知っておくべきガベージコレクションのメカニズムです。


以上がJAVAのガベージコレクションメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能 PHP対Python:コア機能と機能 Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHP:多くのウェブサイトの基礎 PHP:多くのウェブサイトの基礎 Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHP対Python:ユースケースとアプリケーション PHP対Python:ユースケースとアプリケーション Apr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles