[解決済み] Java GC: なぜ生存者領域が2つあるのか?
2023-07-16 05:45:37
質問
Sun/Oracle の JVM では、GC アルゴは新しい世代を 1 つの Eden 地域と 2 つの生存地域に分割すると読みました。私が疑問に思っているのは、なぜ 1 つではなく、2 つの生存者地域に分かれているのか、ということです。アルゴは Eden とただ 1 つの生存者領域の間でピンポンし続けることができます (現在 2 つの生存者領域の間で行っている方法です)。
どのように解決するのですか?
JRockitのGC実装は、ご指摘のように、単一のedenと単一の生存空間だけで動作すると思いますが、それを引用しないでください。
HotSpot JVMの2つの生存者空間の理由は、断片化に対処する必要性を減らすためです。新しいオブジェクトは eden スペースに割り当てられます。すべて順調です。それが一杯になったら、GCが必要になります。そこで、古くなったオブジェクトを殺して、生きているオブジェクトを生存者スペースに移動させ、そこで古い世代に昇格する前にしばらくの間熟成させます。ここまではまだいい。しかし、次にエデンスペースが足りなくなると、難問が発生します。次のGCが来て、エデンスペースとサバイバースペースの両方を空けるのですが、スペースは連続していません。そこで、次のようにするのがよいのでしょうか。
- エデンの生存者を、GCによって空けられた生存者空間の穴にはめ込もうとするのか?
- 生存者空間のすべてのオブジェクトを下にずらして、断片化を解消し その後 に生存者を移動させるのですか?
- もういいや、どうせ全部移動させるんだから」といって、両方のスペースからすべての生存者を完全に別のスペース(2番目の生存者スペース)にコピーして、きれいなエデンと生存者スペースを残し、次のGCで同じことを繰り返せばいいのでしょうか?
この質問に対する Sun の答えは明白です。
関連
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
Java の double データ型における 0.0 と -0.0 の問題
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
無効な文字定数
-
配列定数は初期化子でのみ使用可能です。
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
htmlとwordの相互変換の実装(画像あり)
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