notas de estudio JV

Capítulo Introducción
contenidos principales del comprendiendo máquina virtual Java:
la estructura interna de una máquina virtual;
2, el tipo de código de bytes y la función de las máquinas virtuales;
3, la estructura del archivo de clase;
4, la carga de clases y la inicialización de conexión

El segundo capítulo, la estructura de la máquina virtual
estructura básica de la máquina virtual incluye: sistema de carga de clases, área de método, montón, pila de Java, pilas de métodos nativos, registros de PC, directo a la memoria, el sistema de recolección de basura, el motor de ejecución.
java proceso de uso: java [-options] clase [args ...]
parámetro indica Opciones comenzar;
args representa la transferencia a la función main () Parámetros

almacenamiento dinámico de Java en una nueva era y la vieja era.
años de edad: dos tercios del espacio de almacenamiento dinámico
de la generación joven: un tercio de la pila
nueva era se divide en región de Edén, zona s0, s1 zona; S0 y S1 son dos espacios de igual tamaño, intercambiables memoria.
distrito eden: el espacio generación joven 8/10
survivor0: el espacio generación joven 1/10
survivor1: 1/10 del espacio generación joven

En la mayoría de casos, el objeto se asigna primero a la eden zona, después de una nueva generación de reciclaje a través de, si el objeto está todavía vivo, entrará en s0 o s1, una vez después de cada nueva generación de reciclaje, objetos vivos, la edad se incrementa cuando el llega a la edad un número determinado, se considerará que los sujetos de edad avanzada, en la vieja era.

contenido java se almacena en la pila de marco de pila, y cada vez que se pulsa en un marco de pila de llamadas de función, el final de la función aparece un marco de pila.
Un marco de pila debe contener al menos la tabla de variables locales, y los datos de operando pila marco.
Operando pila se utiliza para mantener los resultados intermedios de cálculos.

El ajuste tercer capítulo, el parámetro
-XX: + PrintFlagsFinal Ver todo defecto JVM parámetros
-Xss 128k pila espacio es conjunto
-XX: + PrintGC recolección de basura del registro de impresión
de memoria de almacenamiento dinámico máximo 10m -Xmx
-Xms mínimos 10m montón
-XX: + PrintGCDetails Imprimir detalles del registro
-XX: InitialSurvivorRatio = 8 nueva generación del Edén / relación inicial de Survivor espacio
-XX: relación de áreas de memoria de las áreas de 2 años o Cenozoico Newratio =
-XX: MetaspaceSize = 512m espacio inicial, este valor se alcanza activará el spam recoger el tipo de descarga, mientras que GC se ajustará el valor: si la liberación de una gran cantidad de espacio, es conveniente reducir el valor, si se liberan muy poco espacio, por lo que cuando hay más de MaxMetaspaceSize, un aumento correspondiente en el valor.
-XX: MaxMetaspaceSize = 512m de tamaño máximo, por defecto es ninguna limitación
-XX: MinMetaspaceFreeRatio, después de la GC, el metaespacio capacidad de espacio libre más pequeño porcentaje, la reducción del espacio asignado para la recogida de basura causada
-XX: MaxMetaspaceFreeRatio, después de la GC, metaespacio porcentaje restante de la cantidad máxima de espacio, un espacio para la liberación de la reducción de la recolección de basura causada
-XX: + PrintHeapAtGC salida del registro antes y después de la GC montón
-XX: salida + PrintGCTimeStamps GC GC se produce cuando el tiempo de ocurrencia
-XX: seguimiento de clases + TraceClassLoading carga
-XX: + PringVMOptions línea de comando de impresión recibido parámetro explícito
-XX: + PringCommandLineFlags parámetros explícitos e implícitos imprimir aceptado comando
práctica puede ser igual -Xmx y -Xms.
10m conjunto -Xmn una nueva generación de memoria
-XX: memoria de mensajes de error de desbordamiento + Exportación HeapDumpOnOutOfMemoryError cuando
-XX: HeapDumpPath = d: /a.dump ruta de almacenamiento
-XX: MaxDirectMemorySize más grande directo a la memoria, si no se establece el máximo de espacio de almacenamiento dinámico por omisión, directa la recolección de basura se activa cuando la memoria alcanza el valor establecido
-Xloggc: registro de recolección de basura /path/gc.log

