máquina virtual JVM comprensión

¿Cuál es el JVM

Es una abreviatura de JVM (Java Virtual Machine máquina virtual de Java), JVM es una especificación para un dispositivo de computación, que es un equipo ficticio, se hace pasar sobre la simulación por ordenador real de varias funciones implementadas en ordenador.
Después de la introducción del lenguaje de máquina virtual de Java, no necesita lenguaje Java que volver a compilar para ejecutarse en diferentes plataformas cuando. Máquina Virtual de Java utilizando la información lenguaje Java asociado con una plataforma de protección especial, por lo que sólo compilador de lenguaje Java para generar el código objeto (código de bytes) que se ejecuta en la máquina virtual de Java puede ejecutarse sin modificaciones en múltiples plataformas .

Estructura de la máquina virtual de Java

Aquí Insertar imagen Descripción
Este diagrama de configuración JVM referencia de la imagen de amplia difusión en línea.

área de datos en tiempo de ejecución

Varios área de datos de tiempo de ejecución durante la ejecución del programa. Algunos de la zona de datos se crea cuando se inicia la máquina virtual de Java, se destruyeron sólo cuando las salidas de Java Virtual Machine, tales como el área de método , heap área de área de datos. El resto de flujos privados de la zona, cada área de datos se destruye cuando el hilo termina, como contador de programa PC , la pila de máquina virtual , pilas de métodos nativos .

Contador de programa PC

Cada CPU tiene un contador de programa PC es decir, registro, registra el contador de programa PC las instrucciones actuales de código de bytes hilo dirección ejecutados, a menudo llamada el indicador de número de línea.
Cuando el trabajo de código de bytes intérprete, las instrucciones de código de bytes se selecciona cambiando el valor del contador de programa es una necesidad para llevar a cabo una rama, salto, el lazo, el manejo de excepciones y otras funciones básicas necesarias para llevar a cabo este contador.
Java es un lenguaje de soporte multi-hilo, multi-hilo llamada realidad se logra mediante el algoritmo de planificación de la CPU de round-robin, dentro de un intervalo de tiempo, la instrucción procesador de un solo hilo de ejecución.
Con el fin de garantizar la aplicación puede ser restaurado a su posición original cuando el hilo proceso de conmutación, cada hilo tendrá un contador de programa separado (es decir, hilo privado), sin perjuicio de la otra entre los diversos hilos, aislado de almacenamiento de
contador de programa es la única especificación en la máquina virtual Java no se prevé ninguna zona de la condición de desbordamiento de memoria.

Java Virtual Machine pila

Virtual pila de la máquina modelo de memoria de Java método descrito lleva a cabo mientras se realiza el método crea un marco de pila para el método de almacenamiento de tabla de variables locales, la pila de operandos, la información de conexión dinámica como método de salida, cada método se completa la ejecución de los conocimientos que llama, que corresponde a un marco de pila para empujar la pila en una pila de proceso de la máquina virtual.

montón

Cada región de memoria compartida hilo, instancias de clases y las matrices de memoria asignada en el montón, se crea el montón cuando se inicia la máquina virtual.

distrito métodos

Estructura de almacenamiento de cada clase, por ejemplo en tiempo de ejecución constante piscina, campo y un método para datos estáticos, y los métodos y el código de constructores, incluyendo los métodos especiales para crear instancias de clases y las interfaces y de inicialización, el método constante zona de la piscina asignación de tiempo de ejecución también memoria

conjunto de constantes de tiempo de ejecución

Y para almacenamiento de símbolo de referencia literal generado por el compilador, esta parte entrará en los métodos de clases área cargada.

montones de métodos nativos

Java Virtual Machine efecto chimenea es similar, la diferencia radica en su pila de ejecución de la máquina virtual para el método de servicio de la máquina virtual de Java, y las pilas de métodos nativos, la máquina virtual para utilizar un método de servicio nativo. El uso de las pilas de métodos nativos en un lenguaje de especificación de máquina virtual, y la forma en que la estructura de datos no es obligatoria, por lo que la máquina virtual específica que puede ser implementada. Algunas máquinas virtuales directamente a las pilas de métodos nativos y máquinas virtuales combinan pila.

