マシニングセンターがロックされている場合の対処方法

マシニングセンターがロックされている場合はどうすればよいですか?2つのサブシステムはクラスローダーと実行エンジンで、
2つのコンポーネントはランタイムデータ領域とネイティブインターフェイスです。
クラスローダー(クラスローディング):与えられた完全修飾クラス名(java.lang.Objectなど)に従って、クラスファイルをランタイムデータエリアのメソッドエリアにロードします。
実行エンジン(実行エンジン):クラス内の命令を実行します。
ネイティブインターフェイス(ネイティブインターフェイス):ネイティブライブラリとの対話。他のプログラミング言語との対話のためのインターフェイスです。
ランタイムデータ領域(ランタイムデータ領域):これは、JVMメモリと呼ばれることが多いものです。
プロセス:最初に、Javaコードがコンパイラーによってバイトコードに変換され、次にクラスローダー(ClassLoader)がバイトコードをメモリにロードして、ランタイムデータ領域のメソッド領域に配置します。バイトコードファイルは、JVMの命令セット仕様のセットに過ぎず、実行のために基盤となるオペレーティングシステムに直接引き渡すことはできません。したがって、バイトコードを基盤となるシステム命令に変換するには、特定のコマンドパーサー実行エンジン(実行エンジン)が必要です。これはCPUによって実行され、このプロセスでは、プログラム全体の機能を実現するために、他の言語のネイティブライブラリインターフェース(Native Interface)を呼び出す必要があります。

JVMランタイムデータ領域といえば、
Java仮想マシンは、Javaプログラムの実行中に、管理するメモリ領域をいくつかの異なるデータ領域に分割します。これらの領域には、作成と破棄の時間だけでなく、独自の目的があります。仮想マシンプロセスの開始時に存在する領域と、スレッドの開始と終了に応じて確立および破棄される領域があります。Java仮想マシンによって管理されるメモリは、次の領域に分割されます。

簡単に言えば、それは我々がJavaランタイムが配置されているものです
在è¿を ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

プログラムカウンターレジスタ:現在のスレッドによって実行されたバイトコードの行番号インジケーターバイトコードパーサーの仕事は、このカウンターの値を変更して、実行する次のバイトコード命令を選択することです。 、ループ、ジャンプ、例外処理、スレッド回復、およびその他の基本的な機能はすべて、このカウンターに依存して完了する必要があります。

なぜスレッドカウンターが必要なのですか?スレッドにはメモリ機能がないため

Java仮想マシンスタック(Java仮想マシンスタック):各メソッドは、Java仮想マシンスタック内にスタックフレーム(スタックフレーム)を作成し、ローカル変数テーブル、オペランドスタック、ダイナミックリンク、メソッド出口などを格納します。お知らせ

スタックフレームは、Java仮想マシンスタックの次のユニットです。

ネイティブメソッドスタック(ネイティブメソッドスタック):関数は仮想マシンスタックと同じですが、仮想マシンスタックがJavaメソッドを提供し、ローカルメソッドスタックが仮想マシンを提供してネイティブメソッドを呼び出す点が異なります。

ネイティブキーワードの変更方法は表示されず、ネイティブメソッドのソースコードのほとんどはCおよびC ++コードです

Javaヒープ:Java仮想マシンの最大のメモリはすべてのスレッドで共有され、ほとんどすべてのオブジェクトインスタンスにここでメモリが割り当てられます。

メソッド領域(Methed Area):クラス情報、定数、静的変数、ジャストインタイムのコンパイル済みコードなど、仮想マシンによって読み込まれたデータを格納するために使用されます。

後でJVMランタイムデータ領域の詳細な説明があります

プログラムカウンターの詳しい紹介は?(重要な理解)
プログラムカウンターは小さなメモリ空間であり、次のように見なされます。現在のスレッドによって実行されているバイトコード命令のアドレス(行番号)を保存します。

Java仮想マシンのマルチスレッドは、スレッドの切り替えとプロセッサの実行時間の割り当てによって実装されるため、プロセッサは1つのスレッドでしか命令を実行できません。したがって、スレッド切り替え後に正しい実行位置を復元するために、各スレッドには独立したプログラムカウンターがあり、各スレッドのカウンターは互いに影響を与えずに独立して格納されます。これは「スレッドプライベート」メモリと呼ばれます。プログラムカウンターのメモリ領域は、仮想マシン内でOutOfMemoryErrorを指定しない唯一の領域です。

