第14章ガベージコレクションの概要

第14章ガベージコレクションの概要

ShangシリコンバレーのSongHongkangが説明したJVM:bilibili link

1ごみとは

ここに画像の説明を挿入

Java =(C ++)-


  • ガベージコレクションは、Java言語のコンパニオン製品ではありません。早くも1960年に、動的メモリ割り当てとガベージコレクション技術を使い始めた最初のLisp言語が誕生しました。
  • ガベージコレクションに関する3つの古典的な質問があります。
    • どのメモリを収集する必要がありますか?
    • ゴミはいつ集められますか?
    • ゴミをリサイクルする方法は?
  • ガベージコレクションメカニズムはJavaの署名機能であり、開発効率大幅に向上させます今日、ガベージコレクションは現代語の標準構成になりつつあります。このような長い開発期間を経ても、Javaのガベージコレクションメカニズムは進化を続けています。さまざまなサイズのデバイスやさまざまな特性を持つアプリケーションシナリオによって、ガベージコレクションの新しいアイデアが生まれています。もちろん、チャレンジはインタビューのホットスポットでもあります。

  • 大廠面接の質問
    • Ant Financial
      • どのタイプのガベージコレクター、それらの長所と短所がCMSとG1に焦点を合わせているか知っていますか。
      • 一方:JVM GCアルゴリズムとは何ですか、また現在のJDKバージョンで使用されているリサイクルアルゴリズムは何ですか。
      • 一方:G1コレクターがリサイクルプロセスについて話します
      • GCとは何ですか?なぜGCが必要なのですか?
      • 一方:GCの2つの判断方法?CMSコレクターとG1コレクターの機能。
    • Baidu
      • GCアルゴリズムについて話しましょう、世代別コレクションについて話しましょう
      • ガベージコレクションの戦略とアルゴリズム
    • Tmall
      • 一方:JVM GCの原則、JVMはどのようにメモリを再利用しますか?
      • 一方:CMS機能、ガベージコレクションアルゴリズムとは何ですか?それぞれの長所と短所、それらの一般的な短所は何ですか?
    • 滴滴出行
      • 一方では、Javaのガベージコレクターとは何ですか?G1のアプリケーションシナリオについて話しましょう。通常、ガベージコレクターを一緒にどのように使用しますか?
    • Jingdong
      • どのタイプのガベージコレクター、それらの長所と短所が、原則、プロセス、長所と短所、ガベージコレクションアルゴリズムの実装原則を含むCMSとG1に焦点を当てているか知っていますか。
    • アリ
      • ガベージコレクションアルゴリズムについて話す
      • ガベージコレクションはどのような状況でトリガーされますか?
      • 適切なガベージコレクションアルゴリズムを選択するにはどうすればよいですか?
      • JVMの3つの主要なガベージコレクターは何ですか?
    • バイトバウンス
      • 一般的なガベージコレクタアルゴリズムとは何ですか?また、それぞれの長所と短所は何ですか?
      • system.gc()とruntime.gc()は何をしますか?
      • 一方:Java GCメカニズム?GCルートとは何ですか?
      • 2つの側面:Javaオブジェクトのリサイクル方法とリサイクルアルゴリズム。
      • CMSとG1は、CMSが解決する問題を理解していますか?リサイクルプロセスについて教えてください。
      • CMSリカバリが数回一時停止されましたが、なぜ2回一時停止する必要があるのですか?

  • ガベージとは何ですか?
    • ガベージとは、実行中のプログラムにポインタがないオブジェクトを指します。このオブジェクトは、リサイクルが必要なガベージです。
    • 外文:実行中のプログラムのどのポインタからも到達できなくなったオブジェクトは、ガベージと見なされます。
  • メモリ内のガベージが時間内にクリーンアップされない場合、これらのガベージオブジェクトが占有するメモリスペースはアプリケーションが終了するまで残り、予約されたスペースを他のオブジェクトが使用することはできません。メモリオーバーフローを引き起こす可能性さえあります。