modelo de delegación de los padres

Si se carga un cargador de clases de la clase recibió una solicitud, no lo hace propio para cargar esta clase, pero a delegar esta solicitud al cargador de clases padre al completo, y sólo cuando se carga el cargador de clases padre la solicitud no pudo ser completado, el cargador de clases del niño intentará cargar la clase.

Aquí Insertar imagen Descripción

cargador de clases

Inicio cargador de clases : Bootstrap cargador de clases, es parte de una máquina virtual, que se utiliza para cargar bibliotecas del núcleo. JAVA_HOME / lib / o por -Xbootclasspath ruta especificada por el parámetro y la máquina virtual se identifica biblioteca
cargador de clases de extensión : Extensión cargador de clases, biblioteca de la extensión de Java es responsable de la carga. Todas las bibliotecas de carga lib / / ext o java.ext.dirs variables del sistema especificados camino.
Cargador de aplicaciones de clase : Aplicación cargador de clases, es responsable de cargar la biblioteca especificada en la ruta de clase ruta de clase del usuario, podemos usar directamente este cargador de clases. Normalmente no tenemos cargadores de clases personalizado predeterminado es utilizar el cargador.

ciclo de vida de la clase

Las clases se cargan en la memoria de la máquina virtual comenzó a descargar una memoria muy lejos, de hecho, todo su ciclo de vida incluye siete etapas.
Carga, validación, preparación, análisis, inicialización, uso y desinstalación.
En el que la carga, de validación, de preparación, de inicialización y de análisis sintáctico cinco etapas son secuenciales, y el poder analítico no sean.

Cargando la clase

Clase es las cinco primeras etapas del ciclo de vida de Aquí Insertar imagen Descripción
carga de las necesidades de la máquina virtual para hacer acerca de las tres cosas
(1) para obtener un flujo de bytes tales binaria (de una clase no especifica los permisos de archivos adquiridos por nombrar a una clase, a partir otros canales, tales como: red, generado dinámicamente, bases de datos, etc.)
(2) de esta estructura de almacenamiento estático representado por el flujo de bytes en un método estructura de datos región de tiempo de ejecución
(3) en la memoria (a los efectos de que el método región HotSpot VM ) genera un objeto java.lang.Class representativo de esta clase, como un método para acceder a las diferentes áreas de entrada de datos de esta clase
de verificación generalmente se requiere para completar la inspección de la operación de cuatro etapas
(validación de formato 1) archivo: verificar si el flujo de bytes con especificación de formato de archivo de clase (número de versión está dentro de una gama de procesamiento de la máquina virtual, si existe la constante en la constante de tipos de la piscina no son compatibles)
(2) verificación de metadatos: información descrita bytecode análisis semántico a garantizar el cumplimiento de la información descrita en los requisitos de especificación del lenguaje Java (por ejemplo: si hay clase padre, excepto java.lang.Object); (.
3) Bytecode verificación: el flujo de datos y análisis de flujo de control para determinar la semántica del programa es legítimo, lógico;
(4) la verificación de referencias simbólicas: para asegurar que la operación de análisis se puede realizar correctamente.
fase de validación es muy importante, pero no necesariamente, no tiene efecto en la ejecución del programa. Si la clase de referencia después de la verificación repetida, considere el uso de parámetros -Xverifynone a cerrar la mayor parte de las medidas de verificación clase para acortar el tiempo de la carga clase de máquina virtual.
listoFase de preparación se asignaba formalmente la memoria y establece la variable de valor inicial clase etapa de una variable de clase (variables miembro estáticas), la memoria utilizada por estas variables se asignan en el área de método. Este tiempo incluye sólo las variables de clase de asignación de memoria, las variables de instancia sin incluir variables de instancia de una instancia de objeto serán asignados junto con los objetos en el montón. En segundo lugar, aquí el valor inicial "normalmente" es el tipo de datos de valor cero, suponiendo una variables de clase se definen como sigue

	那么,变量在准备阶段过后的值还是0,而不是111.因为这时候没有开始执行任何Java方法,而把value赋值为
	111的putstatic指令是程序被编译后,存放于类构造器方法<clint>()之中,所以把value赋值为111的动作将在初始化阶段才会执行。
    public static int value=111;
    特殊情况:当类字段的字段属性是ConstantValue时,会在准备阶段初始化为指定值,所以标注为final之后,value在准备阶段初始值为111而不是0
    public static final int value=111;