概要:スレッドカウンターとも呼ばれます

例:Javaでは、最小の実行単位はスレッドであり、スレッドは命令を実行することであり、実行された命令の最後の操作は、CPUであるコンピュータです。CPUで実行する場合、非常に不安定な要素があります。これはスケジューリング戦略と呼ばれます。このスケジューリング戦略はタイムスライスに基づいています。つまり、現在のナノ秒がその命令に割り当てられます。

次の場合:

ライブ見スレッド
在è¿を ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

突然、テレビ電話にスレッドBは、スレッドAのタイムスライスを奪うだろう、それはスレッドAを破るだろう、スレッドAがハングします
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

その後、ビデオ通話が終了します。スレッドAはどうすればよいですか。
(スレッドは最小の実行単位です。彼にはメモリ機能がありません。彼はそれを行う責任があるだけで、このメモリはプログラムカウンターによって記録されます)
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

Java仮想マシンスタックを詳しく紹介しますか?(理解の強調)
Java仮想マシンはスレッドにプライベートであり、そのライフサイクルはスレッドと同じです。

仮想マシンスタックは、Javaメソッド実行のメモリモデルを記述します。各メソッドは、実行中にローカル変数テーブル、オペランドスタック、ダイナミックリンク、メソッド出口、およびその他の情報を格納するためのスタックフレーム(Stack Frame)を作成します。

説明:仮想マシンスタックにユニットがあり、ユニットはスタックフレームであり、スタックフレームごとに1つのメソッドです。スタックフレームでは、ローカル変数、オペランドスタック、ダイナミックリンク、エクスポートなどを格納する必要があります。

在这里æ?? 'å
¥å›¾ç‰ææ????è¿°

スタックフレームを解析します。

ローカル変数テーブル:一時的な8つの基本データタイプ、オブジェクト参照アドレス、returnAddressタイプを格納するために使用されます。(returnAddressは、復帰後に実行されるバイトコードの命令アドレスを保持します。)

オペランドスタック:オペランドスタックは操作に使用されます。たとえば、コードにはi = 6 * 6があります。彼は最初に操作し、コードを読み取って、計算後にローカル変数テーブルに入れます。行く

ダイナミックリンク:メソッドにservice.add()メソッドがある場合、別のメソッドにリンクする必要があります。これは、リンクが格納されているダイナミックリンクです。
エクスポート:エクスポートとは何ですか?エクスポートが正常である場合、戻りは異常です。エクスポートが異常である場合、例外がスローされます。

メソッドが別のメソッドを呼び出すと、多くのスタックフレームが作成されますか?

回答:作成されます。スタック内に他のメソッドを呼び出すダイナミックリンクがある場合、それは新しいスタックフレームを作成します。スタックは適切で、1つのスタックフレームが別のスタックフレームを呼び出し、他のスタックフレームは呼び出し元の下に配置されます

スタックがヒープを指すとはどういう意味ですか?

スタックがスタックを指すとはどういう意味ですか?スタックでメンバー変数を使用したい場合はどうしますか?メンバー変数はスタックに格納されず、アプリケーションアドレスのみが格納されます

再帰呼び出しはそれ自体で多くのスタックフレームを作成しますか?

回答:再帰的な場合、複数のスタックフレームも作成されます。つまり、スタックは上から下に並べられます。

Javaヒープの詳細な説明を教えていただけますか(理解の強調)
Javaヒープ(Javaヒープ)は、Java仮想マシンによって管理される最大のメモリであり、仮想マシンの起動時に作成されるすべてのスレッドによって共有されるメモリ領域です。このメモリ領域の唯一の目的は、オブジェクトインスタンスを格納することです。

Java仮想マシン仕様の説明は次のとおりです。すべてのオブジェクトインスタンスと配列は、ヒープに割り当てる必要があります。

Javaヒープは、ガベージコレクターによって管理される主要な領域であるため、「GCヒープ」とも呼ばれます。

メモリリサイクルの観点から、Javaヒープは、新世代と旧世代に分類できます。

メモリ割り当ての観点から、複数のスレッドのプライベート割り当てバッファは、スレッドによって共有されるJavaヒープに分割される場合があります。

