GC 클래스

정의

사용하지 않는 메모리를 자동적으로 회수하는 서비스인 시스템 가비지 수집기를 제어합니다.Controls the system garbage collector, a service that automatically reclaims unused memory.

public ref class GC abstract sealed
public static class GC
type GC = class
Public Class GC
상속
GC

예제

다음 예제에서는 몇 가지 GC 메서드를 사용 하 여 생성 및 사용 되지 않는 개체의 블록에 대 한 메모리 정보를 가져오고 콘솔에 인쇄 하 합니다.The following example uses several GC methods to get generation and memory information about a block of unused objects and print it to the console. 사용 되지 않는 개체는 다음 수집 하 고 총 메모리 표시 됩니다.The unused objects are then collected, and the resulting memory totals are displayed.

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

설명

가비지 수집기가 할당 하 고 관리 되는 메모리 해제를 제어 하는 공용 언어 런타임 구성 요소입니다.The garbage collector is a common language runtime component that controls the allocation and release of managed memory. 이 클래스의 메서드는 개체와 개체에 의해 할당 된 리소스를 해제 하는 경우 가비지 컬렉션이 수행 될 때 영향을 줍니다.The methods in this class influence when garbage collection is performed on an object and when resources allocated by an object are released. 이 클래스의 속성 시스템 및 연령 범주를 생성, 개체에 할당 된 메모리의 총 사용 가능한 메모리에 대 한 정보를 제공 합니다.Properties in this class provide information about the total amount of memory available in the system and the age category, or generation, of memory allocated to an object.

가비지 수집기를 추적 하 고 관리 되는 메모리에 할당 된 개체를 회수 합니다.The garbage collector tracks and reclaims objects allocated in managed memory. 정기적으로 가비지 수집기 참조가 유효 하지 않은 개체에 할당 된 메모리를 회수 하기 위해 가비지 수집을 수행 합니다.Periodically, the garbage collector performs garbage collection to reclaim memory allocated to objects for which there are no valid references. 가비지 수집 사용 가능한 메모리를 사용 하 여 메모리에 대 한 요청을 충족할 수 없는 경우 자동으로 발생 합니다.Garbage collection happens automatically when a request for memory cannot be satisfied using available free memory. 또는 애플리케이션 사용 하 여 가비지 컬렉션 강제할 수는 Collect 메서드.Alternatively, an application can force garbage collection using the Collect method.

가비지 수집은 다음 단계로 구성 됩니다.Garbage collection consists of the following steps:

  1. 가비지 수집기는 관리 코드에서 참조 되는 관리 되는 개체를 검색 합니다.The garbage collector searches for managed objects that are referenced in managed code.

  2. 가비지 수집기가 참조 되지 않는 개체를 종료 하려고 시도 합니다.The garbage collector tries to finalize objects that are not referenced.

  3. 가비지 수집기는 참조 되지 않는 개체를 해제 하 고 해당 메모리를 회수 합니다.The garbage collector frees objects that are not referenced and reclaims their memory.

이 항목에는 다음 단원이 포함되어 있습니다.This topic includes the following sections:

가비지 수집기 및 관리 되지 않는 리소스 The garbage collector and unmanaged resources
개체 에이징 및 세대 Object aging and generations
가비지 수집을 허용 하지 않습니다.Disallowing garbage collection

가비지 수집기 및 관리 되지 않는 리소스The garbage collector and unmanaged resources

수집 중에 관리 코드에서 개체에 대 한 하나 이상의 참조를 찾으면 가비지 수집기는 개체를 해제 됩니다.During a collection, the garbage collector will not free an object if it finds one or more references to the object in managed code. 그러나 가비지 수집기 비관리 코드에서 개체에 대 한 참조를 인식 하지 못하고 이렇게에서 명시적으로 금지 하지 않는 한 관리 되지 않는 코드에서 단독으로 사용 되지 않는 개체를 해제할 수 있습니다.However, the garbage collector does not recognize references to an object from unmanaged code, and might free objects that are being used exclusively in unmanaged code unless explicitly prevented from doing so. KeepAlive 메서드 가비지 수집기가 관리 되지 않는 코드에서 사용에서 된 개체를 수집 하지 못하도록 하는 메커니즘을 제공 합니다.The KeepAlive method provides a mechanism that prevents the garbage collector from collecting objects that are still in use in unmanaged code.

