forzar example español como collector java garbage-collection

español - garbage collector java example



Punto de seguridad de Java GC (2)

Cuando un recolector de basura congela los subprocesos de la aplicación antes de limpiar objetos no referenciados, todos los subprocesos deben estar en un "punto seguro" en su ejecución. Encontré una gran cantidad de escritos que describen el concepto de punto seguro, pero muy pocos ejemplos. ¿Dónde se colocará un punto de seguridad dentro de un método Java típico y por qué? Y, lo que es más importante, ¿dónde no puede ocurrir un punto de seguridad?


Lamentablemente este es un campo mal definido. La JVM coloca puntos de seguridad cuando decide hacerlo, pero no hay especificaciones para cuándo. Una versión / actualización a la siguiente de Java puede ser diferente. Hay algunos casos como Unsafe.copyMemory () que no tiene un punto de seguridad, pero no puede estar seguro de dónde se colocarán los puntos de seguridad.


La definición exacta y la implementación de un punto de safepoint cambian de una implementación de VM a otra, pero considerando Hotspot VM, puede encontrar una buena definición en: Safepoints en HotSpot JVM .

El glosario de HotSpot dice:

Un punto durante la ejecución del programa en el que se conocen todas las raíces del GC y todos los contenidos del objeto del montón son coherentes. Desde un punto de vista global, todos los hilos deben bloquearse en un punto seguro antes de que el GC pueda ejecutarse.

Por lo general, el punto de seguridad se implementa mediante JVM inyectando un control de punto de seguridad en un método, la mayoría de los sitios de llamadas califican como puntos de seguridad. hilos de bloques. Cuando todos los subprocesos en el bloque de VM, ha alcanzado el punto de seguridad donde todos los objetos en el VM son perfectamente accesibles. Luego, se realiza la operación de la máquina virtual que solicitó el punto de seguridad (por ejemplo, un FullGC), después de lo cual se reanudan los hilos.

Verifique la lista de operaciones de VM que requieren un punto de seguridad : Safety First: Safepoints .

Puede estudiar el comportamiento de punto de seguridad en Hotspot usando -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1 .