Analizar
analizar etapa es un proceso de piscina constante de máquinas virtuales reemplazará referencia simbólica referencia directamente. La operación de análisis principal en la clase o interfaz, campo, métodos de clase, el método de la interfaz, el tipo de método, y el método de invocación punto de referencia símbolo clase de controlador 7 calificadores.
Inicialización
de inicialización de fase es el proceso de carga de clases paso final. En frente del proceso de carga de clases, además del programa Java en la fase de carga de la aplicación de usuario puede fuera del cargador de clases a medida para participar en la acción restante consiste en máquinas totalmente virtuales dominar y controlar, en la fase de inicialización, comenzó en serio la aplicación de la clase definida el código (código de bytes).
En los de preparación de las variables de la etapa que han sido asignados por encima del valor inicial (valor cero) una vez que los requisitos del sistema, mientras que en la fase de inicialización, para inicializar las variables de clase y otros recursos de acuerdo con los procedimientos especificados en el plan subjetiva, o, más claramente: la etapa inicial de la implementación de la clase proceso constructor () método. () El método es implementado por la operación compilador de asignación recogidos automáticamente toda clase de variables de clase y las sentencias estáticas bloque de instrucciones estáticas fusión de {}, la colección para el compilador era por orden de aparición en la declaración en el archivo de origen de la decisión las sentencias estáticas sólo pueden bloquear el acceso a las variables estáticas definidas en un bloque de instrucciones antes, la definición de las variables detrás de él, se puede asignar una declaración estática en frente del bloque, pero no puede acceder.

    int a=0;
    static {
    	a是对象创建之后才分配内存在堆上。
        a;//Non-static field 'a' cannot be referenced from a static context
    }

Aquí Insertar imagen Descripción

Creación de objetos

Utilizando la nueva constructor se llama
usando el método newInstance llama al constructor de la clase
usando la clase newInstance método constructor llama al constructor
de clonación de un objeto (clon superficial, clon de profundidad) usando el método de clon
usando deserialización?

mecanismo de recolección de basura JVM

En Java, el programador no necesita para liberar la memoria de un objeto de visualización, pero realiza automáticamente por la máquina virtual. En la JVM, hay un hilo recolector de basura, es una prioridad baja, bajo no serán implementadas circunstancias normales sólo cuando la máquina virtual está inactivo o la actual falta de memoria del montón, se activará la ejecución de los análisis no son ninguna referencia a los se opone, y añadirlos a la colección se recuperó, se recuperó

algoritmo de recolección de basura

recuento de referencias
Aquí Insertar imagen Descripción
puede verse que la JVM referencia circular no pueden recuperarse.
Alcanzabilidad análisis del GC Root
pila destino referenciado máquina virtual (marco de pila variable local de la tabla) (1.);
Objetos (2) Método de zona de referencia atributo estático clase; y
(3) una región constante de métodos de objeto citado ;
(4) objeto referenciado pila local.Aquí Insertar imagen Descripción

estrategia de recuperación / algoritmo

Marcos - barrer
la primera marca, y luego despejado, habrá muchos después de desechos espaciales claro, si éste necesidad de asignar objetos de gran tamaño, dará lugar a ninguna memoria contigua disponible
marca - terminando
primera marca, acabado y luego despejado, la basura espacial resuelto cuestión. Luego hubo un nuevo problema, cada uno tenía que mover objetos.
Replicación algoritmo de estado
del espacio de memoria designada en dos regiones iguales, cada región utilizando sólo una. Cuando la recolección de basura, atravesando la región de la corriente utilizada para copiar objetos vivos a otra área, el último reciclables área de destino utilizando el reciclaje actual.

