2011-12-03 16 views
29

Me pregunto cuál es el estado oficial del recopilador "basura primero" (G1) en el lanzamiento de JDK 7. Me gustaría usar G1 como una alternativa de pausa baja de gc a CMS, pero solo si realmente puedo confiar en su robustez.¿Aún no está G1GC oficialmente listo para producción?

Antes de que saliera JDK 7, G1 se anunciaba como el brillante nuevo gc que iba a reemplazar al colector CMS e incluso a ser el gc predeterminado en JDK 7. Sin embargo, ahora con Oracle JDK 7u1, G1 no es el gc predeterminado cualquier máquina que he probado.

A pesar de que no se necesita especificar -XX:+UnlockExperimentalVMOptions más cuando se utiliza -XX:+UseG1GC en el JDK 7, que es una característica JVM que está oficialmente documento de legalidad:

Java 7 (JDK 7) garbage collection and documentation on G1

El único documento oficial que podría encontrar que menciona G1 es seriamente obsoleta y fue escrito mucho antes de JDK 7 estaba fuera:

http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

Por ejemplo, el funcionario "J La documentación de ava HotSpot VM Options (http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html) documenta cómo habilitar y ajustar los otros recopiladores, pero ni siquiera menciona la existencia de G1. Como si no existiera!

Esto es bastante confuso y me pregunto cuál es el estado real del G1 y cuál es su futuro. ¿Es realmente estable todavía? ¿Se han resuelto los problemas restantes (como filtraciones, bloqueos espurios y soporte de instrumentación faltante)? Y si es así, ¿por qué Oracle trata al G1GC como un secreto indocumentado (¿embarazoso?). ¿Es posible que G1 sea un proyecto fallido que ahora se descontinúa silenciosamente? ¿O debo pagar la documentación y el soporte? ¿O solo es beta? ¿Alguien me puede aclarar sobre lo que está pasando aquí?

Respuesta

1

De acuerdo con esto: http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html,

desarrollo G1 ahora se centra principalmente en la resolución de cualquier problemas de fiabilidad restantes y mejorar el rendimiento

Además,

En términos de GC pausa veces, G1 es a veces mejor y, a veces peor que CMS. Se está trabajando para hacer G1 consistentemente tan bueno como, si no es mejor que, CMS.

Así que G1 supuestamente va a reemplazar a CMS cuando el JDK SE 7 oficial está fuera.

+0

ese mismo enlace ha sido publicado por OP y se cree que está desactualizado (creo que no ha cambiado desde 2008) - entonces, ¿cuál es el estado actual? – scravy

+0

Las últimas cosas que he encontrado después de buscar en Internet básicamente dicen las mismas cosas hasta febrero de este año. – Jon

12

El lugar para formular esta pregunta se encuentra en la lista de correo hotspot-gc-dev.

Si mira a través del archives, verá que hay mucho trabajo por hacer. Parece que una gran parte del correo electrónico se confirma y revisa las solicitudes/comentarios para que estén ocupados trabajando en ello.

No he encontrado ningún anuncio de noticias oficial, pero así es como funciona Oracle. Es posible que pueda preguntar en esa lista de correo cómo creen que van, si está contento con un comentario no oficial y no vinculante de uno de los desarrolladores.

EDIT: @scravy envió an email a la lista de correo, este es el response recibida:

No creo que hay una respuesta sencilla a esta pregunta, aunque no probablemente. El enfoque inicial de G1 fue proporcionar pausas razonables para montones extremadamente grandes. Lo que significa que hoy podría no ser la mejor opción para todos. Creemos que la tecnología tiene "muchas piernas ", lo que significa que con la adaptación, puede abordar muchos diferentes tipos de demandas de recolección de basura. Entonces, un día, podría ser efectivamente el recopilador predeterminado, pero es demasiado pronto para saber .

Teniendo en cuenta que los cambios de comportamiento GC puede ser muy perjudicial para implementaciones existentes, que son reacios a hacer cambios como este incluso en las versiones principales considerable sin previo aviso. Por lo tanto, en las versiones actuales, si no especifica un recopilador, intentamos hacer algunas elecciones automatizadas simples, pero dudo que hiciéramos cambios radicales a ese comportamiento en el corto plazo.