-XX: + UseSerialGC especificar el uso de la nueva generación y el colector de serie de la edad del colector de serie
-XX: + UseParNewGC uso ParNew nueva generación y el colector de serie del colector de edad
-XX: + UseParallelGC nueva generación de reciclaje uso ParallelGC años de edad y utilizar el colector de serie
-XX: + UseParallelOldGC uso ParallelGC nueva generación y el uso ParallelOldGC colector del viejo colector
-XX: + UseConcMarkSweepGC nueva generación de reciclaje y el uso de ParNew años de edad el uso del colector CMS
-XX: + UseG1GC el uso del colector G1
-XX: MaxTenuringThreshold = 15 veces promovió la nueva generación de vejez
-XX: ParallelGCThreads hilos de recolección de basura

El cuarto capítulo, el concepto de algoritmos de recolección de basura y
el recuento de referencias, algoritmo de compresión marca, algoritmos de etiquetado claras, algoritmos y copiar particiones generacional, ideológica.
El mayor inconveniente etiquetada algoritmo de desechos espaciales claro es
la memoria algoritmo de copia en dos, uno de ellos utiliza solamente. Rara vez tenga que copiar objetos vivos. La desventaja es que la memoria usada necesita ser dividido en dos.
algoritmo de compresión de marca es un algoritmo años de edad, además de marcar la eliminación de defectos del algoritmo de desechos espaciales.
algoritmo generacional de acuerdo con las características del objeto de memoria en pedazos, utilizando la recuperación de diferentes algoritmos, mejorar la eficiencia de reciclaje.
El espacio algoritmo de montón de partición se divide en diferentes espacios pequeños sucesiva, cada pequeño espacio se utiliza de forma independiente, el reciclaje independiente, se puede controlar la cantidad de espacio una pequeña recuperación.

objetos criterios de basura es inaccesible.
Palpable incluye tres estados: 1, de accesibilidad: a partir de la raíz, para alcanzar el objeto;
2. ¿Puede resurrección: las referencias a objetos son liberados, pero el objeto puede finalizar () resurrección;
3, inaccesible: finalizar el objeto () se le ha llamado, y que no hay resurrección, en el estado inaccesible.
Cuando los objetos inaccesibles pueden ser reciclados.

Cuatro niveles de referencia: referencias fuertes, suaves, débiles, y las referencias citadas fantasma.
fuerte referencia al objeto que sea accesible, no se recicla. Suave, débiles, y las referencias citadas fantasma bajo ciertas condiciones pueden ser reciclados.

referencias suaves serán reciclados cuando la falta de espacio de almacenamiento dinámico;
referencias débiles sólo para ser encontrado, que será reciclado;
referencia fantasma se puede recuperar en cualquier momento, debe ser utilizado en conjunción con una cola de referencia, utilizado principalmente para seguir el proceso de recogida de basura.
proceso de recolección de basura, la aplicación llegará a su fin, no habrá respuesta, también conocido como STW.

Capítulo V, la asignación de memoria y la basura colector
Tipo recolector de basura: basura recogida en serie, en paralelo recolector de basura, colector CMS, colector G1.
Se refiere al colector de serie colección recolector de basura solo hilo. Caracterizado por un solo hilo, excluida. Cuando la recolección de basura, hilos necesita para hacer una pausa.
La nueva generación de recolector de basura en serie utilizando el algoritmo de copia.
recolector de basura de serie de edad usando un algoritmo de compresión marcador.

