Optimizar Java

Book description

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

El ajuste del rendimiento es una ciencia experimental, pero eso no significa que los ingenieros deban recurrir a conjeturas y folclore para hacer el trabajo. Sin embargo, a menudo es así. Con este libro práctico, los tecnólogos Java de nivel intermedio a avanzado que trabajan con plataformas complejas aprenderán a ajustar el rendimiento de las aplicaciones Java en la nube mediante un enfoque cuantitativo, verificable y repetible.

En respuesta a la ubicuidad de la computación en nube, esta edición revisada aborda temas que son clave para el alto rendimiento de las aplicaciones Java en la nube. Muchos recursos sobre rendimiento tienden a centrarse en la teoría y los aspectos internos de las máquinas virtuales Java, pero este libro trata los aspectos técnicos de bajo nivel en el contexto de los aspectos prácticos del ajuste del rendimiento y examina una amplia gama de aspectos. No hay recetas sencillas, consejos y trucos, ni algoritmos que aprender. En su lugar, el análisis del rendimiento es un proceso de definición y determinación de los resultados deseados y de utilización de conocimientos técnicos profundos para informar sobre cómo alcanzar esos objetivos.

Con este libro, podrás:

  • Aprenderás cómo los principios y la tecnología Java aprovechan al máximo el hardware, los sistemas operativos y las pilas en la nube modernos
  • Examinar los escollos de la medición de las cifras de rendimiento de Java y los inconvenientes de la microevaluación de rendimiento (microbenchmarking)
  • Comprender cómo empaquetar, desplegar, operar y depurar aplicaciones Java/JVM en entornos de nube modernos
  • Aplicar enfoques emergentes de observabilidad para obtener una comprensión profunda de las aplicaciones nativas de la nube
  • Utilizar técnicas de rendimiento del lenguaje Java, incluidas las formas concurrentes y distribuidas

