por qué los recolectores de basura tienen que hacer una pausa en general?
trabajo GCs mediante el trazado de bloques de montón alcanzables a partir de un conjunto de raíces globales (variables globales, pilas hilos y registros de la CPU). Los GC se encuentran en una escala móvil desde instantánea a sobre la marcha. Los GC Snapshot funcionan a partir de una instantánea de las raíces globales y la topología de montón. On-the-fly GCs actualiza incrementalmente su interpretación del montón a medida que se ejecutan los mutadores.
rastreo no es "¿por qué los recolectores de basura tienen que hacer una pausa en general", hay razones más grandes para hacer una pausa: reubicación objeto que está siendo el dominante.
Pero hasta el punto de los trazadores sobre la marcha frente a los trazadores de instantáneas y su eficiencia relativa: el trazado sobre la marcha puede ser más eficiente que los trazadores de instantáneas al comienzo. El mismo documento al que se refiere al describir [VCGC] clasifica al coleccionista Pauseless anterior, no generacional de Azul, como un trazador preciso de frente de onda [3]:
"... La mayoría de los colectores prácticos usan abstracciones conservadoras del frente de onda en lugar del preciso definición es aquí. Es decir, el frente de onda se rastrea en una granularidad de objetos. Sin embargo, el frente de onda preciso no es meramente teórico y ha sido utilizado recientemente en el colector asistido por hardware para el servidor Azul Java, que tiene un "no marcado" "Mordió en cada puntero [2]".
Azul's C4 comparte esta calidad, pero la logra usando una barrera de lectura de LVB de software puro y autocuración.
enteramente instantánea GCs alcanzar un alto rendimiento debido a que el colector se extiende casi por completo independientemente de los mutators pero tienen alta latencia porque la toma de una instantánea incurre en una pausa. totalmente de la marcha GC lograr una baja latencia porque todo se hace de forma incremental, pero baja rendimiento debido a la comunicación de grano fino entre los mutadores y GC.
un trazador de frente de onda precisa es tan eficiente (desde el punto de vista discutido en el documento "no gastar tiempo en los objetos que no sean necesarios") como trazador stop-el-mundo, que por definición tienen también un recise frente de ondaEn comparación con los enfoques basados en instantáneas, el escaneo preciso del frente de onda no reduce el rendimiento de ninguna manera ni requiere más comunicación entre el colector y el mutador. Tiene un rendimiento tan bueno o mejor, ya que su precisión asegura que nunca tenga que repetir ningún trabajo de rastreo.
¿por qué Azul's gc no tiene ese problema?
Todavía tienen este problema, pero lo redujeron al implementar una barrera de lectura en el hardware. Las barreras de lectura se habían propuesto anteriormente, pero las barreras de lectura de software degradan demasiado el rendimiento porque las lecturas del puntero son mucho más comunes que las escrituras.
Como se ha señalado, si el "problema" era debido a la ineficiencia en la marcha contra el comportamiento instantánea, C4 no tiene porque es un trazador de frente de onda precisa. Además, el colector C4 de Azul no necesita ni usa una barrera de lectura de hardware, ya que funciona en sistemas vanilla x86 y Linux, y logra un mejor rendimiento en ese hardware que los colectores de seguimiento basados en instantáneas (ver comparaciones de rendimiento en [1]).
Sin embargo, "el problema" en la pregunta se expresó como "¿por qué los recolectores de basura tienen esa pausa en general?" La precisión del frente de onda (o no) tiene poco que ver con las pausas dominantes en los recolectores de basura. Los marcadores concurrentes y mayormente concurrentes (incluso si son menos eficientes que C4) sí existen, pero sus recolectores aún hacen una pausa. El problema es que el rastreo es solo una parte de la recopilación. El rastreo solo te dice qué está vivo y dónde está. No le devuelve ningún recuerdo, y ciertamente no elimina el fragmento de la memoria fragmentada. Ese tema se discute en profundidad en varios documentos académicos (ver un montón de referencias de C4 papel [1]).
Es la compactación (y la reubicación de objeto implícita) que parece ser el talón de Aquiles de los colectores de envío actualmente en las JVM del servidor, y lo que provoca inherentemente que tomen pausas [grandes]. El simple acto de reubicar incluso un único objeto de un lugar a otro significa que tiene que REPARAR todas las referencias que apuntan a ese objeto antes de que el programa las use. Para la mayoría de los coleccionistas de envío comercial, esto significa una pausa mundial que evita que la aplicación se ejecute mientras se reparan las referencias.
C4 aprovecha la barrera autocompactante LVB (un nuevo tipo de barrera de lectura introducida en [2] y utilizada en gran medida en [1] en forma de software) para evitar tener que arreglar referencias antes de que la aplicación pueda ejecutarse . Así es como evita la pausa que otros coleccionistas terminan teniendo que tomar. La calidad de autorreparación reduce el costo dinámico de las barreras de lectura en varios órdenes de magnitud en comparación con las barreras previas que no se autorreparan (como la barrera al estilo de los riachuelos utilizada en otros compactadores concurrentes en trabajos académicos, y en algunos casos reales). coleccionistas de tiempo). El resultado de este costo de barrera de lectura dramáticamente menor es que es práctico para su uso en la recopilación generacional y en las JVM a escala de servidor.
[1]: "C4: el colector de compactación continuamente concurrente" http://dl.acm.org/citation.cfm?id=1993491&dl=ACM&coll=DL&CFID=85063603&CFTOKEN=84074207 [2]: "El Pauseless GC Algoritmo" http://static.usenix.org/events/vee05/full_papers/p46-click.pdf [3]: "Derivación de Algoritmos recolección de basura concurrentes corrección-Preservar" www.srl. inf.ethz.ch/papers/pldi06-cgc.pdf
(Graham Thomas, director técnico de la EMEA, Azul Systems)
Oh! ¡Tan limpiamente explicado! ¡Muchas gracias! – kikito
Sé que esta respuesta es muy antigua, pero ¿pueden explicar un poco sobre la barrera de lectura? – ADJ