in

Conceptos básicos de recolección de basura de Java

Ahora conoce los conceptos básicos de la recolección de basura y ha observado al recolector de basura en acción en una aplicación de muestra. En esta sección, aprenderá sobre los recolectores de basura disponibles para Java y los modificadores de línea de comando que necesita para seleccionarlos.

Switches comunes relacionados con el montón

Hay muchos modificadores de línea de comandos diferentes que se pueden utilizar con Java. Esta sección describe algunos de los interruptores más comúnmente usados ​​que también se usan en este OBE.

Cambiar Descripción
-Xms Establece el tamaño de pila inicial para cuando se inicia la JVM.
-Xmx Establece el tamaño máximo del montón.
-Xmn Establece el tamaño de la generación joven.
-XX: PermSize Establece el tamaño inicial de la generación permanente.
-XX: MaxPermSize Establece el tamaño máximo de la generación permanente.

El GC en serie

El recolector en serie es el predeterminado para las máquinas de estilo cliente en Java SE 5 y 6. Con el recolector en serie, tanto las recolecciones de basura menores como las principales se realizan en serie (utilizando una única CPU virtual). Además, utiliza un método de recopilación de marcas compactas. Este método mueve la memoria más antigua al principio del montón para que las nuevas asignaciones de memoria se conviertan en un solo fragmento continuo de memoria al final del montón. Esta compactación de la memoria acelera la asignación de nuevos fragmentos de memoria al montón.

Casos de uso

Serial GC es el recolector de basura preferido para la mayoría de las aplicaciones que no tienen requisitos de tiempo de pausa bajos y se ejecutan en máquinas de estilo cliente. Aprovecha un solo procesador virtual para el trabajo de recolección de basura (por lo tanto, su nombre). Aún así, en el hardware actual, Serial GC puede administrar de manera eficiente una gran cantidad de aplicaciones no triviales con unos pocos cientos de MB de montón de Java, con pausas relativamente cortas en el peor de los casos (alrededor de un par de segundos para recolecciones de basura completas).

Otro uso popular de Serial GC es en entornos donde se ejecuta una gran cantidad de JVM en la misma máquina (en algunos casos, ¡más JVM que procesadores disponibles!). En tales entornos, cuando una JVM realiza una recolección de basura, es mejor usar solo un procesador para minimizar la interferencia en las JVM restantes, incluso si la recolección de basura puede durar más. Y el Serial GC encaja muy bien en esta compensación.

Finalmente, con la proliferación de hardware integrado con memoria mínima y pocos núcleos, el Serial GC podría regresar.

Interruptores de línea de comando

Para habilitar el uso del recopilador en serie:
-XX:+UseSerialGC

Aquí hay una línea de comando de muestra para iniciar el Java2Demo:
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar c:javademosdemojfcJava2DJava2demo.jar

El GC paralelo

El recolector de basura paralelo utiliza varios subprocesos para realizar la recolección de basura de generación joven. De forma predeterminada, en un host con N CPU, el recolector de basura paralelo usa N subprocesos del recolector de basura en la colección. El número de subprocesos del recolector de basura se puede controlar con las opciones de la línea de comandos:
-XX:ParallelGCThreads=<desired number>

En un host con una sola CPU, se utiliza el recolector de basura predeterminado incluso si se ha solicitado el recolector de basura paralelo. En un host con dos CPU, el recolector de basura paralelo generalmente funciona tan bien como el recolector de basura predeterminado y se puede esperar una reducción en los tiempos de pausa del recolector de basura de la generación joven en hosts con más de dos CPU. Parallel GC viene en dos sabores.

Casos de uso

El recopilador paralelo también se denomina recopilador de rendimiento. Dado que puede utilizar varias CPU para acelerar el rendimiento de la aplicación. Este recopilador debe usarse cuando se necesita hacer mucho trabajo y se aceptan pausas largas. Por ejemplo, procesamiento por lotes como imprimir informes o facturas o realizar una gran cantidad de consultas a la base de datos.

-XX:+UseParallelGC

Con esta opción de línea de comando, obtiene un colector de generación joven de subprocesos múltiples con un colector de generación anterior de un solo subproceso. La opción también hace compactación de un solo subproceso de generación anterior.

Aquí hay una línea de comando de muestra para iniciar el Java2Demo:
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelGC -jar c:javademosdemojfcJava2DJava2demo.jar

-XX:+UseParallelOldGC

Con el -XX:+UseParallelOldGC Opción, el GC es un colector de generación joven multiproceso y un colector de generación antigua multiproceso. También es un colector de compactación multiproceso. HotSpot realiza compactación solo en la generación anterior. La generación joven en HotSpot se considera un coleccionista de copias; por lo tanto, no hay necesidad de compactación.

Compactar describe el acto de mover objetos de manera que no haya agujeros entre los objetos. Después de un barrido de recolección de basura, es posible que queden huecos entre los objetos vivos. La compactación mueve los objetos para que no queden agujeros. Es posible que un recolector de basura sea un recolector no compactador. Por lo tanto, la diferencia entre un recolector paralelo y un recolector compactador paralelo podría ser que este último compacta el espacio después de un barrido de recolección de basura. El primero no lo haría.

Aquí hay una línea de comando de muestra para iniciar el Java2Demo:
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseParallelOldGC -jar c:javademosdemojfcJava2DJava2demo.jar

El recopilador Concurrent Mark Sweep (CMS)

El recopilador Concurrent Mark Sweep (CMS) (también denominado recopilador concurrente de pausa baja) recopila la generación titular. Intenta minimizar las pausas debidas a la recolección de basura haciendo la mayor parte del trabajo de recolección de basura al mismo tiempo que los subprocesos de la aplicación. Normalmente, el recopilador de pausa baja concurrente no copia ni compacta los objetos en vivo. La recolección de basura se realiza sin mover los objetos activos. Si la fragmentación se convierte en un problema, asigne un montón más grande.

Nota: El colector CMS en la generación joven utiliza el mismo algoritmo que el colector paralelo.

Casos de uso

El recolector de CMS debe usarse para aplicaciones que requieren tiempos de pausa bajos y pueden compartir recursos con el recolector de basura. Los ejemplos incluyen una aplicación de interfaz de usuario de escritorio que responde a eventos, un servidor web que responde a una solicitud o una base de datos que responde a consultas.

Interruptores de línea de comando

Para habilitar el uso del recopilador de CMS:
-XX:+UseConcMarkSweepGC
y para establecer el número de subprocesos, use:
-XX:ParallelCMSThreads=<n>

Aquí hay una línea de comando de muestra para iniciar el Java2Demo:
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=2 -jar c:javademosdemojfcJava2DJava2demo.jar

El recolector de basura G1

El recolector de basura Garbage First o G1 está disponible en Java 7 y está diseñado para ser el reemplazo a largo plazo del recolector de CMS. El recolector G1 es un recolector de basura de pausa baja en paralelo, concurrente y de compactación incremental que tiene un diseño bastante diferente de los otros recolectores de basura descritos anteriormente. Sin embargo, la discusión detallada está más allá del alcance de este OBE.

Interruptores de línea de comando

Para habilitar el uso del recopilador G1:
-XX:+UseG1GC

Aquí hay una línea de comando de muestra para iniciar el Java2Demo:
java -Xmx12m -Xms3m -XX:+UseG1GC -jar c:javademosdemojfcJava2DJava2demo.jar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0oiET6uWhpAuDk25C

Maestría en Ciencias de la Computación en línea de la UIUC: una autopsia personal

Operador SQL IN