colección generacional
basado en el período de supervivencia de la memoria de objeto se divide en unas pocas piezas. Generalmente incluyendo la generación joven. Años de edad y generaciones permanentes,

El recolector de basura

Java proporciona tres escenarios diferentes de acuerdo con el tipo de colector, son de serie, el rendimiento y la respuesta del usuario tiempo Prioridad Prioridad
Aquí Insertar imagen Descripción

CMS (GC concurrente) del colector

Durante todo el proceso de recogida se divide a grandes rasgos en cuatro pasos
(1) etiquetas iniciales
(2) marca concurrente
(3) re-marca
(4) concurrente clara
donde las etiquetas iniciales, estos dos pasos necesitan usuario re-marca de pausa otros hilos. CMS se debe al uso de la marca - algoritmo de barrido, que todavía va a producir una gran cantidad de escombros, basura espacial cuando demasiado, traerá un montón de problemas a los objetos de asignación, como la asignación de objetos de gran tamaño, el espacio de memoria no puede encontrar espacio contiguo a no asignar GC completa no es una salida con antelación, con el fin de resolver este problema, CMS proporciona un colector -XX: UseCMSCompactAtFullCollection parámetros
para aumentar la re-GC completa después de un proceso de desfragmentación, sino también a través -XX: parámetro CMSFullGCBeforeCompaction que lleve a cabo muchas veces sin comprimir después de la GC completa, seguido de un proceso de desfragmentación.

colector G1 (usuario el tiempo de respuesta de prioridad)

(1) al mismo tiempo y en paralelo:
(2) un colector generacional
(3) espacial Integración
(4) para predecir la cabina de Aquí Insertar imagen Descripción
conceptos G1 también similares interna composición región uno a cuadros de existir
región introdujo
el mismo tamaño, el valor es de 1 M a árbol de parada de potencia entre un 32M bytes 2, JVM 2048 tratará de dividir a la izquierda y la derecha, región del mismo tamaño. Este número se puede ajustar manualmente, G1 se ajustará automáticamente en función del tamaño de la pila.
aplicación G1, como parte de la región de Edén, como parte de superviviente, parte del Viejo, G1 region50% excederá el tamaño del objeto de destino se clasifica como Humongous, y se coloca en la región apropiada. Lógicamente, la región Humongous considerado como una parte de la vejez, como la copia de objetos grandes es operación muy costosa, no es adecuado para la nueva generación de algoritmo de replicación de GC.

Deficiencias G1.
tamaño de la región y objetos de gran tamaño es difícil asegurar la consistencia, que puede conducir a pérdida de espacio; es probable que ocupar más de una región de particular objetos grandes. Y, región muy inadecuado, que lo hará más difícil encontrar espacio contiguo en la asignación de un objeto grande, que es el caso de una existencia a largo plazo.

Ángulo GC algoritmo, la elección G1 es algoritmos complejos que pueden simplificar entenderse como sigue:
En la nueva generación, G1 es todavía copia usada de algoritmos paralelos, por lo que el mismo Stop-The-World de ocurrirá la pausa. Limpieza de la nueva generación traerá buena zona de edad, ha estado marcada región.
Son marca concurrente bajo la vieja era, en la mayoría de los casos, y de acabado (compacto) se lleva a cabo y la nueva generación de la GC dicho sea de paso, y no a la integridad de acabado, pero incrementos, es decir, la nueva generación de la superficie original objetar cuando suficientemente de edad, que puede ser directamente en el área de generación de edad.

asignación de objetos opté y cancelación de asignación
región gigantescos como parte de la vejez, por lo general pensamos que sería recuperada después del final de la marca concurrente, pero en la nueva versión de la G1, la recuperación gigantesco objeto ha adoptado una estrategia más agresiva. Sabemos que el G1 referencia de objeto registrado entre la región de edad, Humongous número de objetos limitado, es posible saber rápidamente si hay la antigua referencia de objeto a la misma. Si no es así, puede ser capaz de prevenir el único de recuperación, si hay una nueva generación de referencias de objetos a la misma, pero esta información es saber cuando Young GC, por lo que se puede reciclar objetos Humongous en Young en GC, no lo hacen como en años anteriores objetos antiguos como marca concurrente el final de la espera.

