Recolección de elementos no utilizados en segundo planoBackground garbage collection

En la recolección de elementos no utilizados (GC) en segundo plano, las generaciones efímeras (0 y 1) se recolectan según sea necesario mientras la recolección de la generación 2 está en curso.In background garbage collection (GC), ephemeral generations (0 and 1) are collected as needed while the collection of generation 2 is in progress. La recolección de elementos no utilizados en segundo plano se realiza en uno o más subprocesos dedicados, en función de si se trata de GC en segundo plano o de servidor, y solo se aplica a las recolecciones de la generación 2.Background garbage collection is performed on one or more dedicated threads, depending on whether it's background or server GC, and applies only to generation 2 collections.

La recolección de elementos no utilizados en segundo plano está habilitada de forma predeterminada.Background garbage collection is enabled by default. Se puede habilitar o deshabilitar con la opción de configuración gcConcurrent o la opción System.GC.Concurrent en aplicaciones de .NET Core.It can be enabled or disabled with the gcConcurrent configuration setting in .NET Framework apps or the System.GC.Concurrent setting in .NET Core apps.

Nota

La recolección de elementos no utilizados en segundo plano reemplaza la recolección simultánea de elementos no utilizados en .NET Framework 4 y versiones posteriores.Background garbage collection replaces concurrent garbage collection and is available in .NET Framework 4 and later versions. En .NET Framework 4, solo se admite para la recolección de elementos no utilizados de estación de trabajo.In .NET Framework 4, it's supported only for workstation garbage collection. A partir de .NET Framework 4.5, la recolección de elementos no utilizados en segundo plano está disponible para estaciones de trabajo y servidores.Starting with .NET Framework 4.5, background garbage collection is available for both workstation and server garbage collection.

Una recolección de las generaciones efímeras durante una recolección de elementos no utilizados en segundo plano se denomina recolección de elementos no utilizados en primer plano.A collection on ephemeral generations during background garbage collection is known as foreground garbage collection. Cuando se producen recolecciones de elementos no utilizados en primer plano, se suspenden todos los subprocesos administrados.When foreground garbage collections occur, all managed threads are suspended.

Cuando hay en curso una recolección de elementos no utilizados en segundo plano y se han asignado suficientes objetos en la generación 0, el CLR realiza una recolección de elementos no utilizados en primer plano de las generaciones 0 o 1.When background garbage collection is in progress and you've allocated enough objects in generation 0, the CLR performs a generation 0 or generation 1 foreground garbage collection. El subproceso de recolección de elementos no utilizados en segundo plano dedicado realiza comprobaciones en puntos seguros frecuentes para determinar si existe alguna solicitud de recolección de elementos no utilizados en primer plano.The dedicated background garbage collection thread checks at frequent safe points to determine whether there is a request for foreground garbage collection. Si la hay, la recolección en segundo plano se suspende para que la recolección de elementos no utilizados en primer plano se pueda llevar a cabo.If there is, the background collection suspends itself so that foreground garbage collection can occur. Una vez completada la recolección de elementos no utilizados en primer plano, se reanudan los subprocesos de recolección de elementos no utilizados en segundo plano dedicados y los subprocesos del usuario.After the foreground garbage collection is completed, the dedicated background garbage collection threads and user threads resume.

La recolección de elementos no utilizados en segundo plano quita las restricciones de asignación impuestas por la recolección simultánea de elementos no utilizados, porque se pueden producir recolecciones de elementos no utilizados efímeras durante una recolección en segundo plano.Background garbage collection removes allocation restrictions imposed by concurrent garbage collection, because ephemeral garbage collections can occur during background garbage collection. La recolección de elementos no utilizados en segundo plano puede eliminar objetos inactivos procedentes de generaciones efímeras.Background garbage collection can remove dead objects in ephemeral generations. También puede expandir el montón si es necesario durante una recolección de elementos no utilizados de generación 1.It can also expand the heap if needed during a generation 1 garbage collection.

Recolección de elementos no utilizados de estación de trabajo en segundo plano frente a GC de servidorBackground workstation vs. server GC

A partir de .NET Framework 4,5, la recolección de elementos no utilizados en segundo plano está disponible para la recolección de elementos no utilizados de servidor.Starting with .NET Framework 4.5, background garbage collection is available for server GC. La recolección de elementos no utilizados en segundo plano es el modo predeterminado para la recolección de elementos no utilizados de servidor.Background GC is the default mode for server garbage collection.