どのように分割されても、保存されたコンテンツとは関係ありません。どの領域が保存されていても、それはオブジェクトインスタンスです。さらに分割すると、メモリの再利用やメモリの割り当てが速くなります。
Java Virtual Machine仕様によれば、Javaヒープは物理的に不連続なメモリ空間にある可能性があります。現在の主流の仮想マシンはすべて拡張可能です(-Xmxおよび-Xmsによって制御されます)。ヒープにインスタンス割り当てを完了するためのメモリがなく、ヒープが拡張できなくなった場合、OutOfMemoryError例外がスローされます。

ローカルメソッドスタックについて説明できますか?

ローカルメソッドスタックは理解しやすいです。メソッドのネイティブキーワードを含むスタックワードを除いて、彼はスタックに非常に似ています

これは、仮想マシンのJavaメソッド(つまり、バイトコード)を実行する仮想マシンスタックのサービスメソッドです。
ネイティブキーワードのメソッドは表示されません。ダウンロードするには、オラクルの公式Webサイトにアクセスする必要があります。ほとんどのソースコードはCおよびC ++コードです。

同様に、CおよびC ++コードはローカルメソッドスタックにあります

メソッドの領域を説明できますか(理解に重点を置いて)

メソッド領域は、すべてのスレッドで共有されるメモリ領域であり、Java仮想マシンによって読み込まれたクラス情報、定数、静的変数、ジャストインタイムコンパイラーによってコンパイルされたコードなどのデータを格納するために使用されます。

Non-Heap(非ヒープ)と呼ばれる特別な順序があります。メソッド領域がメモリ割り当て要件を満たすことができない場合、OutOfMemoryError例外がスローされます。

JVMバイトコード実行エンジンとは

仮想マシンのコアコンポーネントは実行エンジンで、仮想マシンのバイトコードを実行します。通常、ユーザーはまずそれをマシンコードにコンパイルして実行します。

「仮想マシン」は「物理マシン」に関連する概念です。仮想マシンのバイトコードは物理マシンで直接実行できません。JVMバイトコード実行エンジンが必要です。マシンコードにコンパイルした後、物理マシンで実行できます。

ダイレクトメモリについて聞いたことがありますか?

ダイレクトメモリ(ダイレクトメモリ)は、仮想マシンのランタイムデータ領域の一部ではなく、Java仮想マシンで定義されたメモリ領域でもありません。ただし、メモリのこの部分も頻繁に使用され、OutOfMemoryError例外も発生する可能性があるため、ここで説明します。

私の理解は、ダイレクトメモリは物理メモリとJava仮想マシンメモリに基づく中間メモリであるということです

ごみ収集システムを知っていますか?

プログラムが実行されていると、大量のメモリガベージが生成されます(参照なしで参照されている一部のメモリオブジェクトはメモリガベージです。これらのオブジェクトはアクセスできなくなり、プログラムはそれらを使用できなくなり、プログラムで使用できなくなります)。実行時のパフォーマンス、Java仮想マシンは、プログラムの実行プロセス中に継続的に自動ガベージコレクション(GC)を実行します。

ガベージコレクションシステムはJavaの中核であり、それも不可欠です。Javaにはガベージコレクションのための独自のメカニズムがあり、開発者は手動でクリーンアップする必要がありません

その理由の1つは、強力なJavaガベージコレクションシステムにより、Javaが市場をリードしていることです。

スタックの違いは何ですか?
image.png

注:

静的変数はメソッド領域に配置されます

静的オブジェクトは引き続きヒープに配置されます。

ディープコピーとシャローコピー
シャローコピー(shallowCopy)は、既存のメモリアドレスにポインターを追加するだけです。

ディープコピー(deepCopy)は、ポインターを追加して新しいメモリに適用し、増加したポインターが新しいメモリを指すようにします。

浅いコピー:コピーするメモリアドレスをポイントするだけで、元のアドレスが変更されると、浅いコピーからコピーされたオブジェクトもそれに応じて変更されます。

ディープコピー:コピーしたオブジェクトを保存するために、コンピューターで新しいメモリアドレスを開きます。

Javaでメモリリークは発生しますか?理由を説明してください。
メモリリークとは、使用されなくなったオブジェクトまたは変数が常にメモリに占有されていることを意味します。理論的には、JavaにはGCガベージコレクションメカニズムがあります。つまり、使用されなくなったオブジェクトは、GCによって自動的に収集され、メモリから自動的に削除されます。

