¿Qué significa jvm full gc?
A la hora de editar y ejecutar un programa Java, estos cuatro aspectos deben estar involucrados al mismo tiempo. ¿Utiliza software de edición de texto (como Notepad, WordPad, UltraEdit, etc.) o un entorno de desarrollo integrado (Eclipse, MyEclipse, etc.) para definir diferentes clases en archivos fuente de Java? , acceda al sistema de recursos llamando a métodos en la clase (estas clases implementan la API de Java), compile el archivo fuente en código intermedio binario y guárdelo en el archivo de clase, y luego ejecute el archivo de clase ejecutando la máquina virtual Java correspondiente a entorno de plataforma del sistema operativo, ejecute el código de bytes generado por la compilación y llame a los métodos implementados en el archivo de clase para satisfacer la llamada API de Java del programa.
Datos extendidos
Hay cuatro situaciones que desencadenarán la ejecución completa de GC. Espacio insuficiente en la generación anterior
1. Solo cuando los objetos de la nueva generación se transfieran y creen como objetos grandes o matrices grandes, el espacio de la generación anterior será insuficiente. Cuando el espacio aún es insuficiente después de realizar una GC completa, se activará el siguiente error:
Error de idioma insuficiente en Java: espacio en el montón de Java
Para evitar FullGC. causado por las dos situaciones anteriores, intente hacer que el objeto se recicle en la fase de GC secundaria, para que el objeto pueda sobrevivir en la nueva generación durante mucho tiempo y no cree objetos ni matrices demasiado grandes.
2. El espacio de generación permanente está lleno
La generación permanente contiene información de clase, etc. Cuando hay muchas clases para cargar, clases de reflexión y métodos para llamar en el sistema, la generación permanente puede estar ocupada. Si CMS GC no está configurado, se realizará un GC completo. Si no se puede reciclar después de la recolección completa de basura, la JVM generará el siguiente mensaje de error:
Error de falta de memoria en Java: espacio de generación permanente
Para evitar que se ejecute Perm Gen. full Si se produce el GC completo resultante, puede aumentar el espacio de Perm Gen o utilizar CMS GC en su lugar.
3. Se produjo una falla de actualización y una falla del modo concurrente en CMS GC.
Para los programas de generación anterior que usan CMS para realizar GC, debe prestar especial atención a si hay dos condiciones en el registro de GC: falla de promoción y falla del modo concurrente. Cuando ocurren estas dos condiciones, se produce un error completo. Es posible que se active la GC.
La promoción falló porque el espacio de superviviente no se puede colocar en él. El objeto solo se puede colocar en la generación anterior durante el GC menor, y la generación anterior no se puede colocar en él en este momento. Cuando hay objetos que se colocarán en la generación anterior durante la ejecución de CMS GC, el espacio insuficiente en la generación anterior puede causar fallas en el modo concurrente.
Las contramedidas son: aumentar el espacio de supervivencia, el espacio de generación anterior o reducir la proporción de activadores de GC concurrentes. Sin embargo, en las versiones JDK 5.0 y 6.0, debido al error 29 de JDK, es posible que CMS active la acción de limpieza. mucho después de que termine el comentario. Esta situación se puede evitar configurando -xx:cmsmmaxabortableprecedence=5 (en milisegundos).
4. El tamaño promedio del GC secundario ascendido a la generación anterior es mayor que el espacio restante de la generación anterior.
Esta es una situación desencadenante compleja. Para evitar el fenómeno de espacio insuficiente en la generación anterior causado por la promoción de objetos de nueva generación a la generación anterior, Hotspot hizo un juicio al realizar Minor GC. Si el tamaño promedio de los GC secundarios promovidos a la generación anterior calculado previamente es mayor que el espacio restante de la generación anterior, entonces se activará directamente un GC completo.
Por ejemplo, después de que el programa activa el GC menor por primera vez, los objetos de 6 MB se promueven a la generación anterior. Luego, cuando ocurra el siguiente GC menor, primero verifique si el espacio restante de la generación anterior es mayor. de 6 MB, si es inferior a 6 MB, ejecute el GC completo.
Cuando la nueva generación adopta PS GC, el método es ligeramente diferente. PS GC también comprobará después de un GC pequeño. Por ejemplo, después del primer GC menor en el ejemplo anterior, PSGC verificará si el espacio restante de la generación anterior es superior a 6 MB. Si es inferior a 6 MB, se activará el reciclaje de la generación anterior.
Además de las cuatro condiciones anteriores, para las aplicaciones Sun JDK que utilizan RMI para RPC o administración, se realiza una GC completa de forma predeterminada cada hora. El intervalo para la ejecución completa de GC se puede configurar al inicio mediante -Java-dsun .dgc client = 3600000, o mediante -XX: DisableExplicitGC para prohibir que RMI llame a System.gc.
Enciclopedia Baidu-JAVA