관리 되는 메모리 할당 외에도 가비지 수집의 구현 파일 핸들, 데이터베이스 연결 등의 개체에서 보유 한 리소스에 대 한 정보를 유지 하지 않습니다.Aside from managed memory allocations, implementations of the garbage collector do not maintain information about resources held by an object, such as file handles or database connections. 형식에서 형식의 인스턴스는 회수 해 넣기 전에 릴리스해야 합니다. 관리 되지 않는 리소스를 사용 하는 경우 형식 종료자를 구현할 수 있습니다.When a type uses unmanaged resources that must be released before instances of the type are reclaimed, the type can implement a finalizer.

그러나 대부분의 경우 종료자를 재정의 하 여 구현 됩니다 합니다 Object.Finalize 메서드를 C# 또는 c + +로 작성 된 형식은 소멸자의 재정의로 설정 하는 컴파일러를 구현 하는 Object.Finalize합니다.In most cases, finalizers are implemented by overriding the Object.Finalize method; however, types written in C# or C++ implement destructors, which compilers turn into an override of Object.Finalize. 대부분의 경우에서 개체는 종료 자가 있으면 가비지 수집기가 호출 개체를 해제 하기 전에 합니다.In most cases, if an object has a finalizer, the garbage collector calls it prior to freeing the object. 그러나 가비지 수집기는 모든 상황;에서 종료자를 호출 하는 데 필요한 예를 들어를 SuppressFinalize 메서드는 명시적으로 개체의 종료 자가 호출 되지 않도록 합니다.However, the garbage collector is not required to call finalizers in all situations; for example, the SuppressFinalize method explicitly prevents an object's finalizer from being called. 또한 가비지 수집기는 특정 스레드를 사용 하 여 개체를 종료 하거나 서로 참조 하지만 그렇지 않은 가비지 컬렉션에 대해 사용할 수 있는 개체에 대 한 종료 자가 호출 하는 순서를 보장 필요가 없습니다.Also, the garbage collector is not required to use a specific thread to finalize objects, or guarantee the order in which finalizers are called for objects that reference each other but are otherwise available for garbage collection.

특정 시간에 리소스를 해제 해야 합니다는 여기서 시나리오에서는 클래스에서 구현할 수는 IDisposable 포함 하는 인터페이스를 IDisposable.Dispose 리소스 관리 및 정리 작업을 수행 하는 메서드.In scenarios where resources must be released at a specific time, classes can implement the IDisposable interface, which contains the IDisposable.Dispose method that performs resource management and cleanup tasks. 구현 하는 클래스 Dispose 지정 해야 합니다는 클래스 계약의 일부로 개체를 정리 하려면 메서드를 호출 하는 클래스 소비자 경우.Classes that implement Dispose must specify, as part of their class contract, if and when class consumers call the method to clean up the object. 가비지 수집기가 호출 하지 않으면, 기본적으로 Dispose 메서드 하지만 구현의 Dispose 메서드 메서드를 호출할 수는 GC 가비지 수집기의 종료 동작을 사용자 지정 클래스입니다.The garbage collector does not, by default, call the Dispose method; however, implementations of the Dispose method can call methods in the GC class to customize the finalization behavior of the garbage collector.

개체 종료 및 dispose 패턴에 대 한 자세한 내용은 참조 하세요. 관리 되지 않는 리소스 정리합니다.For more information on object finalization and the dispose pattern, see Cleaning Up Unmanaged Resources.

개체 에이징 및 세대Object aging and generations