ただし、この場合でも、処理センターがロックされているとメモリリークが発生します。Javaのメモリリークの原因は非常に明確です。存続期間の短いオブジェクトへの参照を保持する長周期オブジェクトはリークする可能性があります存続期間の短いオブジェクトは不要になりましたが、存続期間の長いオブジェクトが参照を保持しているため、リサイクルできません。これは、Javaでのメモリリークの発生です。

ガベージコレクションメカニズムとアルゴリズム
Javaガベージコレクションメカニズムの簡単な説明
Javaでは、プログラマはオブジェクトのメモリを明示的に解放する必要はなく、仮想マシン自体が解放します。JVMにはガベージコレクションスレッドがあり、優先順位が低く、通常の状況では実行されません。仮想マシンがアイドル状態であるか、現在のヒープメモリが不足している場合にのみ、実行がトリガーされます。オブジェクトを参照し、それらをコレクションに追加して、リサイクルのためにリサイクルします。

GCとは?GC
GCがガベージコレクション(ガベージコレクション)を意味する理由、メモリ処理はプログラマーが問題を起こしやすい場所です。メモリコレクションを忘れたり間違ったりすると、プログラムまたはシステムが不安定になったり、クラッシュしたりします。Javaが提供するGC関数は自動的に監視できますオブジェクトがメモリを自動的に再利用する目的を達成するための範囲を超えているかどうかにかかわらず、Java言語は、割り当てられたメモリを解放するための表示操作メソッドを提供していません。


ガベージコレクションの利点と欠点利点:JVMのガベージコレクターは、参照されていないオブジェクトを手動で処理する必要がないため、これが最大の利点です。

短所:プログラマーは、オブジェクトまたはすべてのオブジェクトのガベージコレクターをガベージコレクションのためにリアルタイムで呼び出すことができません。

ガベージコレクターの原則は何ですか?ガベージコレクションを手動で実行する方法はありますか?
GCの場合、プログラマーがオブジェクトを作成すると、GCはオブジェクトのアドレス、サイズ、および使用状況の監視を開始します。

通常、GCは有向グラフを使用して、ヒープ内のすべてのオブジェクトを記録および管理します。このようにして、「到達可能」なオブジェクトと「到達不能」なオブジェクトを判別します。一部のオブジェクトが「到達不能」であるとGCが判断した場合、GCはこれらのメモリ空間を再利用する責任があります。

ええ プログラマは手動でSystem.gc()を実行してGCに実行を通知できますが、Java言語仕様ではGCが実行されることは保証されていません。

JVMにはどのような参照タイプがありますか?
強参照:gcが発生してもリサイクルされません。
ソフトリファレンス:メモリオーバーフローが発生する前に、有用ではあるが必須ではないオブジェクトが収集されます。
弱い参照:有用だが必須ではないオブジェクトは、次のGCでリサイクルされます。
仮想参照(ゴースト参照/ファントム参照):仮想参照を通じてオブジェクトを取得することはできません。仮想参照の実装にはPhantomReferenceが使用されます。仮想参照の目的は、GCの際に通知を返すことです。

オブジェクトをリサイクルできるかどうかを判断する方法は?
ガベージコレクターがガベージコレクションを実行している場合、最初に判断する必要があるのは、リサイクルする必要があるメモリ、どのオブジェクトが生きていてリサイクルできないか、どのオブジェクトが停止していてリサイクルする必要があるかです。

一般的に、2つの判断方法があります。

参照カウンターメソッド:オブジェクトごとに参照カウントを作成します。オブジェクト参照がある場合、カウンターは+1です。参照が解放されると、カウンターは-1になります。カウンターが0の場合、リサイクルできます。循環参照の問題を解決できないという欠点があります(これは排除されました)。

到達可能性分析アルゴリズム:GCルートから下方向に検索し、検索がたどるパスを参照チェーンと呼びます。オブジェクトが参照チェーンなしでGCルートに接続されている場合、オブジェクトをリサイクルできることが証明されます。(非常に、市場で非常に広く使用されています)

フルGCとは何ですか?
若い世代と古い世代、および永続的な世代を含むヒープスペース全体をクリーンアップします。
フルGCはヒープスペース全体をクリーンアップするため、フルGCの実行速度は非常に遅くなります。Java開発では、フルGCがトリガーされないようにするのが最適です。

