CAS (比較 AND スワップ) メカニズム: オブジェクト メモリ割り当ての同時実行問題を解決するための比較および交換メカニズム メモリ割り当て方法: ポインタ衝突とフリー リスト
以前は、JVM はスレッドの同時実行性の問題を解決するために CAS を使用していましたが、CAS の連続ループがあり、CPU を無駄に消費していました。現在では、各スレッドに異なるメモリ アドレスが割り当てられています。仮想マシンでは、デフォルトのメモリ割り当ては2 番目の方法: 開発者は CAS を閉じた後にのみ使用します。
Java オブジェクトには次のものが含まれます。
GCリサイクル
オブジェクトの生存を判定する方法の中で、一般的に使用される参照カウント アルゴリズムは、オブジェクトが参照を持つ場合に +1 するというもので、これは比較的簡単ですが、2 つのオブジェクトが相互に指している場合は面倒になります。これら 2 つのオブジェクトは役に立たないということです。オブジェクトはガベージであるはずなのでリサイクルする必要がありますが、デッドロックが発生したためリサイクルできません。現在の仮想マシンは到達可能性分析アルゴリズムを使用しています。
到達可能性アルゴリズムの原理: ルート ノードとしてスタック、静的変数、定数プールなどのデータを格納する配列が GC 内に存在します。トラバースします。オブジェクトがトラバースされない場合はリサイクルされます。オブジェクトはありません。それへの参照を持つオブジェクト内の , はガベージとみなされ、リサイクルされる必要があります。たとえば、以下のデッドロックでは、それらはヒープ内で相互にガイドするだけですが、GC ルートにはそれらをガイドするものは何もありません。 GC はそれらをゴミとして扱います。
Java からの引用:
強参照: 強参照がある限り、GC はリサイクルしません。
ソフトドリンク: アプリケーションのメモリが不足している場合にのみリサイクルされます
弱い飲酒: GC がトリガーされる限り、リサイクルされます。
ガベージ コレクションのオブジェクト割り当ての原則:
1. 年齢昇格のもう 1 つの側面は、動的年齢決定です。
例: から老年まで
TO エリアの最小の年齢から加算され、TO 設定メモリの半分を超えた場合は、加算が終了した年齢から最大の年齢まで直接古い年齢に移動します。
2. 年齢の問題もあります。このしきい値は仮想マシンによって設定されます。ほとんどの場合、それは 15 です。このしきい値より大きい場合、昇格されます。
なぜ新世代は3つの領域に分かれているのでしょうか?これは、新世代リサイクルではコピー アルゴリズムが使用されており、以下に示すように 3 つの領域のサイズが Eden:from:to=8:1:1 であるためです。
ガベージコレクションアルゴリズム:
リサイクル不可能なオブジェクトを見つけるためのルート到達可能性アルゴリズム
コピー アルゴリズム: リサイクルされていないオブジェクトを予約領域にコピーし、ガベージ コレクトします。
例:新世代のEden領域は、Eden領域内に予約領域s0とs1があり、Eden領域がいっぱいになるとGCが開始されます。
旧世代は消去アルゴリズムを使用していますが、その主な理由は、旧世代は基本的に生きており、コピーする必要がないためです。
ガベージコレクション:
ヤング GC は新しい世代のみをリサイクルしますが、フル GC は古い世代とメソッド領域をリサイクルします。
質問 1: 新世代を拡張すると効率は向上しますか?