GC クラス

定義

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

public ref class GC abstract sealed
public ref class GC sealed
public static class GC
public sealed class GC
type GC = class
Public Class GC
Public NotInheritable Class GC
継承
GC

次の例では、いくつかの GC メソッドを使用して、未使用のオブジェクトのブロックに関する生成情報とメモリ情報を取得し、コンソールに出力します。 未使用のオブジェクトが収集され、結果のメモリ合計が表示されます。

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 ) );
}
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();
            }
        }
    }
}
open System

let maxGarbage = 1000

type MyGCCollectClass() =
    member _.MakeSomeGarbage() =
        for _ = 1 to maxGarbage do
            // Create objects and release them to fill up memory with unused objects.
            Version() |> ignore

[<EntryPoint>]
let main _ =
    let myGCCol = MyGCCollectClass()

    // Determine the maximum number of generations the system
    // garbage collector currently supports.
    printfn $"The highest generation is {GC.MaxGeneration}"

    myGCCol.MakeSomeGarbage()

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    // Determine the best available approximation of the number
    // of bytes currently allocated in managed memory.
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    // Perform a collection of generation 0 only.
    GC.Collect 0

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    printfn $"Total Memory: {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.
    printfn $"Generation: {GC.GetGeneration myGCCol}"
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    0
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

注釈

この API の詳細については、「GC の 補足 API 解説」を参照してください。

プロパティ

MaxGeneration

システムが現在サポートしている最大のジェネレーション番号を取得します。

メソッド

AddMemoryPressure(Int64)

アンマネージ メモリが大規模に割り当てられたため、ガベージ コレクションをスケジュールするときに考慮する必要があることが、ランタイムに通知されます。

AllocateArray<T>(Int32, Boolean)

配列を割り当てます。

AllocateUninitializedArray<T>(Int32, Boolean)

可能な場合は、ゼロ初期化のスキップ中に配列を割り当てます。

CancelFullGCNotification()

ガベージ コレクションの通知の登録をキャンセルします。

Collect()

すべてのジェネレーションのガベージ コレクションを直ちに強制実行します。

Collect(Int32)

ジェネレーション 0 から指定ジェネレーションまでのガベージ コレクションを直ちに強制実行します。

Collect(Int32, GCCollectionMode)

GCCollectionMode 値によって指定したタイミングで、ジェネレーション 0 から指定ジェネレーションまでのガベージ コレクションを強制的に実行します。

Collect(Int32, GCCollectionMode, Boolean)

ジェネレーション 0 から指定ジェネレーションまでのガベージ コレクションを、 GCCollectionMode 値で指定したタイミングで強制実行します。コレクションをブロックする必要があるかどうかを指定する値を指定します。

Collect(Int32, GCCollectionMode, Boolean, Boolean)

ジェネレーション 0 から指定ジェネレーションまでのガベージ コレクションを、 GCCollectionMode 値で指定したタイミングで強制実行します。コレクションをブロックおよび圧縮する必要があるかどうかを指定する値を指定します。

CollectionCount(Int32)

指定したジェネレーションのオブジェクトに対するガベージ コレクションの発生回数を返します。

EndNoGCRegion()

GC 領域の無待機モードを終了します。

GetAllocatedBytesForCurrentThread()

その有効期間の開始以降、現在のスレッドに割り当てられた総バイト数を取得します。

GetConfigurationVariables()

ガベージ コレクターによって使用される構成を取得します。

GetGCMemoryInfo()

ガベージ コレクションのメモリ情報を取得します。

GetGCMemoryInfo(GCKind)

ガベージ コレクションのメモリ情報を取得します。

GetGeneration(Object)

指定したオブジェクトの現在のジェネレーション番号を返します。

GetGeneration(WeakReference)

指定した弱い参照の対象となる現在のジェネレーション番号を返します。

GetTotalAllocatedBytes(Boolean)

プロセスの有効期間にわたって割り当てられたバイト数を取得します。 戻り値には、ネイティブ割り当ては含まれません。

GetTotalMemory(Boolean)

