Este artículo estudia principalmente la comprensión de los registros de GC en máquinas virtuales Java, de la siguiente manera.
Comprender los registros de GC es una habilidad básica para tratar con los problemas de memoria de la máquina virtual Java.
Al agregar parámetros al tipo de comando Java, especifique el tipo de GC correspondiente, imprima la información del registro de GC y la envíe a archivos y otras políticas.
clase pública referenceCountinggc {public object instance = null; private static final int One_mb = 1024 * 1024; private byte [] bigSize = new byte [2 * one_mb]; public static void main (string [] args) {testgc ();} public static void testgc () {referenceNingggC OBJA = newja = neo neo neo ReferenceCountingGc (); referenceCountinggc objB = new ReflectEcEdinggc (); obja.instance = objb; objb.instance = obja; obja = null; objb = null; system.gc ();}}javac referenceCountinggc.Java
java -xx:+printgcdateStamps -xx:+printgcdetails referenceCountingGc
Lista de parámetros correspondiente
-Xx:+PRINTGC Output GC Log
-Xx:+printgcdetails sale registros detallados de GC
-Xx:+PRINTGCTIMESTAMPS TimEtampers Extits GC (en forma de tiempo de referencia)
-Xx:+printgcDateSpamps Output GC's TimeStamp (en forma de fecha, como 2013-05-04T21: 53: 59.234+0800)
-Xx:+printheApatgc imprima la información del montón antes y después de GC
-Xloggc: ../ Logs/gc.log ruta de salida del archivo de registro
Resultados de salida:
2016-03-20T14: 34: 55.118-0800: [GC [PSYOUNGGEN: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 SECS] [Times: user = 0.00 sys = 0.00, real = 0.00 secs]
2016-03-20T14: 34: 55.119-0800: [GC completo [PSYOUNGGEN: 400K-> 0K (38912K)] [Paroldgen: 0k-> 282k (87040k)] 400k-> 282k (125952k) [pspermgen: 2622k-> 2621k (21504k), 0.0084444444444444444444444444444444444444444444 Secs] [Times: User = 0.01 Sys = 0.00, Real = 0.01 SECS]
Montón
PSYOUNGGEN TOTAL 38912K, usado 1013k [0x00000007D55000000, 0x00000007D80000000, 0x000000008000000000)
Eden Space 33792k, 3% usado [0x00000007D5500000, 0x00000007D55FD7D0, 0x00000007D76000000)
Desde el espacio 5120k, 0% usado [0x00000007D7600000, 0x00000007D7600000, 0x00000007D7B000000)
al espacio 5120k, 0% usado [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen Total 87040k, usado 282k [0x0000000780000000, 0x00000007855000000, 0x00000007D55000000)
Espacio de objetos 87040k, 0% usado [0x0000000780000000, 0x0000000780046BF8, 0x00000007855000000)
PSPermgen Total 21504k, usado 2628k [0x0000000077AE000000, 0x000000077C3000000, 0x00000007800000000)
Espacio de objetos 21504K, 12% usado [0x0000000777AE000000,0X00000077B091380,0X00000077C3000000)
PSYOUNGGEN significa la nueva generación, y este nombre está determinado por el coleccionista, que es un barrio paralelo. Paroldgen, permanentemente pspermgen
Puede ver que hay dos tipos de GC: GC y GC completo. Hay una declaración completa de que Stop-the-World le ocurrió a GC esta vez.
El Clan GC (Minor GC): se refiere a la acción de recolección de basura que ocurre en el clan. Debido a que la mayoría de los objetos Java tienen las características de la vida y la muerte, el GC menor es muy frecuente y, en general, la velocidad de reciclaje es muy rápida.
GC más antiguo (GC mayor/GC completo): se refiere a GC que ocurre en la vejez. Aparece el mayor GC, que a menudo se acompaña de GC menor al menos una vez. La velocidad del GC mayor es generalmente más de 10 veces más lenta que el GC menor.
[GC [PSYOUNGGEN: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 segundos] [Times: User = 0.00 Sys = 0.00, real = 0.00 segundos]
El 6123k-> 400k (38912k) dentro del soporte cuadrado anterior indica que el área de memoria ha utilizado la capacidad antes de GC -> GC después de GC, y el 38912k dentro del soporte redondo detrás es la capacidad total del área de memoria.
El 6123K-> 400K (125952k) fuera de los soportes cuadrados significa que el montón de Java ha utilizado la capacidad antes de GC -> El montón Java ha usado la capacidad después de GC, y el 125952k dentro de los soportes redondos detrás es la capacidad total del montón Java.
[Times: Usuario = 0.00 SYS = 0.00, Real = 0.00 segundos] Representan el tiempo de CPU consumido por el usuario, el tiempo de CPU consumido por el estado del núcleo y el tiempo de reloj de pared transcurrido desde el principio hasta el final de la operación. La diferencia entre el tiempo de la CPU y el tiempo de reloj de pared es que el tiempo del reloj de pared incluye varios tiempos de espera de no operación, como esperar la E/S de disco y esperar el bloqueo de hilos, mientras que el tiempo de la CPU no incluye este tiempo.
Puede usar algunas herramientas fuera de línea para analizar registros de GC, como Gchisto de Sun (https://java.net/projects/gchisto) y GCViewer (https://github.com/chewiebug/gcviewer). Todas estas son herramientas de código abierto. Los usuarios pueden descargar directamente su código fuente a través de herramientas de control de versiones para el análisis fuera de línea.
Lo anterior se trata del análisis del registro GC de Java Virtual Machine, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!