공용 언어 런타임의 가비지 수집기는 세대를 사용 하 여 개체 에이징을 지원 합니다.The garbage collector in the common language runtime supports object aging using generations. 생성은 메모리에서 개체의 상대적 기간의 측정 단위입니다.A generation is a unit of measure of the relative age of objects in memory. 개체의 보존 기간을 세대 번호는 개체가 속한 생성을 나타냅니다.The generation number, or age, of an object indicates the generation to which an object belongs. 만든 개체 자세한 최근에 최신 세대의 일부인 하며 애플리케이션 수명 동안의 앞부분에서 만든 개체 주기 보다 더 낮은 세대 번호입니다.Objects created more recently are part of newer generations, and have lower generation numbers than objects created earlier in the application life cycle. 최신 세대의 개체는 세대 0에.Objects in the most recent generation are in generation 0. 이 구현의 가비지 수집기는 세 가지 개체 세대가, 0, 1 및 2 세대를 지원합니다.This implementation of the garbage collector supports three generations of objects, generations 0, 1, and 2. 값을 검색할 수는 MaxGeneration 시스템에서 지원 되는 가장 큰 세대 번호를 확인 하는 속성입니다.You can retrieve the value of the MaxGeneration property to determine the maximum generation number supported by the system.

개체 에이징 가비지 수집기가 모든 세대를 평가 하는 것이 아니라 세대의 특정 집합에서 가비지 수집의 대상 애플리케이션을 있습니다.Object aging allows applications to target garbage collection at a specific set of generations rather than requiring the garbage collector to evaluate all generations. 오버 로드는 Collect 포함 하는 메서드를 generation 매개 변수를 사용 하면 가장 오래 된 세대 가비지 수집을 지정할 수 있도록 합니다.Overloads of the Collect method that include a generation parameter allow you to specify the oldest generation to be garbage collected.

가비지 수집을 허용 하지 않습니다.Disallowing garbage collection

부터 .NET Framework 4.6.NET Framework 4.6, 가비지 수집기를 비 GC 지역 대기 시간 모드 중요 경로에 가비지 컬렉션 수 성능이 저하 될 앱의 실행 하는 동안 사용할 수 있는 지원 합니다.Starting with the .NET Framework 4.6.NET Framework 4.6, the garbage collector supports a no GC region latency mode that can be used during the execution of critical paths in which garbage collection can adversely affect an app's performance. 비 GC 지역 대기 시간 모드는 가비지 수집기에서 문제 없이 함께 할당 될 수 있는 메모리 양을 지정 해야 합니다.The no GC region latency mode requires that you specify an amount of memory that can be allocated without interference from the garbage collector. 런타임에서 해당 메모리에 할당 하는 경우 중요 경로에서 코드가 실행 되는 동안 런타임 가비지 수집을 수행 하지 됩니다.If the runtime can allocate that memory, the runtime will not perform a garbage collection while code in the critical path is executing.

오버 로드 중 하나를 호출 하 여 없습니다 GC 영역의 중요 한 경로의 시작 부분을 정의 합니다 TryStartNoGCRegion합니다.You define the beginning of the critical path of the no GC region by calling one of the overloads of the TryStartNoGCRegion. 호출 하 여 중요 한 해당 경로의 끝을 지정 합니다 EndNoGCRegion 메서드.You specify the end of its critical path by calling the EndNoGCRegion method.

에 대 한 호출을 중첩할 수 없습니다는 TryStartNoGCRegion 메서드를 호출 해야 합니다.는 EndNoGCRegion 런타임에서 비 GC 지역 대기 시간 모드에서 현재 경우 메서드.You cannot nest calls to the TryStartNoGCRegion method, and you should only call the EndNoGCRegion method if the runtime is currently in no GC region latency mode. 즉, 호출 하면 안 TryStartNoGCRegion 여러 번 (첫 번째 메서드 호출 후 후속 호출은 성공 하지 것입니다), 호출 되어야 하 고 EndNoGCRegion 첫 번째 호출 해 서 성공 하려면 TryStartNoGCRegion 성공 합니다.In other words, you should not call TryStartNoGCRegion multiple times (after the first method call, subsequent calls will not succeed), and you should not expect calls to EndNoGCRegion to succeed just because the first call to TryStartNoGCRegion succeeded.

속성

MaxGeneration

시스템에서 현재 지원하는 가장 큰 세대 번호를 가져옵니다.Gets the maximum number of generations that the system currently supports.

메서드