断片化を除くヒープ サイズを取得します。 たとえば、GC ヒープの合計サイズが 100 mb で、断片化 (空きオブジェクトによって占有される領域) が 40 mb を占める場合、この API は 60 mb を報告します。 パラメーターは、このメソッドが制御を戻す前に短い時間だけ待機して、システムがガベージ コレクションを行い、オブジェクトの終了操作を実行できるようにするかどうかを示します。

GetTotalPauseDuration()

プロセスの開始以降に GC で一時停止された合計時間を取得します。

KeepAlive(Object)

指定したオブジェクトを参照することにより、現在のルーチンの開始時からこのメソッドが呼び出される時点までの間、そのオブジェクトをガベージ コレクションの対象から外します。

RefreshMemoryLimit()

システム上のさまざまなメモリ制限を検出して、ガベージ コレクター自体を再構成するように指示します。

RegisterForFullGCNotification(Int32, Int32)

フル ガベージ コレクションの可能性が高い状態のとき、およびガベージ コレクションが完了したときに、ガベージ コレクションの通知を発行する必要があることを指定します。

RegisterNoGCRegionCallback(Int64, Action)

GC 領域に一定量のメモリが割り当てられたときに呼び出されるコールバックを登録します。

RemoveMemoryPressure(Int64)

アンマネージ メモリが解放され、ガベージ コレクションのスケジュールにこのメモリを考慮する必要がなくなったことをランタイムに通知します。

ReRegisterForFinalize(Object)

SuppressFinalize(Object) が事前に呼び出されている指定オブジェクトに対して、ファイナライザーを呼び出すことをシステムに要求します。

SuppressFinalize(Object)

指定したオブジェクトに対してファイナライザーを呼び出さないよう共通言語ランタイムに要求します。

TryStartNoGCRegion(Int64)

指定した量のメモリを使用可能な場合、クリティカル パスの実行中にガベージ コレクションが行われないよう、試行します。

TryStartNoGCRegion(Int64, Boolean)

指定した量のメモリを使用可能な場合は、クリティカル パスの実行中にガベージ コレクションが行われないよう、試行します。また、最初に十分な量のメモリを使用できない場合に、ガベージ コレクターがフル ブロッキング ガベージ コレクションを実行するかどうかを制御します。

TryStartNoGCRegion(Int64, Int64)

大きなオブジェクト ヒープおよび小さなオブジェクト ヒープに対して、指定した量のメモリを使用可能な場合、クリティカル パスの実行中にガベージ コレクションが行われないよう、試行します。

TryStartNoGCRegion(Int64, Int64, Boolean)

大きなオブジェクト ヒープおよび小さなオブジェクト ヒープに対して、指定した量のメモリを使用可能な場合は、クリティカル パスの実行中にガベージ コレクションが行われないよう、試行します。また、最初に十分な量のメモリを使用できない場合に、ガベージ コレクターがフル ブロッキング ガベージ コレクションを実行するかどうかを制御します。

WaitForFullGCApproach()

共通言語ランタイムによるフル ブロッキング ガベージ コレクションが近づいているかどうかを確認するための、登録済みの通知の状態を返します。

WaitForFullGCApproach(Int32)

共通言語ランタイムによるフル ブロッキング ガベージ コレクションが近づいているかどうかを確認するための登録済みの通知の状態を、指定したタイムアウト時間で返します。

WaitForFullGCApproach(TimeSpan)

共通言語ランタイムによるフル ブロッキング ガベージ コレクションが近づいているかどうかを確認するための登録済みの通知の状態を、指定したタイムアウト時間で返します。

WaitForFullGCComplete()

共通言語ランタイムによるフル ブロッキング ガベージ コレクションが完了したかどうかを確認するための、登録済みの通知の状態を返します。

WaitForFullGCComplete(Int32)

共通言語ランタイムによるフル ブロッキング ガベージ コレクションが完了したかどうかを確認するための登録済みの通知の状態を、指定したタイムアウト時間で返します。

WaitForFullGCComplete(TimeSpan)

ブロッキング ガベージ コレクションが完了したかどうかに関する登録済み通知の状態を返します。 完全なコレクションを無期限に待機できます。

WaitForPendingFinalizers()

ファイナライザーのキューを処理するスレッドがそのキューを空にするまで、現在のスレッドを中断します。

適用対象

こちらもご覧ください