recolector de basura en paralelo sobre la base de la mejora de serie, una pluralidad de hilos para la recogida de basura.
ParNew colector: una nueva generación, reciclaje uso de multi-threading, recolector de basura paralelo.
ParallelGC colector: una nueva generación, reciclaje uso de multi-threading, recolector de basura paralelo. Enfoque en el rendimiento del sistema
de recuperación de ParallelOldGC: para el tiempo de edad, el uso de múltiples hilos para el reciclaje, recolector de basura en paralelo, el rendimiento del sistema de atención.

Recolector del CMS: multi-hilo colector paralelo, preocupado por las pausas del sistema. Los pasos son: bandera inicial (bandera objeto raíz), marca concurrente (marcar todos los objetos), limpieza previa, relabeled, purga concurrente, restablecimiento concurrente. El marcado inicial y re-marcado está ocupado por los recursos del sistema, otros usuarios pueden realizar juntos e hilo.

Collector G1: perteneciente colector generacional, un algoritmo de particionamiento usada, las características de concurrencia, paralelismo, la generacional GC, terminando el espacio, la previsibilidad.
proceso de recogida tiene cuatro fases: la nueva generación de GC, período marca concurrente, mezclados recogidos, es probable que continúe FullGC.
Si el objeto es grande, la nueva generación no encaja directamente en la vieja era.

Capítulo X, el sistema de carga de clases
carga del sistema se puede dividir en archivo de carga de clases, la conectividad y la inicialización. Qué conexión se divide en la verificación, la preparación y resolución.
Clase sólo se cargará en el momento que se debe utilizar; máquina virtual proporciona una clase o interfaz debe ser inicializado antes de su uso, para usar aquí se refiere al uso de la iniciativa, la iniciativa de utilizar cualquiera de las siguientes situaciones:
1, crear una instancia de una clase;
2, llamadas estáticas método de clase;
; 3, campos estáticos de interfaz usando la clase o (Final excluidos modificado)
clase 4, método main ()

Cuando se carga la clase, la máquina virtual hacer lo siguiente: 1, por el nombre completo, clase clase adquirido binario corriente; 2, el método de análisis de flujo binario de la estructura de clases del área de datos; 3, crea una instancia de la clase Class
clase de verificación: Formato comprobación, comprobación semántica, la verificación de código de bytes y verificación de referencias simbólicas.
Preparación: asignar espacio de memoria para la clase, y establecer el valor inicial.
Análisis: El símbolo clases, interfaces, campos y métodos de referencia en referencia directa.
método de inicialización de clase de la ejecución: inicialización

Máquina virtual Java creado tres categorías cargador de clases, respectivamente BootStrap ClassLoader, Extensión ClassLoader, App ClassLoader .
Al determinar si un cargador de clases, la aplicación seguirá el camino cargador de clases padre hasta el juicio hasta que el cargador de clases de arranque. La desventaja es cargador de clase superior no puede acceder al cargador de clases subyacente para cargar una clase.

Capítulo VIII, cerraduras, y concurrente
de acción para los recursos de bloqueo región crítica proteger no serán múltiples hilos de acceso y daños.
Los objetos almacenados en la disposición de memoria se pueden dividir en tres áreas: cabecera del objeto (Header), de datos de instancia (instancia de datos) y de relleno de alineación (el relleno)
de cabecera de objeto (objeto de encabezado) comprende dos piezas de información, una primera parte para el almacenamiento de objetos propios los datos de tiempo de ejecución, tales como código hash (hashCode), GC generacional cerradura edad hilo bandera del estado mantiene el bloqueo, el ID de inversión de hilo, marca de tiempo, etc. sesgo, esta parte de la longitud de los datos en 32 bits y de 64 bits una máquina virtual (no consideran puntero escena comprimido abierto), respectivamente, de 32 y 64 bits, oficialmente llamado "marca de la palabra".
Otra parte del tipo de puntero de cabecera de objeto, es decir, es los puntos del objeto al puntero de metadatos clase, la máquina virtual se determina por el puntero, que es una instancia de la clase de objeto. No todas las implementaciones de máquinas virtuales deben conservar el tipo de datos del puntero sobre el objeto, en otras palabras, para encontrar el objeto de información de metadatos no tiene que pasar por el objeto en sí. Además, si el objeto es una matriz de Java, en que el objeto debe tener una cabeza para el registro de la longitud de datos de la matriz, debido a que la máquina virtual puede determinar el tamaño del objeto Java por Java ordinaria objetos de información de metadatos, pero los metadatos de la matriz no se puede determinar el tamaño de la matriz.
Hay cuatro estado de la cerradura: no hay estado de bloqueo, tienden a bloquear, bloqueo de la cerradura de peso ligero y pesado. Con el bloqueo de la competición, puede actualizar de tope a tope sesgada bloqueo ligero, a continuación, actualizar bloqueo de peso pesado (cerradura, pero la actualización es unidireccional, es decir solamente actualizar de menor a mayor, no aparecerá la cerradura rebaja).