AddMemoryPressure(Int64)

가비지 수집을 예약할 때 고려해야 할 많은 양의 관리되지 않는 메모리 할당을 런타임에 알립니다.Informs the runtime of a large allocation of unmanaged memory that should be taken into account when scheduling garbage collection.

CancelFullGCNotification()

가비지 컬렉션 알림의 등록을 취소합니다.Cancels the registration of a garbage collection notification.

Collect()

모든 세대의 가비지 컬렉션을 즉시 수행합니다.Forces an immediate garbage collection of all generations.

Collect(Int32)

0세대에서 지정된 세대까지 가비지 수집을 즉시 수행합니다.Forces an immediate garbage collection from generation 0 through a specified generation.

Collect(Int32, GCCollectionMode)

GCCollectionMode 값에 지정된 시간에 0세대에서 지정된 세대까지 가비지 컬렉션을 수행합니다.Forces a garbage collection from generation 0 through a specified generation, at a time specified by a GCCollectionMode value.

Collect(Int32, GCCollectionMode, Boolean)

수집이 차단되어야 할지 여부를 지정하는 값을 사용하여 GCCollectionMode 값으로 지정된 시간에 0세대에서 지정된 세대까지 가비지 수집을 강제로 실행합니다.Forces a garbage collection from generation 0 through a specified generation, at a time specified by a GCCollectionMode value, with a value specifying whether the collection should be blocking.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

컬렉션이 차단되고 압축되어야 할지 여부를 지정하는 값을 사용하여 GCCollectionMode 값으로 지정된 시간에 0세대에서 지정된 세대까지 가비지 컬렉션을 강제로 실행합니다.Forces a garbage collection from generation 0 through a specified generation, at a time specified by a GCCollectionMode value, with values that specify whether the collection should be blocking and compacting.

CollectionCount(Int32)

지정된 세대의 개체에 대해 가비지 수집이 수행된 횟수를 반환합니다.Returns the number of times garbage collection has occurred for the specified generation of objects.

EndNoGCRegion()

비 GC 지역 대기 시간 모드를 종료합니다.Ends the no GC region latency mode.

GetAllocatedBytesForCurrentThread()

수명 기간이 시작된 이후 현재 스레드에 할당된 바이트의 총 수를 가져옵니다.Gets the total number of bytes allocated to the current thread since the beginning of its lifetime.

GetGCMemoryInfo()

가비지 수집 메모리 정보를 가져옵니다.Gets garbage collection memory information.

GetGeneration(Object)

지정된 개체의 현재 세대 번호를 반환합니다.Returns the current generation number of the specified object.

GetGeneration(WeakReference)

지정된 약한 참조의 대상의 현재 세대 번호를 반환합니다.Returns the current generation number of the target of a specified weak reference.

GetTotalAllocatedBytes(Boolean)

프로세스 수명 동안 할당된 바이트 수를 가져옵니다.Gets a count of the bytes allocated over the lifetime of the process.

GetTotalMemory(Boolean)

현재 할당되었다고 여겨지는 바이트 수를 검색합니다.Retrieves the number of bytes currently thought to be allocated. 매개 변수는 시스템에서 가비지를 수집하고 개체를 종료할 수 있도록 이 메서드가 반환되기 전에 잠시 동안 대기할 수 있는지 여부를 나타냅니다.A parameter indicates whether this method can wait a short interval before returning, to allow the system to collect garbage and finalize objects.

KeepAlive(Object)

지정된 개체를 참조하여 현재 루틴이 시작된 지점에서 이 메서드가 호출된 지점까지 가비지 컬렉션이 불가능하도록 합니다.References the specified object, which makes it ineligible for garbage collection from the start of the current routine to the point where this method is called.

RegisterForFullGCNotification(Int32, Int32)

전체 가비지 수집에 유리한 조건인 경우와 수집이 완료된 경우에 가비지 수집 알림이 발생하도록 지정합니다.Specifies that a garbage collection notification should be raised when conditions favor full garbage collection and when the collection has been completed.

RemoveMemoryPressure(Int64)

