Comprensión profunda del directorio de la máquina virtual Java
Expresar gratitud/gratitud
Parte 1 Introducción a Java
Capítulo 1 Acercamiento a Java/2
1.1 Descripción general/2< / p>
1.2 Sistema de tecnología Java/3
1.3 Historia del desarrollo de Java/5
1.4 Mirando hacia el futuro de la tecnología Java/9
1.4 .1 Modularidad/9
1.4.2 Lenguaje mixto/9
1.4.3 Paralelismo multinúcleo/11
1.4.4 Enriquecer aún más la sintaxis/ 12
1.4.5 Máquina virtual de 64 bits/13
1.5 combate real: compila JDK/13 tú mismo.
1.5.1 Obtener el código fuente JDK/13.
1.5.2 Requisitos del sistema/14
1.5.3 Construyendo el entorno de compilación/15
1.5.4 Preparando dependencias/17
Compilado con 1.5.5/18
1.6 Resumen de este capítulo/21
La segunda parte es el mecanismo de administración automática de memoria
Capítulo 2 Área de memoria de Java y excepción de desbordamiento de memoria/24
2.1 Descripción general/24
2.2 Área de datos de tiempo de ejecución/25
2.2.1 Contador de programa/25
2.2.2 Pila de máquina virtual Java/26
2.2.3 Pila de método local/27
2.2.4 Montón de Java/27
2.2.5 Método área /28
2.2.6 Grupo constante de tiempo de ejecución/29
2.2.7 Memoria directa/29
2.3 Acceso a objetos/30
2.4 Combate práctico: excepción OutOfMemoryError/32
2.4.1 Desbordamiento del montón de Java/32
2.4.2 Desbordamiento de la pila de máquinas virtuales y métodos locales/35
2.4.3 Desbordamiento del grupo constante de tiempo de ejecución/38
2.4.4 Desbordamiento del área de método/39
2.4.5 Desbordamiento de memoria directa local/41
2.5 Esto Descripción general del capítulo/42
Capítulo 3 Recolector de basura y estrategia de asignación de memoria/43
3.1 Descripción general/43
3.2 ¿Está muerto el objeto? / 44
3.2.1 Algoritmo de recuento de referencias/44
3.2.2 Algoritmo de búsqueda raíz/46
3.2.3 Discutir la cita nuevamente/47
3.2.4 ¿Supervivencia o destrucción? / 48
3.2.5 Área del método de reciclaje/50
3.3 Algoritmo de recolección de basura/51
3.3.1 Algoritmo de limpieza de etiquetas/51
3.3.2 Algoritmo de copia/52
3.3.3 Algoritmo de clasificación de marcas/54
3.3.4 Algoritmo de recolección de generación/54
3.4 Recolección de basura colector/55
3.4.1 Recolector en serie/56
3.4.2 Nuevo colector/57
3.4.3 Recolector de barrido paralelo/ 59
3.4.4 Colector antiguo en serie/60
3.4.5 Colector antiguo paralelo/61
Colector CMS/61
3.4.7 Colector G1/ 64
3.4.8 Resumen de parámetros del recolector de basura/64
3.5 Estrategia de reciclaje y asignación de memoria/65
3.5 .1 Los objetos se asignan preferentemente en Eden/ 66
3.5.2 Los objetos grandes entran directamente en la vejez/68
3.5.3 Los objetos que sobreviven a largo plazo entrarán en la vejez/69
3.5.4 Determinación de antigüedad de objetos dinámicos/71
3.5.5 Garantía de asignación de espacio/73
3.6 Descripción general de este capítulo/75
Capítulo 4 Monitoreo y monitoreo del rendimiento de la máquina virtual herramientas de solución de problemas/76
4.1 Descripción general/76
4.2 Herramientas de línea de comandos JDK/76
4.2.1 jps: herramienta de estado del proceso de máquina virtual/79 p>
4.2.2 jstat: herramienta de monitoreo de estadísticas de máquinas virtuales/80
4.2.3 jinfo: herramienta de información de configuración de Java/82
4.2. tool/82
4.2.5 jhat: herramienta de análisis de instantáneas para volcados de montón de máquinas virtuales/84
4.2.6 jstack: herramienta de seguimiento de pila de Java/85
4.3 Herramientas de visualización/87
4
.3.1 JConsole: Consola de administración y monitoreo de Java/88
4.3.2 VisualVM: Herramienta integrada de resolución de problemas/96
4.4 Resumen de este capítulo/105
Capítulo 5 Análisis y práctica de casos de optimización/106
5.1 Descripción general/106
5.2 Análisis de casos/106
5.2.1 Implementación del programa en una estrategia de hardware de alto rendimiento/ 106
5.2.2 Desbordamiento de memoria causado por sincronización entre clústeres/109
5.2.3 Error de desbordamiento causado por memoria fuera del montón/110
5.2. 4 Los comandos externos hacen que el sistema se ralentice/112
5.2.5 El proceso JVM del servidor falla/113
5.3 Combate práctico: ajuste de velocidad de carrera del eclipse lunar/114
5.3 .1 Estado de ejecución del programa antes del ajuste/114
5.3.2 Cambios de rendimiento y problemas de compatibilidad al actualizar JDK 1.6/117
5.3.3 Optimización del tiempo de compilación y carga de clases time /122
5.3.4 Ajustar la configuración de la memoria para controlar la frecuencia de recolección de basura/126
5.3.5 Seleccionar un recolector para reducir la latencia/130.
5.4 Resumen de este Capítulo/133
La tercera parte del subsistema de ejecución de la máquina virtual
Capítulo 6 Estructura de archivos de clase/136
6.1 Descripción general/136
6.2 Piedras angulares irrelevantes/136
6.3 Estructura de los archivos de clase/138
6.3.1 Números mágicos y versiones de archivos de clase/139
6.3.2 Hengchi/141
6.3.3 Bandera de entrada/147
6.3.4 Índice de clase de colección, índice principal e índice de interfaz/148
6.3.5 Colección de tablas de campos/149
6.3.6 Colección de tablas de métodos/153
6.3.7 Colección de listas de propiedades/155
6.4 Desarrollo de estructura de archivos de clase/168
6.5 Resumen de este capítulo/170
Capítulo 7 Mecanismo de carga de clases de máquina virtual/171
7.1 Descripción general/171 p >
7.2 Tiempo de carga de clases/172
7.3 Proceso de carga de clases/176
7.3.1 Carga/176
7.3.2 Verificación/ 178
7.3.3 Preparación/181
Análisis/182
7.3.5 Inicialización/186
7.4 Cargador de clases/189
7.4.1 Clases y cargadores de clases/189
7.4.2 Modelo de delegación de la empresa matriz/191
7.4.3 Destrucción del modelo de delegación de la empresa matriz/194
7.5 Resumen de este capítulo/197
Capítulo 8 Motor de ejecución de código de bytes de máquina virtual/198
8.1 Descripción general/198
8.2 Estructura del marco de pila en tiempo de ejecución /199
8.2.1 Tabla de variables locales/199
8.2.2 Pila de operandos/204
8.2.3 Conexión dinámica/ 206
8.2.4 Dirección de devolución del método/206
8.2.5 Información adicional/207
8.3 Llamada al método/207
8.3 .1 Análisis/207
8.3.2 Transferencia/209
8.4 Motor de interpretación y ejecución de bytecode basado en pila/221
8.4.1 Interpretación y ejecución/ 221
8.4.2 Conjunto de instrucciones basado en pila y conjunto de instrucciones basado en registros/223
8.4.3 Intérprete basado en pila/224 proceso de ejecución
8.5 Descripción general de este capítulo/230
Capítulo 9 Casos y prácticas del subsistema de carga y ejecución de clases/231
9.1 Descripción general/231
9.2 Análisis de casos/231
9.2 .1 Tomcat: Arquitectura de cargador de clases ortodoxa/232
9.2.2 OSGi: Arquitectura de cargador de clases flexible/235
9.2 Tecnología de generación de código de 3 bytes e implementación de proxy dinámico/238.
9.2.4 Traducción inversa: entre versiones de JDK/242
9.3 Combate práctico: implemente la función de ejecución remota usted mismo/246
Objetivo/246
9.3.2 Idea/247
9.3.3 Implementación/248
9.3.4 Verificación/255 p>
9.4 Descripción general de este capítulo/256
Parte 4 Compilación del programa y optimización del código
Capítulo 10 Optimización temprana (período de compilación)/258
10.1/258 Descripción general
10.2 Compilador Javac/259
10.2.1 Código fuente y depuración de Javac/259
10.2.2 Análisis y llenado de la tabla de símbolos /262
10.2.3 Procesador de anotaciones/264
>10.2.4 Análisis semántico y generación de bytecode/264
10.3 El sabor del azúcar sintáctico de Java/268
10.3.1 Genéricos y borrado de tipos/268
10.3.2 Bucles automáticos de boxeo, unboxing y recorrido/273
10.3.3 Compilación condicional/275
10.4 Combate práctico: procesador de anotaciones plug-in/276
10.4.1 Objetivos reales/276
10.4.2 Implementación de código/277
10.4.3 Operación y pruebas/284
10.4.4 Otros casos de aplicación /286
10.5 Resumen de este capítulo/286
Capítulo 11 Optimización de etapa tardía (período de operación)/287
11.1 Descripción general/287
11.2 Compilador justo a tiempo/288 en máquina virtual Hotspot
11.2.1 Intérprete y compilador/288
11.2.2 Objetos de compilación y condiciones de activación/291 p>
11.2.3 Proceso de compilación/294
11.2.4 Ver y analizar resultados de compilación en tiempo real/297
11.3 Tecnología de optimización de compilación/301
11.3.1 Descripción general de la tecnología de optimización/301
11.3.2 Masculino * * * eliminación de subexpresiones/305
11.3.3 Eliminación de verificación de límites de matriz/307
11.3.4 Método en línea/307
11.3.5 Análisis de escape/309
11.4 Comparación entre compiladores Java y C/C/311
11.5 Resumen de este capítulo /313
Parte 5 Concurrencia eficiente
Capítulo 12 Modelo de memoria Java y subprocesos/316
12.1/316 Descripción general
12.2 Eficiencia y consistencia del hardware/317
12.3 Modelo de memoria Java/318
12.3.1 Memoria principal y memoria de trabajo/319
12.3.2 Memoria interacción/ 320
12.3.3 Reglas especiales para variables mutables/322
12.3.4 Reglas especiales para variables largas y variables dobles/327
12.3.5 Sexualidad, visibilidad y orden de los átomos/328
12.3.6 Principio de primera aparición/330
12.4 Java y subprocesos/333
Implementación de 12.4.1 Subprocesos/ 333
12.4.2 Programación de subprocesos Java/337
12.4.3 Transición de estado/339
12.5 Resumen de este capítulo/341
Capítulo 13 Seguridad de subprocesos y optimización de bloqueo/342
13.1/342 Descripción general
13.2 Seguridad de subprocesos/343
13.2.1 Seguridad de subprocesos en lenguaje Java/343 p>
13.2.2 Método de implementación de seguridad de subprocesos/348
13.3 Optimización de bloqueo/356
13.3.1 Bloqueo de giro y giro adaptativo/356
13.3.2 Eliminación de bloqueo/357
13.3.3 Desbastado de bloqueo/358
13.3.4 Bloqueo ligero/358
13.3.5 Bloqueo de compensación/ 361
13.4 Resumen de este capítulo/362
Apéndice A Serie de máquinas virtuales Java/363
Apéndice B Lista de instrucciones de código de bytes de máquinas virtuales/366
Apéndice C Tabla de parámetros principales de la máquina virtual Hotspot/372
Apéndice D Introducción al lenguaje de consulta de objetos (OQL)/376
Apéndice E Seguimiento histórico de la versión JDK/383