Ejemplos de datos: tienda real información válida, es decir, los diferentes tipos de contenido de los campos código de programa definidos, incluyendo la clase padre heredada y definición subclase.
Sin bloqueo (001)
sesgada de cierre (101)
de bloqueo de peso ligero (00)
de bloqueo de peso pesado (10)
encabezado objeto consta de las tres partes siguientes: marca de la palabra, un puntero a la clase, la longitud de la matriz (una matriz de objetos sólo tienen)
al general JVM por lo que el uso de bloqueos y marcar Palabra: 1. cuando no como una cerradura, que es un objeto ordinario, signo de la palabra objeto de registro HashCode, indicador de bloqueo es 01, si la persona que está sesgada de bloqueo 0.

2, cuando el objeto se trata como bloqueo de sincronización y hay un hilo A agarrar la cerradura, el indicador de bloqueo es todavía 01, pero si que tienden a bloqueo en un 1 antes de la grab grabación 23bit hilo Identificación de la cerradura, que entran en el estado de bloqueo sesgada .

3, cuando el hilo A de nuevo tratando de obtener un bloqueo, JVM encontraron que bloqueo de sincronización bandera objetos es 01, sea o no de bloqueo sesgado es 1, que es empujado hacia el estado, el ID del tema marca de la palabra grabada en ese hilo A ID propio, indica que el hilo una ha obtenido este bloqueo parcial, código de bloqueo de sincronización puede ser ejecutado.

4, cuando los intentos hilo B para obtener el bloqueo, JVM encontró el bloqueo de sincronización está sesgada hacia el estado, pero Mark Palabra en el registro de ID del tema no es B, entonces el hilo B se utilice en primer lugar la operación CAS tratando de obtener un bloqueo, dónde obtener la operación de bloqueo es probabilidades de tener éxito, porque el hilo de una liberación general no sesgada de forma automática de bloqueo. Si agarras el bloqueo tiene éxito, poner la marca de la palabra en el ID del tema Identificación del hilo B en su lugar, en nombre de los hilos de polarización B obtenido este bloqueo, puede realizar la sincronización de código de bloqueo. Si agarras el bloqueo falla, continúe con el paso 5.

5, el estado de bloqueo sesgada no se puede obtener el bloqueo, en nombre del bloqueo actual tiene algo de competencia, será actualizado a la cerradura de bloqueo sesgada ligero. La pila de JVM del hilo actual en el hilo abierto en un espacio separado, que mantiene el bloqueo marca de la palabra señalando puntero de objeto, preservando al mismo tiempo un puntero a un objeto en este espacio en la cerradura marca de la palabra. Ambas operaciones se guardan operación CAS, si el ahorro es exitosa, en nombre de la cerradura de la sincronización de hilos agarrado, puesto indicador de bloqueo Marcos fue cambiado en Word 00, puede realizar la sincronización de código de bloqueo. Si la salvación falla, lo que indica agarrar el fracaso de bloqueo, demasiada competencia, continúe con el paso 6.