Para la pregunta más grande sobre G1 es compatible, la respuesta actual es no. Pero tenga en cuenta que el compromiso de soporte que Oracle hace a sus clientes pagados para los productos compatibles es bastante significativo, y hay mucho más que cumplir con los requisitos de funcionalidad y confiabilidad.

Seguimos alentando a todos a probar y evaluar G1, y del curso , envíenos sus comentarios, ya que continuamos con el desarrollo significativo de en G1.

-John

EDIT: Según this link on Oracle's site parece que G1GC está ahora totalmente compatible.

+0

Envié un correo electrónico allí. Esperando respuesta :-) – scravy

+0

@scravy ¡Parece que tienes esa respuesta! Publicaré el texto aquí. – Bringer128

0

AFAIK, G1 no es secreto - está abierto para experimental uso suficiente - al menos uno o dos años. Cada JavaOne viene con alguna idea sobre lo bueno que será G1 :)

De fuentes extraoficiales: es uno de los enfoques actuales para los ingenieros de Java, para preparar finalmente la producción de G1. Simplemente no estaban listos para abrirlo para JDK 7. Simplemente espere :)

3

Ya estamos usando G1GC, desde hace casi un año y medio. Lo está haciendo muy bien en nuestro sistema de procesamiento de transacciones de misión crítica, y resultó ser un gran soporte para alto rendimiento, baja pausa, concurrencia, multi-threading y administración optimizada de memoria pesada.

Estamos utilizando siguientes valores de JVM:

-server -d64 -Xms512m -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC 
-XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis 
-XX:MaxGCPauseMillis=400 -XX:GCPauseIntervalMillis=8000 
-XX:+UseCompressedOops -XX:NewRatio=50 
0

Parece que the page linked in the question se ha actualizado:

la basura y uno (G1) recolector de basura es totalmente compatible en Oracle JDK 7 actualización 4 y versiones posteriores.

(Tenga en cuenta, sin embargo, que para plataformas incrustadas como ARM, que aún no está soportada en absoluto en 7u4.)

0

G1 GC puede ser de producción desde la versión Java 7 Update 4 lanzamiento.

Desde oráculo article (en The G1 Garbage Collector), puede encontrar casos de uso reales para G1 GC.

aplicaciones que se ejecutan hoy en día, ya sea con el CMS o el recolector de basura ParallelOldGC se beneficiarían de cambiar a G1 si la aplicación tiene uno o más de los siguientes rasgos.

  1. duraciones GC completas son demasiado largos o demasiado frecuente.
  2. La tasa de asignación de objetos o promoción varía significativamente.
  3. no deseados de recolección de basura largo o compactación pausas (más de 0,5 a 1 segundo)

echar un vistazo a la pregunta relacionada Para obtener más detalles acerca de G1GC y parámetros clave a ser afinado:

Java 7 (JDK 7) garbage collection and documentation on G1

En relación con sus otras consultas:

¿Es realmente estable todavía? ¿Se han resuelto los problemas restantes (como filtraciones, bloqueos espurios y soporte de instrumentación faltante)? Y si es así, ¿por qué Oracle trata al G1GC como un secreto indocumentado (¿embarazoso?). ¿Es posible que G1 sea un proyecto fallido que ahora se descontinúa silenciosamente? ¿O debo pagar la documentación y el soporte? ¿O solo es beta? ¿Alguien me puede aclarar sobre lo que está pasando aquí?

  1. G1GC es estable.
  2. No he encontrado ninguna filtración en este algoritmo.
  3. Oracle no lo mantuvo indocumentado. Puede encontrar más información sobre G1GC here y here
  4. G1 no es un proyecto fracasado y G1GC va a ser el algoritmo GC defecto en nuevas versiones de Java (java 9)
  5. que no es necesario pagar por el apoyo. No es beta.
Cuestiones relacionadas