参照カウントが0以上で実際にはアクセスできない場合、GCがどのようにそれらのメモリブロック(赤い領域に描かれている)がガベージであることを発見したかを誰かに説明してもらいたいですか? Javaガベージコレクタは、アクセスパスが壊れていると循環参照をどのように扱うのですか?
2
A
答えて
12
スレッド参照、静的変数、クラス参照など常にアクセス可能とみなされる一連の「ルートオブジェクト」があります。これらのルートオブジェクトからの参照のリンクを介して到達できないオブジェクトがある場合、そのオブジェクトへの参照がいくつかあっても、そのオブジェクトはGCで使用可能であると考えられます。
0
GCアルゴリズムの詳細は実装依存Javaであるため、使用するVMによって異なります。しかし、ほとんどのVMは参照カウントを使用しません。公式のVMには、利用可能ないくつかの設定可能なアルゴリズムがあります。だからこれについて一般化するのは難しいです。
3
GarbageCollectorはJavaメモリモデルに基づいて動作します。利用可能なJavaアプリケーションでは、メモリは2つの部分に分かれています:ヒープとスタック。オブジェクトはヒープメモリに格納され、次の2通りの方法でアクセスできます。 -
1)オブジェクトには、スタックメモリに格納されている参照変数があります。この場合、オブジェクトは参照変数を使用して直接アクセスできます。
2)オブジェクトは他のオブジェクトに含まれる可能性があり、スタックメモリには参照がありません。この場合、このオブジェクトは、そのコンテナオブジェクトを使用することによってのみアクセスできます。したがって、コンテナオブジェクトがガベージコレクションされている場合、このオブジェクトはガベージコレクションの対象となる必要があります。
GarbageCollectを実行している間、GarbageCollectorは、オブジェクトがスタック内で使用可能な参照によって直接的または間接的にアクセス可能かどうかをチェックします。
関連する問題
- 1. Javascript /ガベージコレクタの循環参照
- 2. Xamarinのガベージコレクタと循環参照
- 3. 大きな循環参照とJVMガベージコレクタ
- 4. マッピング時に循環参照をどのように扱うことができますか?
- 5. Java循環参照
- 6. C#をJSONのシリアライゼーションと循環参照にどのように扱うべきですか?
- 7. 変数に循環参照が含まれているかどうかのテスト
- 8. 循環参照を回避しようとしています
- 9. 循環参照を使用してオブジェクトを保存するにはどうすればよいですか?
- 10. Backbone.jsの循環参照でスタックオーバーフローを回避するにはどうすればよいですか?
- 11. エンティティフレームワーク、コードファーストモデリングと循環参照
- 12. vsnetで循環参照を避けるにはどうすればよいですか?
- 13. xmlシリアル化中に循環参照を見つけるにはどうすればよいですか?
- 14. 私は循環参照を持っています。 Objective-Cで弱い参照を作成するにはどうすればよいですか?
- 15. モジュール間の循環参照?
- 16. DBの循環参照
- 17. Entity Frameworkの循環参照
- 18. 循環参照の検索
- 19. 循環参照のJavaシリアル化は機能しますか?
- 20. 同じアセンブリで循環参照が悪いのですか?
- 21. Hibernate @onetomany Gsonとの循環参照エラー
- 22. C++のガベージコレクションと循環参照データ
- 23. イテレータと循環参照のC++コンテナ
- 24. jaxbとjax-wsの循環参照
- 25. 循環参照が許可されていない - Jsonシリアル化
- 26. 循環参照(再び...)
- 27. ASP C#ユーザーコントロール循環参照
- 28. ビジネスエンティティ、データアクセスレイヤー - 循環参照
- 29. ストライプ - JSON循環参照
- 30. 春@ResponseBody JSON循環参照