La recolección de elementos no utilizados de servidor en segundo plano funciona de forma similar a la recolección de elementos no utilizados de estación de trabajo en segundo plano, pero hay algunas diferencias:Background server garbage collection functions similarly to background workstation garbage collection, but there are a few differences:

  • La recolección de elementos no utilizados de estación de trabajo en segundo plano usa un subproceso dedicado de recolección de elementos no utilizados en segundo plano, mientras que la recolección de elementos no utilizados de servidor en segundo plano utiliza varios subprocesos.Background workstation garbage collection uses one dedicated background garbage collection thread, whereas background server garbage collection uses multiple threads. Normalmente, hay un subproceso dedicado para cada procesador lógico.Typically, there's a dedicated thread for each logical processor.

  • A diferencia del subproceso de recolección de elementos no utilizados de estación de trabajo en segundo plano, no se agota el tiempo de espera de los subprocesos de recolección de elementos no utilizados de servidor en segundo plano.Unlike the workstation background garbage collection thread, the background server GC threads do not time out.

En la siguiente ilustración se muestra la recolección de elementos no utilizados de estación de trabajo en segundo plano realizada en un subproceso dedicado independiente:The following illustration shows background workstation garbage collection performed on a separate, dedicated thread:

Recolección de elementos no utilizados de estación de trabajo en segundo plano

En la siguiente ilustración se muestra la recolección de elementos no utilizados de servidor en segundo plano realizada en un subproceso dedicado independiente:The following illustration shows background server garbage collection performed on separate, dedicated threads:

Recolección de elementos no utilizados de servidor en segundo plano

Recolección de elementos no utilizados simultáneaConcurrent garbage collection

Sugerencia

Esta sección es aplicable a:This section applies to:

  • .NET Framework 3.5 y versiones anteriores para la recolección de elementos no utilizados de estación de trabajo.NET Framework 3.5 and earlier for workstation garbage collection
  • .NET Framework 4 y versiones anteriores para la recolección de elementos no utilizados de servidor.NET Framework 4 and earlier for server garbage collection

La recolección de elementos no utilizados en segundo plano reemplaza a la de elementos no utilizados simultánea en versiones posteriores.Concurrent garbage is replaced by background garbage collection in later versions.

En la recolección de elementos no utilizados de estación de trabajo o de servidor, se puede habilitar la recolección simultánea de elementos no utilizados, que permite ejecutar subprocesos de manera simultánea con un subproceso dedicado que realiza la recolección de elementos no utilizados durante la mayor parte del tiempo que dura la recolección.In workstation or server garbage collection, you can enable concurrent garbage collection, which enables threads to run concurrently with a dedicated thread that performs the garbage collection for most of the duration of the collection. Esta opción solo afecta a las recolecciones de elementos no utilizados de la generación 2; las generaciones 0 y 1 no son nunca simultáneas porque finalizan rápidamente.This option affects only garbage collections in generation 2; generations 0 and 1 are always non-concurrent because they finish fast.

La recolección de elementos no utilizados simultánea permite mayor capacidad de respuesta de las aplicaciones interactivas, pues minimiza las pausas en una recolección.Concurrent garbage collection enables interactive applications to be more responsive by minimizing pauses for a collection. Los subprocesos administrados pueden continuar ejecutándose la mayoría del tiempo mientras se ejecuta el subproceso de recolección de elementos no utilizados simultánea.Managed threads can continue to run most of the time while the concurrent garbage collection thread is running. Este diseño se traduce en pausas más cortas mientras se produce una recolección de elementos no utilizados.This design results in shorter pauses while a garbage collection is occurring.

La recolección de elementos no utilizados simultánea se realiza en un subproceso dedicado.Concurrent garbage collection is performed on a dedicated thread. De forma predeterminada, el CLR ejecuta la recolección de elementos no utilizados de estación de trabajo con la simultaneidad habilitada en equipos de un solo procesador y de varios procesadores.By default, the CLR runs workstation garbage collection with concurrent garbage collection enabled on both single-processor and multi-processor computers.

En la siguiente se muestra la recolección de elementos no utilizados simultánea realizada en un subproceso dedicado independiente.The following illustration shows concurrent garbage collection performed on a separate dedicated thread.

Subprocesos de recolección simultánea de elementos no utilizados

Vea tambiénSee also