jitコンパイラおよびclrは、ヒープ内のオブジェクトを指すか、またはnullであるアプリケーションルートのリストを維持します。 GCはこれらのルーツからグラフを作成し、このグラフで参照されているヒープ内のすべてのオブジェクトをマークします。残りはゴミです。
私の質問です:どのように根がnullになるのですか?
明白なケースは、変数が明示的にコード内でnullに設定されている場合です。 しかし、もしそうでなければ? jit/clrはいつルートをnullに設定するのかを知っていますか?GCおよびアプリケーションのルート
0
A
答えて
1
私の理解では、アプリケーションのルートに含まれるポインタは、がnullに設定されていません。これはちょっとした直感的な方法です(IMHO)。なぜなら、オブジェクトを処分する最も速い方法は、単にFATファイルシステムがファイルを削除するためにFATエントリをマークするのと同じように、単にポインタを取り除くことだと思われるからですディスク上のバイトにその 'ポインタ'を実際に追いかけることなく、それらをゼロに設定せずに。私はこのことに触れたインタビューの質問を見逃していました。私たちは日常的に心配している事柄には全く適応していませんが、少し読んでいます。
いずれにしても... Jeffrey Richterは12年前にこれに対処するMSDNの記事を書きました。彼の記事から、私は以下のことを学びました。
GCを実行すると、すべてのアプリケーションルートが到達不能オブジェクトを指しているとみなされます。ルートを歩いて、ヒープ上のオブジェクトに従います(または、有効なものを指し示していないことを発見します)。これは再帰的に行い、到達可能なオブジェクトの新しいグラフを作成します。その後、有効なオブジェクトを移動してポインタを修正します。その効果は、空きメモリをヒープの上部に統合することです。このプロセスのある時点で、到達可能なオブジェクトのグラフがアプリケーションルートにコピーされ、それらが置き換えられます。ヒープが圧縮される前または後にこの問題が発生するかどうかは不明です。
MSDN Magazineの12月12日号と1月号には、C#メモリ管理に関する記事も含まれています。私はそれを読んだことはありませんが、それを計画しています - それはすべてを明らかにするかもしれません。
関連する問題
- 1. GC()およびRM()
- 2. GC開始および終了イベント
- 3. Railsの4 - ルートおよびパス
- 4. アプリケーション購入およびUIRequiredDeviceCapabilities
- 5. フラスココンテキスト(アプリケーションおよび要求)
- 6. C#XMLおよびListViesアプリケーション
- 7. XCodeの4およびアプリケーション提出プロセス
- 8. Webアプリケーション内のエンティティおよび値オブジェクト
- 9. Facebookのファンページ、アプリケーションおよびコメント欄
- 10. iPhone SDKアプリケーションのNSThread、NSTimer、およびAutoreleasePool
- 11. GC。第2世代および大型オブジェクトのヒープのみの収集
- 12. iOSおよびAndroidアプリケーション用のリモートWebベースのテストおよびデバッグサービス
- 13. ルート(およびルートのみ)のURLを別のドメインにリダイレクトしますか?
- 14. Java GCログは、メジャーおよびフルGCについて明らかではありません - シリアルコレクタ
- 15. プロファイリング/メモリ使用量の改善および/またはGC時間
- 16. 角度2つのチェーンのルートのparamsおよびHTTPサブスクリプション
- 17. エクスプレスコントローラからのコールおよびHTTPルートの方法は?
- 18. Windows環境およびモバイルWebアプリケーション
- 19. WebアプリケーションJava EEおよびCSVファイル
- 20. XDocument名前空間は、ルートおよび最初の子
- 21. ルートおよびルートパラメータの角度付きサブスクリプション
- 22. ナビゲーションのルートを使用してASP.NET、Twitter.Bootstrap.MVC4、ASP.NET、およびメニュー
- 23. Angular2ルータおよびUI-ルータには1つのルート
- 24. Relay、React JSおよびGraphqlアプリケーションを使用した独立フロントエンドおよびバックエンドアプリケーション
- 25. CおよびMYSQLアプリケーションの開発におけるビルドエラー
- 26. C#アプリケーションとC++アプリケーション間のmapおよびshared_ptrのシリアル化?
- 27. Railsルート、has_many、および任意でネストされたリソースサニティ?
- 28. &&(論理および)および|| (if文)
- 29. expressおよびnodejsアプリケーションによる応答
- 30. - 、_、およびR
もう1つのケース:スコープを離れるときに、コードブロックに定義されているローカル変数が到達不能になると、関数のスタックフレームが緩やかになり、そのためこのオブジェクトが参照されます。 –