6, bloqueo de peso ligero fallo de bloqueo de agarre, JVM utiliza bloqueos de giro, spinlock bloqueo no es un estado, pero los representantes siguen para volver a intentar, tratar de agarrar una cerradura. De principio JDK1.7, bloqueo de bucle está activado por defecto, la frecuencia de giro se determina por la JVM. Si tiene éxito agarre de bloqueo bloqueo de sincronización del código se ejecuta, y si falla, entonces proceda con el paso 7.

7, después de que el reintento de bloqueo del giro, si todavía no se puede obtener el bloqueo, el bloqueo se actualizará a bloqueo de sincronización de peso pesado, el indicador de bloqueo se cambia a 10. En este estado, se bloqueará la cerradura no agarrar el hilo.

acolchado Alineación: JVM requiere java objetos que representan tamaño de la memoria debe ser un múltiplo de 8 bits, la detrás de varios bytes para el tamaño del objeto se rellena a un múltiplo de 8 bits, ninguna función particular.

sistema de 32 bits, el primer objeto de destino como sigue: 25bit denota un valor de hash de un objeto, el objeto de 4 bits representa la edad, expresado 1bit bloqueo parcial, información 2bit indica la cerradura.
Aquí Insertar imagen Descripción
La figura muestra un formato de la cabecera del objeto en diferentes circunstancias.

Optimización de las cerraduras de nivel de aplicación: 1, para reducir el tiempo de retención de la cerradura; 2, la reducción de la granularidad de bloqueo; 3, bloqueo separada

CAS: Compara y el algoritmo de reemplazo; variable contiene tres parámetros a ser actualizados, el valor esperado, el nuevo valor

modelo de memoria de Java está construido alrededor de la atomicidad programación concurrente, la visibilidad, ordenando a estas tres características para construir.
El principal objetivo de las reglas de acceso programa modelo de memoria de Java definido para cada variable, es decir, almacenado en la memoria y los detalles subyacentes de tales variables retirados de la memoria en la variable JVM.
JMM ofrece todas las variables se almacenan en la memoria principal (memoria principal) en. Cada hilo tiene su propia memoria de trabajo (memoria de trabajo), hilo de la memoria de trabajo se guarda en la memoria principal de una copia de una copia de las variables de hilo utilizado, y el hilo de todas las operaciones sobre las variables (lectura, tareas, etc.) tiene que ser de la memoria de trabajo, y no leer y escribir las variables principales en la memoria directa (variable volátil todavía tiene una copia de la memoria de trabajo, pero debido a su especial secuencia de operaciones predeterminado, por lo que parece como si se lee directamente y el acceso de escritura en la memoria principal, en general). Entre los diferentes hilos no pueden acceder directamente a la memoria de trabajo de las otras variables, los valores se pasan entre los hilos tienen que ser realizado por la memoria principal.