관리되는 메모리가 해제되었고 가비지 수집을 예약할 때 더 이상 고려할 필요가 없다고 런타임에 알립니다.Informs the runtime that unmanaged memory has been released and no longer needs to be taken into account when scheduling garbage collection.

ReRegisterForFinalize(Object)

SuppressFinalize(Object)가 이전에 호출된 지정된 개체에 대해 시스템에서 종료자를 호출하도록 요청합니다.Requests that the system call the finalizer for the specified object for which SuppressFinalize(Object) has previously been called.

SuppressFinalize(Object)

공용 언어 런타임에서 지정된 개체에 대해 종료자를 호출하지 않도록 요청합니다.Requests that the common language runtime not call the finalizer for the specified object.

TryStartNoGCRegion(Int64)

지정된 양의 메모리를 사용할 수 있는 경우 중요한 경로를 실행하는 동안에는 가비지 수집이 허용되지 않습니다.Attempts to disallow garbage collection during the execution of a critical path if a specified amount of memory is available.

TryStartNoGCRegion(Int64, Boolean)

지정된 양의 메모리를 사용할 수 있는 경우 중요한 경로를 실행하는 동안 가비지 수집이 허용되지 않고, 초기에 사용할 수 있는 메모리가 충분하지 않은 경우 가비지 수집기가 전체 차단 가비지 수집 수행 여부를 제어합니다.Attempts to disallow garbage collection during the execution of a critical path if a specified amount of memory is available, and controls whether the garbage collector does a full blocking garbage collection if not enough memory is initially available.

TryStartNoGCRegion(Int64, Int64)

큰 개체 힙 및 작은 개체 힙에 지정된 양의 메모리를 사용할 수 있는 경우 중요한 경로를 실행하는 동안에는 가비지 수집이 허용되지 않습니다.Attempts to disallow garbage collection during the execution of a critical path if a specified amount of memory is available for the large object heap and the small object heap.

TryStartNoGCRegion(Int64, Int64, Boolean)

큰 개체 힙 및 작은 개체 힙에 지정된 양의 메모리를 사용할 수 있는 경우 중요한 경로를 실행하는 동안 가비지 수집이 허용되지 않고, 초기에 사용할 수 있는 메모리가 충분하지 않은 경우 가비지 수집기가 전체 차단 가비지 수집 수행 여부를 제어합니다.Attempts to disallow garbage collection during the execution of a critical path if a specified amount of memory is available for the large object heap and the small object heap, and controls whether the garbage collector does a full blocking garbage collection if not enough memory is initially available.

WaitForFullGCApproach()

공용 언어 런타임에 의한 전체 차단 가비지 컬렉션이 임박하고 있는지 여부를 확인하기 위한 등록된 알림의 상태를 반환합니다.Returns the status of a registered notification for determining whether a full, blocking garbage collection by the common language runtime is imminent.

WaitForFullGCApproach(Int32)

공용 언어 런타임에 의한 전체 차단 가비지 컬렉션이 임박하고 있는지 여부를 확인하기 위한 등록된 알림의 상태를 지정된 제한 시간 내에 반환합니다.Returns, in a specified time-out period, the status of a registered notification for determining whether a full, blocking garbage collection by the common language runtime is imminent.

WaitForFullGCComplete()

공용 언어 런타임에 의한 전체 차단 가비지 수집이 완료되었는지 여부를 확인하기 위한 등록된 알림의 상태를 반환합니다.Returns the status of a registered notification for determining whether a full, blocking garbage collection by the common language runtime has completed.

WaitForFullGCComplete(Int32)

공용 언어 런타임에 의한 전체 차단 가비지 컬렉션이 완료되었는지 여부를 확인하기 위한 등록된 알림의 상태를 지정된 제한 시간 내에 반환합니다.Returns, in a specified time-out period, the status of a registered notification for determining whether a full, blocking garbage collection by common language the runtime has completed.

WaitForPendingFinalizers()

종료자의 큐를 처리하는 스레드에서 해당 큐를 비울 때까지 현재 스레드를 일시 중단합니다.Suspends the current thread until the thread that is processing the queue of finalizers has emptied that queue.

적용 대상

추가 정보