2なぜGCが必要なのですか

  • 高水準言語の場合、基本的な認識は、ガベージコレクションが実行されない場合、メモリスペースは常に家庭のゴミを生成し、決して掃除しないかのようにリサイクルせずに常に割り当てられるためメモリは遅かれ早かれ消費されるということです。
  • ガベージコレクションは、未使用のオブジェクトを処理して解放することで、メモリ内のレコードフラグメントをクリアすることもできます。デフラグは、ヒープの一方の端で占有されているヒープメモリを分割し、JVMはデフラグされたメモリを新しいオブジェクトに割り当てます
  • アプリケーションが扱うビジネスが大きく複雑になり、ユーザー増えるにつれ、GCなしではアプリケーションの正常な動作を保証することはできませんSTWのGCは実際の需要に追いついていないことが多いため、GCの最適化を引き続き試みます。

3初期のガベージコレクション

  • 初期のC / C ++の時代には、ガベージコレクションは基本的に手動で行われました。開発者は、newキーワードを使用して適用し、deleteキーワードを使用してメモリを解放できます。たとえば、次のコード:

    MibBridge *pBridge = new cmBaseGroupBridge();
    // 如果注册失败,使用delete释放该对象所占内存区域
    if (pBridge->Register(kDestroy) != NO_ERROR)
        delete pBridge;
    
  • この方法では、メモリの解放時間を柔軟に制御できますが、頻繁なアプリケーションやメモリの解放という管理上の負担が開発者にもたらされます。プログラマのコーディングの問題でメモリ領域のリサイクルを忘れると、メモリリークが発生し、ガベージオブジェクトをクリアできなくなります。システムの実行時間が長くなると、ガベージオブジェクトによって消費されるメモリが増え続ける可能性があります。メモリが表示されるまで。オーバーフローしてアプリケーションをクラッシュさせます。

  • ガベージコレクションメカニズムを使用すると、上記のコードは次のようになる可能性が非常に高くなります。

    MibBridge *pBridge = new cmBaseGroupBridge();
    pBridge->Register(kDestroy
    
  • 現在、Javaに加えて、C#、Python、Ruby、およびその他の言語はすべて、自動ガベージコレクションのアイデアを使用しています。これも将来の開発トレンドです。この自動メモリ割り当てとガベージコレクションの方法は、現代語に必要な標準になっていると言えます。

4Javaガベージコレクションメカニズム

  • 自動メモリ管理により、開発者がメモリの割り当てと回復に手動で参加する必要がなくなり、メモリリークとメモリオーバーフローのリスクが軽減されます。
    • ガベージコレクタがなければ、Javaはcppと同じになり、あらゆる種類のダングリングポインタ、ワイルドポインタ、リークの問題が頭痛の種になります。
  • 自動メモリ管理メカニズムにより、プログラマは大量のメモリ管理から解放され、ビジネス開発により集中できます
  • オラクルの公式ウェブサイトでのガベージコレクションの概要:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html

  • 心配事

    • Java開発者にとって、自動メモリ管理はブラックボックスのようなものです。「自動」に依存しすぎると、これは異常な災害になります。最も深刻な問題は、プログラムにメモリオーバーフローがある場合にJava開発者を見つける問題を弱めることです。問題を解決する能力
    • この時点で、JVMの自動メモリ割り当てとメモリリサイクルの原則を理解することが非常に重要です。JVMがメモリを管理する方法を真に理解して初めて、OutOfMemoryErrorが発生したときにエラーログに基づいて問題をすばやく見つけて解決できます。
    • さまざまなメモリオーバーフローやメモリリークのトラブルシューティングが必要な場合、ガベージコレクションがシステムのボトルネックと呼ばれ、同時実行性が高くなると、Biyaによるこれらの「自動」テクノロジの監視と調整実装する必要があります
  • どの分野がリサイクルについて懸念すべきですか?

    ここに画像の説明を挿入


  • ガベージコレクターは、若い世代、古い世代、さらにはヒープとメソッド領域全体を収集できます(Java仮想マシンの仕様では、メソッド領域をリサイクルする必要があるとは規定されていません)。
    • その中で、Javaヒープはガベージコレクターの焦点です
  • 頻度に関して:
    • 若い世代の頻繁なコレクション
    • 古い世代のコレクションが少ない
    • 基本的な不動方式エリア

おすすめ

転載: blog.csdn.net/weixin_42638946/article/details/113695963