supervisión del rendimiento de la máquina virtual

herramienta de estado del proceso VM -jps : máquinas virtuales se pueden enumerar los procesos en ejecución.
Mostrar ejecuta la máquina virtual al nombre de la clase principal y los procesos locales de estas máquinas virtuales ID único.
Virtuales estadísticas para Monitoreo de Máquinas herramientas -jstat : herramienta de comandos para controlar las máquinas virtuales para diferentes informaciones de estado de funcionamiento.
Mostrar la carga virtual de clase de máquina, la memoria, la recolección de basura, compilador JIT y otros datos de funcionamiento
herramientas de imagen de memoria de Java -jmap : para instantáneas de volcado de la supervivencia del montón
puede también consulta la ejecución cola de finalizar los detalles del montón de Java y las generaciones permanentes.
Tales como el uso del espacio, colectores de corriente utilizan
Java pila -jstack herramienta de rastreo : Hilo de instantáneas de máquinas virtuales para sobrevivir a la hora actual
el seguimiento y la gestión del público también -JConsole Java : control visual, herramientas de gestión
pueden ver toda la información acerca de la JVM, incluyendo la memoria, hilo , clase, VM y GC información de resumen

Ideas de ajuste de JVM

Ver información de pila para determinar si el espacio es demasiado pequeño montón
circunstancias vista completa de GC para determinar si una pérdida de memoria
a usar recolector de basura razonable
de memoria espacio de almacenamiento dinámico de memoria mínimo y máximo se establece en el mismo habrá expansión y contracción de la capacidad de la caja

Ejemplos JVM parámetros comunes

Opciones de la memoria

Parámetro Significado
tamaño inicial del almacenamiento dinámico -Xms1024m
-Xmx1024m tamaño máximo del montón
tamaño -Xmn500m CENOZOICO
-Xss1024K solo hilo pila
-XX: PermSize = 200m sustituyendo Java8 permanente antes
-XX: MaxPermSize = 300m Java8 sustitución permanente berfore
-XX: MetaSpaceSize metadatos después de 8
-XX: MaxMetaSpaceSize metadatos 8 Después.
-XX:.. NewRatio 4 proporción de área Olden = área joven 4 :. 1
-XX:. = 8 SurvivorRatio Eden relación de área S región 8 :. 1 :. 1.
-XX: optimizar el tamaño de página de memoria JVM LargePageSizeInBytes Universidad nacional Cheng Kung tono de búsqueda

ajustes de GC

新生代(别名) 老年代 JVM参数
serie (DefNew) de serie anterior (PSOldGen) -XX: + UseSerialGC
Scavenge paralelo (PSYoungGen) de serie anterior (PSOldGen) -XX: + UseParallelGC
Scavenge paralelo (PSYoungGen) paralela Viejo (ParOldGen) -XX : + UseParallelOldGC
ParNew (ParNew) de serie anterior (PSOldGen) -XX: -UseParNewGC
ParNew (ParNew) CMS + Serial viejo (PSOldGen) -XX: + UseConcMarkSweepGC
G1 G1 -XX: + UseG1GC

La depuración de los parámetros

Parámetro Significado Descripción
-XX: + PrintGCDetails GC registro
-XX: + PrintGCApplicationStoppedTime GC pausas
-verbose: gc / clase / JNI Ver gc, la carga de clases, la llamada al método nativo
-XX: + PrintHeapAtGC pila de impresión durante la GC provocados
-Xloggc: registro la salida del registro /gc.log GC
-XX: + HeapDumpOnOutOfMemoryError genera cuando desbordamiento de la pila de memoria volcado
-XX: + HeapDumpOnCtrlBreak Ctrl + Pausa genera volcado

Publicado 24 artículos originales · ganado elogios 1 · visitas 531

Supongo que te gusta

Origin blog.csdn.net/qq_45366515/article/details/105045804
Recomendado
Clasificación