GC クラスとは? わかりやすく解説

GC クラス

未使用メモリ自動的に収集するサービスであるシステム ガベージ コレクタ制御します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

解説解説

このクラスメソッド影響するのは、オブジェクトに対してガベージ コレクション実行されるときと、オブジェクトにより割り当てられリソース解放するときです。このクラスプロパティは、システム利用できるメモリ総量に関する情報、およびオブジェクト割り当てられているメモリ世代カテゴリ、つまりジェネレーションに関する情報提供します

ガベージ コレクタは、マネージ メモリ割り当てられているオブジェクト追跡し収集しますガベージ コレクタ定期的にガベージ コレクション実行して有効な参照がないオブジェクト割り当てられているメモリ収集します使用可能な空きメモリ使用してメモリ要求応えられない場合ガベージ コレクション自動的に実行されます。または、アプリケーションCollect メソッド使用してガベージ コレクション強制的に実行することもできます

ガベージ コレクションは、次に示すステップ実行します

  1. ガベージ コレクタは、マネージ コード参照されるマネージ オブジェクト検索します

  2. ガベージ コレクタは、参照されないオブジェクト終了試みます

  3. ガベージ コレクタは、参照されないオブジェクト解放し、それらのオブジェクトメモリ収集します

コレクション実行中マネージ コード内のオブジェクトへの 1 つ上の参照見つかった場合ガベージ コレクタはそのオブジェクト解放しません。ただし、ガベージ コレクタは、アンマネージ コードからのオブジェクトへの参照認識しないため、アンマネージ コード排他的に使用されているオブジェクト解放しないように指定されていない限りは、そのようなオブジェクト解放してしまう場合ありますKeepAlive メソッドには、アンマネージ コード使用中オブジェクトガベージ コレクタ収集するのを防ぐ機構用意されています。

ガベージ コレクタ実装は、マネージ メモリ割り当てに関する情報除いてファイル ハンドルデータベース接続などのオブジェクト所有するリソースに関する情報保持していません。ある型がアンマネージ リソース使用し、その型のインスタンス収集する前にそのリソース解放する必要がある場合、その型はファイナライザ実装できます

ほとんどの場合ファイナライザは Object.Finalize メソッドオーバーライドすることで実装されますが、C# または C++作成された型はデストラクタ実装し、コンパイラがそれらのデストラクタObject.Finalizeオーバーライドとして処理します。ほとんどの場合オブジェクトファイナライザがあれば、ガベージ コレクタはそのオブジェクト解放する前にファイナライザ呼び出します。ただし、ガベージ コレクタファイナライザ呼び出さなくてもよい場合あります。たとえば、SuppressFinalize メソッドでは、ファイナライザ呼び出し明示的に禁止してます。さらに、ガベージ コレクタは、オブジェクト終了操作を行うために特定のスレッド使用することや、相互に参照されているオブジェクトに対してファイナライザ呼び出される順序保証することはありません。オブジェクト相互に参照されていない場合には、ガベージ コレクション対象となります

特定の時点リソース解放する必要がある場合クラスは、リソース管理クリーンアップタスク実行する IDisposable.Dispose メソッド含まれIDisposable インターフェイス実装できますDispose実装するクラスは、そのクラスコンシューマオブジェクトクリーンアップするためにこのメソッド呼び出す必要がある場合と、呼び出すタイミングについて、クラスコントラクト一部として指定する必要があります既定では、ガベージ コレクタDispose メソッド呼び出しません。ただし、Dispose メソッド実装は、GC クラス内のメソッド呼び出してガベージ コレクタ終了操作カスタマイズできます

ガベージ コレクタジェネレーション使用してオブジェクト世代化をサポートすることをお勧めしますが、必須ではありません。ジェネレーションとは、メモリ内のオブジェクト相対世代単位です。オブジェクトジェネレーション番号、つまり世代は、オブジェクト属すジェネレーション示します新しく作成されオブジェクトは、新しジェネレーション一部になり、アプリケーション有効期間内で先に作成されオブジェクトよりも小さジェネレーション番号与えられます。最も新しジェネレーションオブジェクトは、ジェネレーション 0 に属します

実装時の注意 ガベージ コレクタ実装は、オブジェクト3 つのジェネレーションサポートします。 MaxGeneration は、システムサポートする最大ジェネレーション番号決定するために使用されます。オブジェクト世代化により、特定のジェネレーションセットガベージ コレクション対象になるため、ガベージ コレクタすべてのジェネレーション評価する要はなくなります

