-1

私が読んだところによると、GC は「ルート」から開始し、GC がスイープを実行する前に、すべてのライブ オブジェクトを追跡してマークします。しかし、何がルートを構成しているのか正確にはわかりません。たとえば、次のコードでは、Main メソッドがスレッドから開始され、存在します。では、GC の開始時に、どの部分をルートとして選択するかをどのように判断するのでしょうか?

         static void Main()
         {

             var thread = new Thread(SomeLongRunningProcess);
             thread.Start();

         }

        static void SomeLongRunningProcess()
        {


        }
4

1 に答える 1

5

ルーツが含まれます

  • 静的フィールド (プロセス内の AppDomain ごとに、読み込まれたすべてのアセンブリ内のすべての型のすべての静的フィールド)
  • ローカル変数 (スレッドごとの CPU レジスタ内の変数を含む)
  • f-reachable キュー (ファイナライザーを持つオブジェクトのリスト)
  • ファイナライズ キュー (そうでなければガベージですが、ファイナライズを待機しているオブジェクトのリスト)
于 2013-10-02T15:59:52.037 に答える