GC クラス
アセンブリ: mscorlib (mscorlib.dll 内)


このクラスのメソッドが影響するのは、オブジェクトに対してガベージ コレクションが実行されるときと、オブジェクトにより割り当てられたリソースを解放するときです。このクラスのプロパティは、システムで利用できるメモリの総量に関する情報、およびオブジェクトに割り当てられているメモリの世代カテゴリ、つまりジェネレーションに関する情報を提供します。
ガベージ コレクタは、マネージ メモリで割り当てられているオブジェクトを追跡し、収集します。ガベージ コレクタは定期的にガベージ コレクションを実行して、有効な参照がないオブジェクトに割り当てられているメモリを収集します。使用可能な空きメモリを使用して、メモリの要求に応えられない場合、ガベージ コレクションが自動的に実行されます。または、アプリケーションは Collect メソッドを使用して、ガベージ コレクションを強制的に実行することもできます。
ガベージ コレクションは、次に示すステップを実行します。
コレクションの実行中、マネージ コード内のオブジェクトへの 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.GC


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


GC プロパティ
GC メソッド


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



Weblioに収録されているすべての辞書からG. cを検索する場合は、下記のリンクをクリックしてください。

「G. c」に関係したコラム
-
FX(外国為替証拠金取引)の口座明細には、証拠金や維持率のような専門用語が使われています。ここでは、それらの用語の意味や計算方法について解説します。建玉可能金額(たてぎょくかのうきんがく)新規に建玉(...
-
FXやCFDの線形回帰スロープとは、線形回帰の傾きを1本の線で表したテクニカル指標のことです。線形回帰スロープは、Linear Regression Slopeともいいます。線形回帰スロープの描く線は...
-
株365の日経225証拠金取引と為替相場とはどのような関係にあるでしょうか。ここでは、日経225証拠金取引の値動きのもととなる日経平均株価(日経225)と主要通貨のチャートを見比べてみます。次の図は、...
-
CFDのトウモロコシ相場は、生産国や消費国の情勢、気候などにより値動きが大きくなります。この値動きは、テクニカル指標では分析できないほど荒い値動きになります。ここでは、過去のトウモロコシ相場を振り返り...
-
株式分析の平均足をエクセルで表示する方法を紹介します。株式分析の平均足は、始値、高値、安値、終値の4本値をもとに、新たな4本値を計算してローソク足として表示したものです。平均足の計算方法は次の通りです...
-
FXのローソク足は、為替レートの始値、高値、安値、終値を図に表したものです。図に表すことにより、現在の為替レートが過去の為替レートの中のどのポジションにあるかを知ることができたり、為替レートが上昇して...
- G. cのページへのリンク