使用例使用例
Imports System

Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long
 = 10000

        Public Shared Sub
 Main()
            Dim myGCCol As New
 MyGCCollectClass

            'Determine the maximum number of generations the system
            'garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}",
 GC.MaxGeneration)

            myGCCol.MakeSomeGarbage()

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            'Determine the best available approximation of the number
 
            'of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}",
 GC.GetTotalMemory(False))

            'Perform a collection of generation 0 only.
            GC.Collect(0)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))

            Console.WriteLine("Total Memory: {0}",
 GC.GetTotalMemory(False))

            'Perform a collection of all generations up to and including
 2.
            GC.Collect(2)

            'Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
            Console.WriteLine("Total Memory: {0}",
 GC.GetTotalMemory(False))
            Console.Read()

        End Sub


        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace
using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;
      
        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
        // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);
            
            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            
            // Determine the best available approximation of the number
 
        // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            
            // Perform a collection of generation 0 only.
            GC.Collect(0);
            
            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            
            // Perform a collection of all generations up to and including
 2.
            GC.Collect(2);
            
            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage;
 i++)
            {
                // Create objects and release them to fill up memory
        // with unused objects.
                vt = new Version();
            }
        }
    }
}
using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++
 )
      {
         
         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew MyGCCollectClass;
   
   // Determine the maximum number of generations the system
   // garbage collector currently supports.
   Console::WriteLine( "The highest generation is {0}", GC::MaxGeneration
 );
   myGCCol->MakeSomeGarbage();
   
   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol )
 );
   
   // Determine the best available approximation of the number
   // of bytes currently allocated in managed memory.
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false
 ) );
   
   // Perform a collection of generation 0 only.
   GC::Collect( 0 );
   
   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol )
 );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false
 ) );
   
   // Perform a collection of all generations up to and including 2.
   GC::Collect( 2 );
   
   // Determine which generation myGCCol object is stored in.
   Console::WriteLine( "Generation: {0}", GC::GetGeneration( myGCCol )
 );
   Console::WriteLine( "Total Memory: {0}", GC::GetTotalMemory( false
 ) );
}

package GCCollectIntExample; 

import System.* ;

class MyGCCollectClass
{
    private static final long maxGarbage =
 1000;

    public static void main(String[]
 args)
    {
        MyGCCollectClass myGCCol = new MyGCCollectClass();

        // Determine the maximum number of generations the system
        // garbage collector currently supports.
        Console.WriteLine("The highest generation is {0}", 
            System.Convert.ToString(GC.get_MaxGeneration()));
        myGCCol.MakeSomeGarbage();

        // Determine which generation myGCCol object is stored in.
        Console.WriteLine("Generation: {0}", 
            System.Convert.ToString(GC.GetGeneration(myGCCol)));

        // Determine the best available approximation of the number
 
        // of bytes currently allocated in managed memory.
        Console.WriteLine("Total Memory: {0}", 
            System.Convert.ToString(GC.GetTotalMemory(false)));

        // Perform a collection of generation 0 only.
        GC.Collect(0);

        // Determine which generation myGCCol object is stored in.
        Console.WriteLine("Generation: {0}", 
            System.Convert.ToString(GC.GetGeneration(myGCCol)));
        Console.WriteLine("Total Memory: {0}", 
            System.Convert.ToString(GC.GetTotalMemory(false)));

        // Perform a collection of all generations up to and including
 2.
        GC.Collect(2);

        // Determine which generation myGCCol object is stored in.
        Console.WriteLine("Generation: {0}", 
            System.Convert.ToString(GC.GetGeneration(myGCCol)));
        Console.WriteLine("Total Memory: {0}", 
            System.Convert.ToString(GC.GetTotalMemory(false)));
        Console.Read();
    } //main

    void MakeSomeGarbage()
    {
        Version vt;

        for (int i = 0; i < maxGarbage;
 i++) {
            // Create objects and release them to fill up memory
            // with unused objects.
            vt = new Version();
        }
    } //MakeSomeGarbage
} //MyGCCollectClass
継承階層継承階層
System.Object
  System.GC
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からGC クラスを検索した結果を表示しています。
Weblioに収録されているすべての辞書からGC クラスを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からGC クラス を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「GC クラス」の関連用語

GC クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



GC クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS