ガベージコレクションは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 クラス、メソッドなどの静的ファイルを保存するために使用されます。永続生成はガベージ コレクションに大きな影響を与えません
2: リサイクル順序
の実行順序。各スペースは次のとおりです:
新しく作成されたオブジェクトのほとんどは Eden スペースに保存されます。Eden スペースで最初の GC が実行された後、生き残ったオブジェクトは Survivor スペースの 1 つに移動されます。
その後、Eden空間でGCを実行すると、生き残ったオブジェクトが同じSurvival空間に積み上げられます。
Survivor スペースが飽和状態になると、生き残ったオブジェクトは別の Survivor スペースに移動されます。その後、飽和した生存者スペースがクリアされます。上記の手順を数回繰り返した後、まだ生きているオブジェクトが古い世代に移動されます。
IV: ガベージ コレクターとリサイクル アルゴリズム
- どちらのタイプの世代にも独自のコレクターがあり、各コレクターは異なるアルゴリズムを使用します。初心者の場合、すべてのアルゴリズム原理を習得する必要はないことを覚えておいてください。 新世代コレクターが使用するコレクター: Serial、PraNew、Parallel Scavenge
- 旧世代コレクターが使用するコレクター: Serial Old、Parallel Old、CMS対応するアルゴリズムは次のとおりです。
新世代のシングルスレッドコレクター、マーキングとクリーニングは両方ともシングルスレッドであり、シンプルで効率的であるという利点があります。
Serial Old Collector (Marking-Collation 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 サイトの他の関連記事を参照してください。

Javaはプラットフォーム固有の問題をどのように軽減しますか? Javaは、JVMおよび標準ライブラリを通じてプラットフォームに依存します。 1)bytecodeとjvmを使用して、オペレーティングシステムの違いを抽象化します。 2)標準のライブラリは、パスクラス処理ファイルパス、CHARSETクラス処理文字エンコードなど、クロスプラットフォームAPIを提供します。 3)最適化とデバッグのために、実際のプロジェクトで構成ファイルとマルチプラットフォームテストを使用します。

java'splatformentencentenhancesmicroservicesecturectureby byofferingdeploymentflexability、一貫性、スケーラビリティ、およびポート可能性。1)展開の展開の展開は、AllosmicRoserviThajvm.2)deploymentflexibility lowsmicroserviceSjvm.2)一貫性のあるAcrossServicessimplisimpligiessdevelisementand

Graalvmは、Javaのプラットフォームの独立性を3つの方法で強化します。1。言語間の相互運用性、Javaが他の言語とシームレスに相互運用できるようにします。 2。独立したランタイム環境、graalvmnativeimageを介してJavaプログラムをローカル実行可能ファイルにコンパイルします。 3.パフォーマンスの最適化、Graalコンパイラは、Javaプログラムのパフォーマンスと一貫性を改善するための効率的なマシンコードを生成します。

aeffectivelytestjavaapplicationsforformcompativity、followthesesteps:1)setupautomatedacrossmultipleplatformsusingsingcitoolslikejenkinsorgithubactions.2)divivisonmanualtingonrealhardwaretocatissusuessususus.3)

Javaコンパイラは、ソースコードをプラットフォームに依存しないバイトコードに変換することにより、Javaのプラットフォームの独立性を実現し、JVMがインストールされた任意のオペレーティングシステムでJavaプログラムを実行できるようにします。

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