Table of contents

  1. Prólogo
  2. Prefacio
    1. Convenciones utilizadas en este libro
    2. Utilizar ejemplos de código
    3. Safari O'Reilly
    4. Cómo contactar con nosotros
    5. Agradecimientos
  3. 1. Optimización y rendimiento definidos
    1. Rendimiento de Java: el camino equivocado
    2. Visión general del rendimiento de Java
    3. El rendimiento como ciencia experimental
    4. Una taxonomía para el rendimiento
      1. Rendimiento
      2. Latencia
      3. Capacidad
      4. Utilización
      5. Eficacia
      6. Escalabilidad
      7. Degradación
      8. Conexiones entre los observables
    5. Lectura de gráficos de rendimiento
    6. Resumen
  4. 2. Visión general de la JVM
    1. Interpretación y carga de clases
    2. Ejecutar código byte
    3. Presentación de HotSpot
      1. Presentación de la Compilación Justo a Tiempo
    4. Gestión de la memoria de la JVM
    5. Threading y el modelo de memoria de Java
    6. Conoce las JVM
      1. Nota sobre las licencias
    7. Monitoreo y herramientas para la JVM
      1. VisualVM
    8. Resumen
  5. 3. Hardware y sistemas operativos
    1. Introducción al hardware moderno
    2. Memoria
      1. Cachés de memoria
    3. Características del procesador moderno
      1. Memoria intermedia de traducción
      2. Predicción de ramas y ejecución especulativa
      3. Modelos de memoria de hardware
    4. Sistemas operativos
      1. El Programador
      2. Cuestión de tiempo
      3. Conmutadores de contexto
    5. Un modelo de sistema sencillo
    6. Estrategias básicas de detección
      1. Utilizar la CPU
      2. Recogida de Basura
      3. E/S
      4. Simpatía mecánica
    7. Virtualización
    8. La JVM y el sistema operativo
    9. Resumen
  6. 4. Patrones y antipatrones de pruebas de rendimiento
    1. Tipos de pruebas de rendimiento
      1. Prueba de latencia
      2. Prueba de rendimiento
      3. Prueba de carga
      4. Prueba de esfuerzo
      5. Prueba de resistencia
      6. Prueba de planificación de la capacidad
      7. Prueba de degradación
    2. Manual de buenas prácticas
      1. Rendimiento descendente
      2. Crear un entorno de pruebas
      3. Identificar los requisitos de rendimiento
      4. Cuestiones específicas de Java
      5. Pruebas de rendimiento como parte del SDLC
    3. Introducción a los antipatrones de rendimiento
      1. Aburrimiento
      2. Relleno del currículum
      3. Presión de grupo
      4. Falta de comprensión
      5. Problema incomprendido/inexistente
    4. Catálogo de antipatrones de rendimiento
      1. Distraído por el brillo
      2. Distraído por lo simple
      3. Asistente de ajuste del rendimiento
      4. Afinación Folclórica
      5. El burro de la culpa
      6. Perder la visión de conjunto
      7. UAT es mi escritorio
      8. Los datos de producción son difíciles
    5. Sesgos cognitivos y pruebas de rendimiento
      1. Pensamiento reduccionista
      2. Sesgo de confirmación
      3. Niebla de guerra (Acción sesgada)
      4. Sesgo de riesgo
      5. La paradoja de Ellsberg
    6. Resumen
  7. 5. Microbenchmarking y estadísticas
    1. Introducción a la medición del rendimiento de Java
    2. Introducción a JMH
      1. No hagas microbenchmark si puedes evitarlo (una historia real)
      2. Heurística para saber cuándo hacer microbenchmark
      3. El Marco JMH
      4. Ejecutar puntos de referencia
    3. Estadísticas de rendimiento de la JVM
      1. Tipos de error
      2. Estadísticas no normales
    4. Interpretación de las estadísticas
    5. Resumen
  8. 6. Comprender la Recogida de Basura
    1. Presentación de Mark y Sweep
      1. Glosario de Recogida de Basura
    2. Presentación del Tiempo de ejecución HotSpot
      1. Representar objetos en tiempo de ejecución
      2. GC Raíces y Arenas
    3. Asignación y vida útil
      1. Hipótesis generacional débil
    4. Recogida de basura en HotSpot
      1. Asignación hilo-local
      2. Colección Hemisférica
    5. Los Coleccionistas Paralelos
      1. Colecciones Paralelas Jóvenes
      2. Antiguas colecciones paralelas
      3. Limitaciones de los colectores paralelos
    6. El papel de la asignación
    7. Resumen
  9. 7. Recogida de Basura Avanzada
    1. Compensaciones y colectores enchufables
    2. Teoría Concurrente GC
      1. Puntos seguros de la JVM
      2. Marcado tricolor
    3. CMS
      1. Cómo funciona el CMS
      2. Banderas JVM básicas para CMS
    4. G1
      1. G1 Disposición del montón y regiones
      2. G1 Diseño del algoritmo
      3. Fases G1
      4. Banderas JVM básicas para G1
    5. Shenandoah
      1. Compactación concurrente
      2. Obtención de Shenandoah
    6. C4 (Azul Zing)
      1. La barrera del valor cargado
    7. Equilibrada (IBM J9)
      1. J9 Cabeceras de objeto
      2. Matrices grandes en equilibrado
      3. NUMA y Equilibrado
    8. Coleccionistas Legacy HotSpot
      1. Serial y SerialAntiguo
      2. CMS incremental (iCMS)
      3. Combinaciones de CG obsoletas y eliminadas
      4. Epsilon
    9. Resumen
  10. 8. Registro, monitoreo, ajuste y herramientas de GC
    1. Introducción al registro GC
      1. Activar el registro GC
      2. GC Logs frente a JMX
      3. Inconvenientes de JMX
      4. Ventajas de los datos de registro GC
    2. Herramientas de análisis de registros
      1. Censum
      2. GCViewer
      3. Diferentes visualizaciones de los mismos datos
    3. Ajuste básico del CG
      1. Comprender la asignación
      2. Comprender el Tiempo de Pausa
      3. Hilos Colectores y Raíces GC
    4. Ajuste de la GC paralela
    5. Ajuste del CMS
      1. Fallos del modo concurrente debidos a la fragmentación
    6. Afinación G1
    7. jHipo
    8. Resumen
  11. 9. Ejecución de código en la JVM
    1. Visión general de la interpretación del código binario
      1. Introducción al Bytecode de la JVM
      2. Intérpretes simples
      3. Detalles específicos del punto caliente
    2. Compilación AOT y JIT
      1. Recopilación AOT
      2. Compilación JIT
      3. Comparación de la compilación AOT y JIT
    3. Aspectos básicos del HotSpot JIT
      1. Palabras Klass, Vtables y Swizzling de Punteros
      2. Registro Compilación JIT
      3. Compiladores dentro de HotSpot
      4. Compilación por niveles en HotSpot
    4. La caché de código
      1. Fragmentación
    5. Ajuste JIT simple
    6. Resumen
  12. 10. Comprender la compilación JIT
    1. Presentación de JITWatch
      1. Vistas básicas de JITWatch
      2. Depurar JVMs y hsdis
    2. Introducción a la compilación JIT
    3. Enlazando
      1. Límites de entrada
      2. Ajuste del subsistema Inlining
    4. Desenrollar bucle
      1. Resumen del desenrollado de bucles
    5. Análisis de la fuga
      1. Eliminar las asignaciones de montón
      2. Análisis de cerraduras y fugas
      3. Limitaciones del análisis de fugas
    6. Despacho monomórfico
    7. Intrínsecos
    8. Sustitución en la pila
    9. Puntos seguros revisitados
    10. Métodos básicos de biblioteca
      1. Límite superior de tamaño del método para la ingestión
      2. Límite superior del tamaño del método para la compilación
    11. Resumen
  13. 11. Técnicas de rendimiento del lenguaje Java
    1. Optimizar las Colecciones
    2. Consideraciones de optimización para las listas
      1. Lista de matrices
      2. ListaEnlazada
      3. ArrayList frente a LinkedList
    3. Consideraciones de optimización para los mapas
      1. HashMap
      2. Mapa del árbol
      3. Falta de MultiMapa
    4. Consideraciones de optimización para conjuntos
    5. Objetos de dominio
    6. Evitar la Finalización
      1. Historia de guerra: Olvidarse de limpiar
      2. ¿Por qué no utilizar la Finalización para resolver el problema?
      3. prueba-con-recursos
    7. Mangos de los métodos
    8. Resumen
  14. 12. Técnicas de rendimiento concurrente
    1. Introducción al paralelismo
      1. Java Concurrencia Fundamental
    2. Comprender el JMM
    3. Construir bibliotecas de concurrencia
      1. Inseguro
      2. Atómica y CAS
      3. Cerraduras y Spinlocks
    4. Resumen de bibliotecas concurrentes
      1. Bloqueos en java.util.concurrent
      2. Cerraduras de lectura/escritura
      3. Semáforos
      4. Colecciones concurrentes
      5. Pestillos y Barreras
    5. Ejecutores y abstracción de tareas
      1. Introducción a la ejecución asíncrona
      2. Seleccionar un ExecutorService
      3. Horquilla/Junta
    6. Concurrencia Java Moderna
      1. Corrientes y corrientes paralelas
      2. Técnicas sin bloqueo
      3. Técnicas basadas en el actor
    7. Resumen
  15. 13. Perfil
    1. Introducción a los perfiles
    2. Sesgo de muestreo y Safepointing
    3. Herramientas de perfilado de ejecución para desarrolladores
      1. Perfilador VisualVM
      2. JProfiler
      3. TuKit
      4. Grabadora de Vuelo y Control de Misión
      5. Herramientas operativas
    4. Perfiladores modernos
    5. Perfil de Asignación
    6. Análisis del volcado de pilas
      1. hprof
    7. Resumen
  16. 14. Registro y mensajería de alto rendimiento
    1. Registro
      1. Microbenchmarks de registro
    2. Diseñar un registrador de menor impacto
    3. Baja latencia con bibliotecas de lógica real
      1. Agrona
      2. Codificación binaria simple
      3. Aeron
      4. El diseño de Aeron
    4. Resumen
  17. 15. Java 9 y el futuro
    1. Pequeñas mejoras de rendimiento en Java 9
      1. Caché de código segmentado
      2. Cuerdas Compactas
      3. Nueva concatenación de cadenas
      4. Mejoras en el compilador C2
      5. Nueva versión del G1
    2. Java 10 y futuras versiones
      1. Nuevo proceso de liberación
      2. Java 10
    3. Inseguro en Java 9 y posteriores
      1. VarHandles en Java 9
    4. Proyecto Valhalla y Tipos de Valor
    5. Graal y Trufa
    6. Futuras direcciones en Bytecode
    7. Futuras direcciones en concurrencia
    8. Conclusión
  18. Índice

Product information

  • Title: Optimizar Java
  • Author(s): Benjamin J Evans, James Gough, Chris Newland
  • Release date: September 2024
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781098199210