2011-06-04 12 views
20

Tengo algunas preguntas sobre el algoritmo GC: Primero, cuando utilizamos los parámetros tales como UseSerialGC, UseParallelGC, UseParallelOldGC y demás, especificamos un algoritmo GC. Cada uno de ellos puede hacer GC en todas las generaciones, ¿verdad?¿cuál es la diferencia entre ParallelGC y ParallelOldGC?

Por ejemplo, si utilizo "java -XX: + UseSerialGC", todas las generaciones utilizarán el GC serial como el Algoritmo GC.

Segundo ¿Puedo usar ParallelGC en Old Gneneration y usar SerialGC en la generación Yong?

Lo último como título ¿Cuál es la diferencia entre ParallelGC y ParallelOldGC?

Respuesta

16

Tome un vistazo a la HotSpot VM Options:

-XX: + UseParallelGC = Uso de recolección de elementos para la neutraliza. (Introducido en 1.4.1).

-XX: + UseParallelOldGC = Use la recolección de basura paralela para las colecciones completas. Habilitar esta opción establece automáticamente -XX: + UseParallelGC. (Introducido en 5.0 actualización 6.)

donde Scavenges = Young generation GC.

+0

¿En qué página responde Q's 1 y 2? No puedo verlo! –

+0

gracias. ¿Y cuál es la diferencia entre ParNew GC y Parallel GC? Sé que ya hay una respuesta en stackOverflow. Pero no entendí. ¿Puedes ayudarme? – leo

+1

La primera tabla muestra los diferentes algoritmos de colectores de GC para las generaciones jóvenes y viejas. http://blog.ragozin.info/2011/07/hotspot-jvm-garbage-collection-options.html – Nathan

10

Para responder a su pregunta, debemos comprender un algoritmo diferente. JVM proporciona cuatro recolecciones de basura.

  • La basura serie colector colector
  • El rendimiento
  • El colector CMS
  • El colector G1

El colector serie está habilitado mediante el uso de la -XX: + bandera UseSerialGC (aunque por lo general, es el valor predeterminado en los casos en que podría ser utilizado).

El recolector de basura de serie es el colector por defecto si la aplicación se ejecuta en un equipo de tipo cliente (JVM de 32 bits en Windows o singleprocessor máquinas) .El colector serie utiliza un solo hilo para procesar el montón. Detiene todos los hilos de la aplicación a medida que se procesa el montón (para un GC menor o completo). Durante un GC completo, será totalmente compacto de la generación anterior.

UseParallelGC, UseParallelOldGC son parte del colector de rendimiento, que es el predeterminado para las máquinas Unix multi-CPU y cualquier JVM de 64 bits.

El colector de rendimiento utiliza varios subprocesos para recopilar la generación joven, que hace GC menores mucho más rápido que cuando se utiliza el colector de serie. El colector de rendimiento puede usar varios hilos para procesar también la generación anterior. Ese es el comportamiento predeterminado de en JDK 7u4 y versiones posteriores, y ese comportamiento se puede habilitar en las JVM anteriores de JDK 7 especificando el indicador -XX: + UseParallelOldGC. Debido a que usa múltiples hilos, , el colector de rendimiento a menudo se denomina colector paralelo.

Puesto que es el valor por defecto en la mayoría de situaciones en las que se utilizaría, no tiene que ser liberada la. Para activarlo, donde es necesario, utilice las banderas -XX: + UseParallelGC -XX: + UseParallelOldGC

--Pinaki

+0

¿Por qué alguien usaría -XX: + UseParallelGC sobre -XX: + UseParallelOldGC, ya que el primero ya implica que tienen hilos de sobra – Abdul

1

Esos son dos políticas gc aplicadas a diferentes regiones de un montón de Java es decir, nuevo y viejo generaciones Aquí hay un enlace que ayuda a aclarar qué opciones implican otras. Es útil especialmente al comenzar a entender lo que está recibiendo cuando especifica, por ejemplo, decir ParallelOldGC o ParNewGC. http://www.fasterj.com/articles/oraclecollectors1.shtml

Cuestiones relacionadas