Red de conocimiento informático - Conocimiento sistemático - Comprensión profunda del directorio de la máquina virtual Java

Comprensión profunda del directorio de la máquina virtual Java

Prefacio

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

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

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

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

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

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