relación de orden entre dos operaciones definidas en el modelo de memoria Java, si la operación se produce en la primera Una operación B, pueden afectar al funcionamiento de la operación A B producido se observó.
ocurre antes principios:
1, las reglas de secuencia de programa (Pragram orden Artículo): en un hilo, de acuerdo con un programa de fin de la operación de escritura EDITORIAL libro de códigos se produce después de la primera operación.
2, reglas variables volátiles (Regla variable volátil): escribir en un volátiles precede a la variable de la cara de esta variable operación de lectura se lleva a cabo
3, las reglas de bloqueo (Monitor de regla de bloqueo): Después de que ocurre una primera operación de desbloqueo en la cara de la misma una operación de bloqueo de la cerradura. Aquí hay que subrayar que la misma cerradura, y "hacia atrás" se refiere al orden en el tiempo.
4, transitividad (transitividad): Si se produce el procedimiento anterior A en el procedimiento B, la operación se produce en la primera operación B C, se puede concluir que la operación A es se produce operación C delante.
5, la regla de inicio de la rosca (rosca Regla de inicio): comenzar objeto Thread () Método primera acción en este hilo para cada ocurrencia.
6, el hilo finalmente la regla (Regla Terminación Thread): Todas las operaciones están por delante de la terminación del hilo se produce en la detección de este hilo, podemos terminar por Thread.join) método, hilo.isAlive valor (() de retorno, etc., para el segmento de detección el hilo ha terminado.
7, las reglas de rotura de hilo (hilo Regla Interrupción): método de llamada de interrupción hilo () primero se produjo en la detección de código de rosca interrumpida a se produce un evento de interrupción.
la seguridad concurrente medida todo lo que debe prevalecer sucede antes principio.

Capítulo IX, la estructura de archivo de clase
archivo de clase es un flujo binario a un conjunto de base de unidad de 8 bytes, cada uno de los elementos de datos están dispuestos en el orden exacto en el archivo de clase compacta, sin ningún separador intermedio, lo que hace que los contenidos almacenados en el archivo de clase casi todos los programas en ejecución. Esta estructura sólo dos tipos de datos: sin firmar y mesas.
Suma: fijar el valor 0xCAFEBABE
mínima versión: minor_version
máximo Versión: major_version
constantes contadores de la piscina: constant_pool_count
conjunto de constantes: constant_pool []
bandera de acceso: access_flags
clase actual: this_class
Padres Clase: super_class
número de interfaz: interfaces_count
tabla de interfaz: las interfaces []
campo Número fields_count:
tablas de campos: campos []
método número: methods_count
tabla de métodos: métodos []
serie de atributos: attributes_count
tabla de atributos: atributos []

Pertenece a los tipos de datos básicos, se puede utilizar para describir los números principales, símbolo de índice, o el número de valores de acuerdo con la configuración-8 UTF valor de cadena codificada, tamaño utilizado u1, u2, u4, U8 representar 1 byte, 2 bytes, 4 bytes y la sección 8 bytes.
Tabla: unsigned número es una pluralidad de tablas o como otros elementos de datos que constituyen el tipo de datos complejo, todas las tablas se utilizan para "_info" final. Tabla de datos se utiliza principalmente para describir la relación jerárquica de la estructura de material compuesto, tales como los métodos, campos.

Capítulo VI, herramientas de monitoreo de rendimiento
sistema de visualización de uso de los recursos en general: top comando
parámetros visualizados:
PID: un identificador único para el ID del proceso, el proceso
de usuario: El nombre de usuario real del propietario del proceso de
prioridad de planificación del proceso: PR. Algunos valor de este campo es 'RT'. Esto significa que estos procesos se ejecutan en modo de tiempo real
NI: buen valor del proceso (prioridad). El valor más pequeño significa una mayor prioridad. Un valor negativo indica una alta prioridad, los valores positivos indican baja prioridad
VIRT: memoria virtual utilizado por el proceso. La cantidad total de memoria virtual utilizado por el proceso, la unidad kb. El canje de la RES + = VIRT
la RES: tamaño de la memoria residente. tamaño de intercambio no residente en memoria de la memoria física utilizada por la tarea. El proceso utilizado, no cambiados de tamaño de la memoria física en kB
SHR: SHR es el proceso de utilización de la memoria compartida. tamaño de la memoria compartida en kb
S: Este es el estado del proceso. Tiene las siguientes diversos valores: D - estado de sueño ininterrumpido; R - modo de funcionamiento; S - estado de reposo; T - rastreado o detenido; Z - estado zombi
% de la CPU: Desde la última actualización de la tarea actual utilizando porcentaje de tiempo de CPU
% MEM: el porcentaje de memoria física disponible utilizado por el proceso de
time +: después de todo el tiempo de CPU para iniciar la tarea que ahora se utiliza en centésimas de segundo
comando: comando para ejecutar el proceso utilizado por

Publicado 45 artículos originales · ganado elogios 9 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/zhanglinlove/article/details/89474952
Recomendado
Clasificación