ガベージコレクターで
オブジェクトを収集できる場合現在オブジェクトを使用しているアプリケーションからオブジェクトにアクセスできなくなった場合に、オブジェクトを収集できます。

パーマネントジェネレーションではガベージコレクションは発生しません。パーマネントジェネレーションがいっぱいか、しきい値を超えると、フルガベージコレクション(フルGC)がトリガーされます。ガベージコレクタの出力をよく見ると、永続的な世代もリサイクルされていることがわかります。これが、完全なGCを回避するために正しい永続的な世代サイズが非常に重要である理由です。

JVMガベージコレクションアルゴリズムとは何ですか?
マークスイープアルゴリズム:不要なオブジェクトにマークを付けて、クリアしてリサイクルします。短所:効率が高くなく、ごみの破片が取れない。

コピーアルゴリズム:容量に応じて同じサイズの2つのメモリ領域を分割し、1つのブロックが使い果たされたら、ライブオブジェクトを別のブロックにコピーして、使用済みメモリ領域を1回クリーンアップします。短所:メモリ使用量は多くなく、オリジナルの半分だけです。

マーキング編成アルゴリズム:不要なオブジェクトにマークを付け、残っているすべてのオブジェクトを一方の端に移動し、最後の境界を超えてメモリを直接クリアします

世代別アルゴリズム:メモリは、オブジェクトのさまざまなライフサイクル(通常、新世代と旧世代)に応じていくつかのブロックに分割されます。新世代は基本的に複製アルゴリズムを採用し、旧世代はマーク配置アルゴリズムを採用しています。

マークスイープアルゴリズム
不要なオブジェクトにマークを付け、それらをクリアしてリサイクルします。

Mark-sweepアルゴリズム(Mark-Sweep)は、ガベージコレクションを2つのステージに分割する一般的な基本的なガベージコレクションアルゴリズムです。

マーキング段階:リサイクルできるオブジェクトにマークを付けます。

クリア段階:マークされたオブジェクトが占めるスペースを再利用します。

後で説明するガベージコレクションアルゴリズムはこのアルゴリズムに基づいて改善されているため、マークスイープアルゴリズムは基本的です。

利点:シンプルな実装で、オブジェクトを移動する必要がありません。

短所:マーキングおよびクリーニングプロセスの効率が低く、多数の不連続なメモリフラグメントが生成され、ガベージコレクションの頻度が増加します。

マークは-スイープアルゴリズムは、図示のように処理を行う
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

コピーアルゴリズム
マークアンドスイープアルゴリズムの低効率の問題を解決するために、コピーアルゴリズムが作成されました。一度に1つの領域のみを使用して、メモリ空間を2つの等しい領域に分割します。ガベージコレクション中に、現在使用されている領域を走査し、残っているオブジェクトを別の領域にコピーして、最後に現在使用されている領域のリサイクル可能なオブジェクトを収集します。

利点:メモリの断片化を考慮せずに、メモリを順番に割り当て、実装が簡単で、実行が効率的です。

短所:使用可能なメモリサイズが元のサイズの半分に減少し、生存率が高いときにオブジェクトが頻繁にコピーされます。

下に示すように、アルゴリズムの実行をコピー
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

マークアンドソートアルゴリズム
レプリケーションアルゴリズムは新しい世代で使用できますが、古い世代では複製アルゴリズムを選択できません。古い世代のオブジェクトの生存率が高くなり、コピー操作が増えて効率が低下するためです。

マークスイープアルゴリズムは古い世代にも適用できますが、効率的ではなく、メモリが解放された後に大量のメモリフラグメントを生成するのは簡単です。したがって、Mark-Compactアルゴリズムとは異なるMark-Compactアルゴリズムがあり、リサイクル可能なオブジェクトをマークした後、残っているすべてのオブジェクトがメモリの一方の端に圧縮され、コンパクトに配置されます。一緒に、最後の境界を越えてメモリを取り戻します。リサイクル後、使用済みメモリと未使用メモリは両側にあります。

利点:マーククリーンアルゴリズムでのメモリの断片化の問題が解決されました。

短所:ローカルオブジェクトを移動する必要があるため、効率がある程度低下します。

