では、早速本題に入りましょう。 グループ 1: JDK、JRE、JVM の関係 JDK には JRE が含まれ、JRE にも JDK が含まれ、JRE にも JDK が含まれます。 スコープ関係: JDK>JRE>JVM。 詳細については、下の図を参照してください。 グループ2: .java ファイルと .class ファイルの関係 両者の関係を説明するには、次の 2 つの図が必要です。 グループ3: クラスファイルとJVMの関係 JVM はクラス ロード メカニズムを通じてクラス ファイルを JVM にロードし、次に JVM はクラス ファイルの内容を解析します。そのため、クラス ロード プロセスにはリンクと初期化が存在します。 グループ4: クラスローダーの関係 説明のための写真: グループ 5: メソッド領域、ヒープ、スタックの関係は何ですか? 写真に直接: スタックはヒープを指す スタック フレームに変数がある場合、その型は次のような参照型になります。
このとき、スタック内の要素 obj は通常、ヒープ内の Object オブジェクトを指し、結果は obj と同じオブジェクトを指します。 コマンドを使用する
コンパイルして使用する
次にlog.txtファイルを開きます メソッド領域はヒープを指す メソッド領域には、静的変数、定数、その他のデータが格納されます。 次のような状況が発生する場合、メソッド領域内の要素がヒープ内のオブジェクトを指している典型的なケースです。 ヒープはメソッド領域を指す メソッド領域にはクラス情報が含まれ、オブジェクトはヒープに格納されます。オブジェクトを作成するための前提条件は、対応するクラス情報を持つことであり、このクラス情報はメソッド領域にあります。 グループ 6: マイナー GC、メジャー GC、フル GC の関係 マイナーGC: 若い世代で発生するGC。
メジャー GC: 古い世代で発生する GC。
フル GC: 新しい世代 + 古い世代。たとえば、メソッド領域は、若い世代と古い世代の回復を引き起こします。 グループ7: サバイバーとエデンの関係 どちらの場合も、最も重要なことは、Survivor スペースがなぜ必要なのかを理解することです。エデンだけで十分じゃないの? Survivor が存在しない場合、Eden 領域でマイナー GC が実行され、年齢制限がない場合、生き残ったオブジェクトは古い世代に送信されます。このようにして、古い世代はすぐに満たされ、メジャー GC がトリガーされます (メジャー GC は通常マイナー GC を伴うため、フル GC をトリガーするとも考えられます)。旧世代のメモリ空間は新世代のメモリ空間よりもはるかに大きく、フル GC はマイナー GC よりもはるかに長い時間がかかります。 実行時間が長い場合の欠点は何ですか? 頻繁なフル GC は長い時間がかかり、大規模なプログラムの実行速度と応答速度に影響します。 では、古い世代のスペースを増やしたり減らしたりするといいでしょう。 古い世代のスペースを増やすと、より多くの残存オブジェクトが古い世代を埋めることができます。フル GC の頻度は減りますが、古い世代のスペースが増加するため、フル GC が発生すると、実行に時間がかかります。 古い世代のスペースが削減されると、Full GC に必要な時間は短縮されますが、古い世代は生き残ったオブジェクトですぐに埋め尽くされ、Full GC の頻度が増加します。 したがって、Survivor の目的は、古い世代に送信されるオブジェクトの数を減らし、それによって Full GC の発生を減らすことです。 Survivor 事前スクリーニングにより、16 回のマイナー GC 後に新しい世代で存続できるオブジェクトのみが古い世代に送信されるようになります。 グループ 8: 参照カウントと到達可能性共有アルゴリズムの関係 参照カウント オブジェクトに参照カウンターを追加します。オブジェクトがどこかで参照されるたびに、1 ずつ増加します。参照が失われると、1 ずつ減少します。カウントが 0 の場合、参照されなくなったことを示します。
到達可能性分析アルゴリズム オブジェクトを GC ルートに接続する参照チェーンがない場合、つまり GC ルートがオブジェクトに到達できない場合、オブジェクトは使用できないことが証明されます。 GC ルート タイプ: Java スレッドでは、現在呼び出されているすべてのメソッドの型パラメータ、ローカル変数、一時値などを参照します。つまり、スタック フレームに関連するさまざまな参照です。現在ロードされているすべての Java クラス。 Java クラスの参照型静的変数。ランタイム定数プール内の参照型定数 (文字列またはクラス型)。 sun.jvm.hotspot.memory.Universe クラスなどの JVM 内部データ構造への参照。オブジェクトの wait() メソッドの呼び出しなど、同期に使用される監視オブジェクト。 グループ9: オブジェクトの参照型間の関係
機能: 一般的なコーディング Object obj = new Object() の obj は強い参照です。 キーワード new によって作成されたオブジェクトに関連付けられた参照は、強い参照です。 JVM のメモリ領域が不足すると、JVM は、強い参照を持つ「生き残った」オブジェクトを任意にリサイクルしてメモリ不足の問題を解決するのではなく、OutOfMemoryError ランタイム エラー (OOM) をスローしてプログラムを異常終了させます。 通常のオブジェクトの場合、他の参照関係がない場合、参照のスコープを超えるか、対応する (強い) 参照が明示的に null に割り当てられている限り、ガベージ コレクションの対象になります。具体的なリサイクルのタイミングは、ガベージ コレクション戦略によって異なります。
機能: ソフト参照は SoftReference クラスを通じて実装されます。ソフト参照の有効期間は、強参照の有効期間よりも短くなります。 JVM は、メモリが不足していると判断した場合にのみ、ソフト参照によって指されるオブジェクトの再利用を試みます。つまり、JVM は、OutOfMemoryError をスローする前に、ソフト参照によって指されるオブジェクトがクリーンアップされていることを確認します。ソフト参照は、参照キュー (ReferenceQueue) と組み合わせて使用できます。ソフト参照によって参照されるオブジェクトがガベージ コレクターによって再利用された場合、Java 仮想マシンは、ソフト参照をそれに関連付けられた参照キューに追加します。後で、ReferenceQueue の poll() メソッドを呼び出して、対象のオブジェクトがリサイクルされたかどうかを確認できます。キューが空の場合は null を返します。それ以外の場合は、メソッドはキュー内の前の Reference オブジェクトを返します。 アプリケーション シナリオ: ソフト参照は、メモリに敏感なキャッシュを実装するためによく使用されます。空きメモリが残っている場合は、一時的にキャッシュを保持しておき、メモリが不足したときにクリーンアップすることができます。これにより、キャッシュの使用中にメモリが枯渇することがなくなります。
弱参照は WeakReference クラスを通じて実装されます。弱参照の有効期間はソフト参照の有効期間よりも短くなります。ガベージ コレクター スレッドが管轄下のメモリ領域をスキャンすると、弱参照を持つオブジェクトが見つかると、現在のメモリ領域が十分であるかどうかに関係なく、そのメモリが再利用されます。ガベージ コレクターは優先度の低いスレッドであるため、弱参照オブジェクトはすぐに回収されない可能性があります。 弱参照は参照キュー (ReferenceQueue) と組み合わせて使用できます。弱参照によって参照されるオブジェクトがガベージ コレクションされると、Java 仮想マシンは、それに関連付けられた参照キューに弱参照を追加します。アプリケーション シナリオ: 弱いアプリケーションは、メモリに敏感なキャッシュにも使用できます。 ファントム参照: ほとんど使用されません。ReferenceQueue、PhantomReference。 グループ 10: ガベージコレクションアルゴリズムの関係 マークアンドスイープアルゴリズム 最初のステップは、アクティブなオブジェクトを見つけることです。 GC プロセスは逆であり、GC ルートに従って到達可能なすべてのオブジェクトをトラバースすることを繰り返し強調してきました。このプロセスはマーキングと呼ばれます。 ステップ 2: 上記でマークされたオブジェクト以外のすべてをクリアします。
レプリケーションアルゴリズム 新世代で使用され、新世代はEden:S0:S1=8:1:1に分割され、後者の1:1が複製に使用されます。 1 つのメモリ ブロックが使い果たされると、残っているオブジェクトが別のブロックにコピーされ、使用済みのメモリ領域が一度にクリアされます。 通常、オブジェクトは新しい世代のエデン領域に割り当てられます。マイナー GC がまだ有効な場合、それらは S0 領域に割り当てられます。 S0 と S1 はオブジェクトを継続的にコピーします。デフォルトの最大オブジェクト生存期間は 15 です。新しい世代には連続したスペースがないため、大きなオブジェクトは古い世代に直接配置される場合があります。どのような使用法でも、新しい世代の 10% は空です。 デメリット: オブジェクトの生存率が高い場合、レプリケーションの効率が低くなり、メモリが浪費されます。 マークスイープアルゴリズム その主なアイデアは、生き残ったすべてのオブジェクトを移動し、メモリ アドレスの順に並べ、終了メモリ アドレス以降のすべてのメモリをリサイクルすることです。ただし、これはあくまで理想的な状態であることに注意してください。オブジェクト間の参照関係は一般に非常に複雑であるため、ここでは具体的なアルゴリズムについては説明しません。効率の点では、一般的なソート アルゴリズムはコピー アルゴリズムよりも劣ることを理解する必要があります。このアルゴリズムはメモリの断片化とメモリの無駄を回避します。 残っているすべてのオブジェクトを一方の端に移動し、終了境界の外側のメモリを直接クリーンアップします。 上記の 3 つのアルゴリズムから判断すると、実際には絶対的に最良のリサイクル アルゴリズムは存在せず、最も適したアルゴリズムのみ存在します。 グループ 11: ガベージ コレクターはどのように関連していますか? 「新世代コレクター」: シリアル、ParNew、パラレル スカベンジ 「旧世代コレクター」: CMS、シリアル オールド、パラレル オールド ホールヒープコレクター: G1、ZGC (時代と関係がないため、表には含まれていません) この記事はWeChat公開アカウント「Java Backend Technology Full Stack」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Java Backend Technology Full Stack パブリック アカウントにお問い合わせください。 |
<<: テンセントは初めてオープンソースの10年の歴史を振り返り、オープンソースの理想と実践を組み合わせる道を確実に確立した。
>>: 2021年にクラウドコンピューティング業界を変える3つのトレンド
消費者として、次のような経験をしたことはありませんか。Dangdang.com で 3 年間本を購入...
Baidu がアルゴリズムの更新を続けた結果、多くの SEO 実践者は SEO の終焉が近づいている...
SEO を始めたばかりの人の多くは、最適化プロセスで常にある程度道を間違えたり、不必要な手順や不可能...
Green Radish 1.0 ではリンク取引が取り締まりの対象となり、現在はソフト記事リンクを取...
老舗ブランド商人のhostkeyは、10月10日より、オランダのデータセンターのGPUサーバーの優待...
2018年には、工業情報化部による「企業のクラウド移行促進実施ガイドライン(2018~2020年)」...
VPC によるネットワーク分離は、社内コラボレーションの実現や機密情報の適切な保存など、多くのセキュ...
Wavecom は、エストニアの老舗企業 (登録番号: 10756058) で、2001 年から事業...
エッジ コンピューティングは、すべての IoT デバイスやワークロードに適しているわけではありません...
過去 10 年間で、接続されたデバイスの数とそれらが生成するデータの量は飛躍的に増加しました。一般的...
Canalysは、中国のクラウドコンピューティング市場に関する2021年第2四半期のレポートを発表し...
昨日、Hostdare は 2 年間の休止期間を経て、再びロサンゼルス cn2 gia ネットワーク...
ガートナー社の年次マジック・クアドラント・レポートによると、AWS は引き続き主要な IaaS パブ...
一定量のクラウド コンピューティングとストレージ容量を購入する場合のコストを計算するのは難しくありま...
みなさんこんにちは。私は徐子宇です。以前、私は美麗碼と莫口街のブランドキーワード戦略を皆さんにシェア...