マーク-図に示すようにアルゴリズムの実行を終了
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

世代別コレクションアルゴリズム
現在の商用仮想マシンはすべて、ガベージコレクションアルゴリズムの世代別コレクションを使用しています。世代別収集アルゴリズムは、その名前が示すように、オブジェクトのライフサイクルに従ってメモリをいくつかのブロックに分割します。図に示すように、一般的に、若い世代、歳と永久世代を含め:(後で説明集中)
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

ガベージコレクションは、JVMのパーマネントジェネレーションで発生しますか?
ガベージコレクションは、パーマネントジェネレーションでは発生しません。パーマネントジェネレーションがいっぱいか、しきい値を超えると、フルガベージコレクション(フルGC)がトリガーされます。ガベージコレクタの出力をよく見ると、永続的な世代もリサイクルされていることがわかります。これが、完全なGCを回避するために正しい永続的な世代サイズが非常に重要である理由です。Java8を参照してください:永続的な世代からメタデータ領域へ
(注:永続的な世代はJava8で削除され、メタデータ領域と呼ばれる新しいネイティブメモリ領域が追加されました)

ガベージコレクタと新世代の、昔の永久世代
新世代の話、昔、恒久的な世代差
åœ¨è¿ ™é‡Œæ?? 'å
¥å›¾ç‰ææ????è¿ °

Javaでは、ヒープは2つの異なる領域に分割されます。若い世代(Old)と古い世代(Old)です。若い世代(ヤング)は、エデン、サバイバーから、サバイバーへという3つの領域に分かれています。この分割の目的は、JVMがメモリの割り当てやリサイクルなど、ヒープメモリ内のオブジェクトをより適切に管理できるようにすることです。

新しい世代は通常、新しく出現したオブジェクトを保存するため、ガベージコレクション中に毎回多数のオブジェクトが死ぬことが判明しています。生き残るオブジェクトの数はごくわずかです。レプリケーションアルゴリズムが採用されており、コレクションを完了するために残っているオブジェクトのレプリケーションのわずかなコストのみが必要です。

古い世代では、通常、長期間存続したオブジェクトは保存されます。オブジェクトは生存率が高く、それを保証する追加のスペースがないため、「マーククリーン」または「マークソート」アルゴリズムを使用する必要があります。

永続的な世代は、JVMのメソッド領域です。以下に、仮想マシンによってロードされたクラス情報、静的変数、定数、その他のデータを示します。この領域のものは、古い世代や新しい世代よりもリサイクルが困難です。

マイナーGC、メジャーGC、フルGCとは何ですか?
マイナーGCは新世代のGCで、新世代で発生するガベージコレクションアクションを指します。Javaオブジェクトはほとんど死んでいるので、マイナーGCは非常に頻繁であり、回復速度は一般的に高速です。(通常、コピーアルゴリズムを使用してゴミをリサイクルします)

メジャーGCは旧世代のGCであり、旧世代で発生したGCを指します。通常、メジャーGCはマイナーGCと組み合わせて実行されます。メジャーGCはマイナーGCよりもはるかに低速です。(クリアマーキング方式、マーキング仕上げ方式が使用できます)

フルGCは、若い世代と古い世代を含むヒープ領域全体をクリーンアップします

マイナーGC、メジャーGC、フルGCの違いとトリガー条件
マイナーGCトリガー条件は、一般的に次のとおりです。

エデン領域がいっぱいになると、MinorGCがトリガーされます。つまり、オブジェクトを申請するときに、エデン領域が十分でないことがわかり、MinorGCがトリガーされます。

マイナーGCは、新しく作成されたオブジェクトのサイズ> Eden残りスペースのときにトリガーされます

メジャーGCとフルGCのトリガー条件は通常、次のとおりです。

メジャーGCは通常、フルGCと同等です

すべてのマシニングセンタ>は古いのは、宇宙の残りのオブジェクトの平均サイズと古い時代にプロモーションを行う方法までロックされていた
MinorGCにスペースが残っている古いのは、よりオブジェクト後の生存を
代わって不十分永久スペースです
)エグゼクティブにSystem.gc(
CMS異常GCの
ヒープメモリの割り当てがあります大きなオブジェクト

元の記事を28件公開 Likes0 訪問数907

おすすめ

転載: blog.csdn.net/srhgsr/article/details/105545610