Певненко А. А. - Тестирование, контроль и оптимизация кода Java [2025, PDF, RUS]

Страницы:  1
Ответить
 

tsurijin

Стаж: 5 лет 8 месяцев

Сообщений: 3246


tsurijin · 29-Мар-26 09:29 (3 месяца 28 дней назад, ред. 29-Мар-26 09:40)

Тестирование, контроль и оптимизация кода Java
Год издания: 2025
Автор: Певненко А. А.
Издательство: Наука и Техника
ISBN: 978-5-907592-82-7
Язык: Русский
Формат: PDF
Качество: Отсканированные страницы + слой распознанного текста
Количество страниц: 383
Описание: Это практическое руководство охватывает весь цикл разработки высокопроизводительного кода: от понимания внутренней работы JVM до настройки сборщиков мусора, анализа JIT-компиляции, применения JMH, работы с многопоточностью и построения эффективных CI/CD пайплайнов и многое другое.
Вы узнаете: какие инструменты и подходы позволяют выявлять узкие места; как замерять реальные метрики; оптимизировать многопоточные и реактивные приложения; правильно кешировать и анализировать байт-код; использовать современные сборщики мусора и эффективно оптимизировать мобильные и десктопные Java-приложения.
Отдельные главы посвящены виртуальным потокам, модулярности, Observability и работе в контейнерах и с большими данными (Spark, Flink).
Прочитав книгу, Вы получите:
· целостное понимание производительности Java-приложений;
· знания о том, как проводить тестирование под нагрузкой и отслеживать деградации в CI/CD;
· десятки примеров, шаблонов и советов для ускорения приложений как на сервере, так и на десктопе или Android;
· рекомендации по выбору GC, построению observability-стека и оптимизации всего пути.
Книга будет полезна как опытным Java-разработчикам, так и тем, кто только начинает осваивать продвинутые аспекты производительности.
Примеры страниц (скриншоты)
Оглавление
Введение .......................................... ....... .. ............ .... .. ........... ... ............. 21
В.1. Цель и задачи книги ............. ......... .... ... .. .. ........ ... ..... .......... .... ........ 22
В.2. Как работать с книгой ...... .... .. ................ .. .. ....... .. ....... ......... ............. 23
В.3. Почему важна оптимизация кода? ...... ... .. .... ...... .. .. .... ........ ................. 24
В.4. Обзор современных инструментов и подходов .. .... .. ........... ........... 26
8.4.1. Java Virtual Machine (JVM) и ее внутреннее устройство ... .. .......... . 26
8.4.2. Java Microbenchmark Harness (JMH) .... .. ............................ .. .. .. 27
8.4.3. Оптимизация алгоритмов и структур данных .... .. .......... .... .. ... 27
8.4.4. Многопоточное программирование и параллельные
вычисления .... ...... .... .. .. ...... ..... .. .... .... ........ ....... .... .. ... ....... ...... ........ 27
8.4.5. Работа с базами данных , вводом-выводом и памятью ...... .... 28
ГЛАВА 1. Основы производительности Java ........ .......... ... ............ 29
1.1. Внутреннее устройство JVM .. .. .... .. ................. ............. .. .. .. ..... .. ...... 31
Архитектура JVM: из чего состоит виртуальная машина .......... .. .. ... 32
1. Класс-лоадер (Class Loader) .... .. .. .. ......................... .. ............ ... .... .. 32
2. Управление памятью (Меmогу Management) ...... .. ...................... .. 33
3. JIТ-компилятор (Just-ln-Тime Compiler) .. .. .... .... .. .. .......................... 34
4. Сборщик мусора (Garbage Collector, GC) ......... .... .. .. .... .. .... .. .. .. .. ... 35
1.2. Основные метрики производительности .. ........ .... .... ...... .... ........ .... .. 36
1. Время отклика (Response Time) ....................... ..... ............. .. .......... 37
2. Пропускная способность (Throughput) .. .. ... ........................ .. ...... .. .. 38
3. Использование процессора и памяти (CPU/Memory Usage) .. ...... 38
4. Активность сборщика мусора (GC Activity) .................................... 39
5. Количество потоков и их активность .... ... .. ...... ............. ..... ... .. ........ 40
1.3. Профилирование и анализ ....................... ... .... ... ......... .. ......... .... ..... .. ... 41
Что такое профилирование? ....... .. .... ..... ... ..... ..... ... ....... ...... ... .. .. ..... .. .41
Тестирование, контроль и о пти м и за ция кода Java
Инструменты профилирования .. ......... .... ...... .... ...... .... .. ......... ........... .42
1.4. Практические рекомендации ......... .... .......... ................ .... .... .... .... ......... 45
Выводы .......... ... .. .. ...... ............... ..... .. ..... .... .. .......... .. ...... ...... ... ......... 45
JIТ-оптимизации ......... .................. .. ............................................................. .47
2.1. Введение в HotSpot и JIТ-компиляцию ...... ... ..... ..... ........ ... .. ..... ....... ... 48
2.2. Архитектура HotSpot ........... .. ................ ....... ......... ................ .. ..... .......... 49
2.3. Принципы работы JIТ-компилятора ..... ....... .. .. ..... ... ........... ........ .. .... ... 50
2.4. Алгоритмы и техники JIТ-оптимизации ... .. ..... .. .. ... ...... .. ........ ..... ... .. ... 51
2.5. Роль HotSpot в управлении памятью .... ...... ...... ... ....... ........ .. .. ..... .... .. 52
2.6. Визуализация и мониторинг JIТ-компиляции ........ .... ..... ... .............. .. 52
2.7. Тюнинг JIТ-компиляции .... .... .......... ... ... .. ... ......... .... ....... .. .. ... .. ..... 53
2.8. JIT и особенности многопоточных приложений ... .. ......... ... .. ... .. .... ... 54
2.9. Инструменты для визуализации и анализа JIТ-компиляции ...... .... 55
2.10. Проблемы и ограничения JIТ-компиляции ....... .. .. ............. .. ... ......... 56
2.11. Применение JIT в реальных приложениях .. .. ........ ....... .. ... .. .. .......... 57
2.12. Будущее JIТ-оптимизаций ............... ............................................. .... ... 57
Выводы ...... .. .. ...... ..... ... ... .... ....... ........ ... ... .. .. .... ..... ..... ... ... .............. 58
ГЛАВА 3. Введение в JMH (Java Microbenchmark Harness) ...................................... 61
3.1. Что такое JMH и зачем он нужен ................................. ... .... .. ... ... .. .. .. .... 62
3.2. Установка и настройка JMH .. ....... ... .... .......... ........................................ 63
Maven ......... ... .................. ..... .. ................. ...... ............ ................ ............ 63
Gradle ... ...... ... ..... .... .... ... ............................. .... .............. ..... .... .............. .. 65
3.3. Основные концепции и аннотации JMH ..... .. .. ............................ .... ... 65
@Benchmark ..... ....... ..... .... .. ... .. ...... ..... ..... .... ... ............ ....... ........... ... ..... 65
@BenchmarkMode ..... ........ .. .. .... ..... ... ..... ... .. ....... ..... .... .. ... .... .... ............ 65
@State ... .... .............. .... .. ........... ...... ...... .... ... ....... ..... .. ...... ......... .... ........ 66
@Setup и@TearDown .. ........ ... .. ... .. ...... .... ... .. ... ..... ........ .......... .. ... .... .... 66
Пример бенчмарка ......... .... .. .... ... .... .. ... .... ... ... ....... .... ..... ... .. .. ..... ... .... 67
Анализ результатов ... ..... .... .. ....... .... .. ....... .. ... .... .................... ........... ... 67
Выводы .. ... .. ...... ....... .. .. .. ...... ...... .... ........ .. ....... .. ............... ............... 68
ГЛАВА 4. Создание и выполнение бенчмарков с JMH ... .. ................................... 71
4.1. Структура простого бенчмарка ... ... ... .. ......... ...... ... .. .. ....... ...... .... .... ... ... 73
4.1.1. Основные элементы .. ....... .. ..... ........ ....... ..... ... .. .. .. ............ ...... ... 73
4.1.2. Пояснения к коду ... ... .. ... .. ...... .... .. .... ............... ...... .. ..... .... ....... ... 74
4.2. Настройка параметров и режимов работы ...... .. .... .. .. ... .. .. .... ... ... .... ... 75
4.2.1. Параметры бенчмарков .......... .. .. ..... ...... ..... ........ .. ..... ... ... .. ... .... 75
4.2.2. Режимы работы .......... ... ...... ...... .... ..... .. ...... .... ..... ... ..... ..... ......... 76
4.3. Анализ результатов бенчмарков .. .... ....... .... ... ..... ... ... ....... ... ................ 77
Выводы ..... .... .. ..... ...... ..... ... ........ .. ... .. ..... ........ ... ... .......... .......... ... .... 77
ГЛАВА 5. Оптимизация алгоритмов и структур данных ... ..................................... 79
5.1. Краткий обзор структур данных ..... .. ... ...... .......... .... ......... ......... .... ...... 81
5.1 .1. Массивы ..................... .... .... .. .. ....... .. ... .... ..... .... ...... .... ... ... ....... .... 81
5.1.2. Связанные списки (Linked List) ........... ......... .. ... ...... ... ... ..... .. ..... 82
5.1.3. Стек (Stack) ... .. ... .... ...... .......... .... .... ............. ...... ... .. ... ...... .. .. ...... .83
5.1.4. Очередь (Queue) ............................. .. .. ... ..... ............ .... .... ... ... ..... 84
5.1.5. Хеш-таблица (Hash ТаЫе) ....... .... ...... ........ ... ......... ..... ............... 85
5.1.6. Дерево (Тгее) ... ......... .. ........... ........ .. .... ...... ...... .... .... ............ ...... 85
5.1.7. Графы (Graphs) .......... ..................... ........... .. ..... .......... ...... .. .... ... 86
5.2. Выбор правильных структур данных ......... .. .. .... ............. ... .. ....... ... ... 87
5.3. Оптимизация алгоритмов сортировки и поиска ... .. ........ ...... ...... .. .... 88
Тестирование , контроль и оптимизация кода Java
5.3.1. Оптимизация алгоритмов сортировки ...... .. ............................. 88
5.3.2. Оптимизация алгоритмов поиска .. ........ ....... .. ........ .. .... .. .......... 88
Сортировка слиянием ............. ...... ... .. .... ... .... ... .... ... .. ...... ... .. ..... 88
Оптимизация сортировки слиянием .... ... ......................... ... ...... 89
Быстрая сортировка ..................................... ............................. 91
Оптимизация быстрой сортировки ...... ..... ... .. ..... .. ... .... ...... ... .. .. 91
5.4. ПРАКТИЧЕСКИЕ ПРИМЕРЫ С ИСПОЛЬЗОВАНИЕМ JMH ............................ 93
Бенчмарки для различных структур данных .......... .. ...... ..... ............. .93
Пример 1. Сравнение производительности поиска в массиве и
в хеш-таблице .. ............ ..... ..... .... ......... ..... .. .. ..... .......... ...... ... ..... 93
Пример 2. Сравнение производительности сортировки в
различных структурах данных ..... ..... .. ...... ... .............. .. ... .. ...... ..... .. 94
5.5. Детальный разбор деревьев и графов .... ...... ..... .. ..... .... ....... ......... 95
5.5.1. Основные типы деревьев ......... ... ........................................ ..... 96
1. Бинарное дерево поиска (BST) ................................... .. .. ..... 96
2. Сбалансированные деревья ..... ..... ..... ... .. ... .. .. ..... .. .. .... ... .. .... 98
3. АVL-дерево ...... ... .... ......... .......... ....... .. ........................ ...... .. ... . 98
4. Красно-черные деревья .. ......... ........................................... 101
5.5.2. Алгоритмы и операции с деревьями .. .. ..... ..... ....... ........ ..... .... 101
5.6. Применение деревьев в реальных задачах ..... ...... .... ......... .... ... ..... 102
5.6.1. Бенчмарки с использованием JMH ·для деревьев ... .. .... ....... 102
Пример бенчмарка для поиска в различных деревьях .102
5.6.2. Введение в графы ........................ ... ........................................ 103
Определение ... ... ..... ...... ...... .... ...... .......... ..... ............................ 104
5.6.3. Представление графов в памяти .......................... .. ............... 104
1. Матрица смежности ...... .. ...... .. ....... .. .... ..... ............. .. ...... ..... . 104
2. Списки смежности ....... ........ .. ...... ..... .......... ... ..... ..... ............ 105
5.6.4. Алгоритмы работы с графами .... .......... ................ .. ................ 105
Поиск в глубину (DFS) ... .... .............. ..... ..... .. .. ...... .. ............. ..... 105
Поиск в ширину (BFS) ............................................................. 106
Алгоритм Дейкстры .... .. ........ .. ... .. ....... ..................................... 106
Алгоритм Флойда-Уоршелла ............................. ... ... ... ......... ... 107
5.6.5. Практическое применение графов ...................... .... ...... .... ..... 108
5.6.6. Бенчмарки JMH: производительность алгоритмов на графах . 108
Пример: сравнение BFS и Dijkstra ...................................... 108
5.6.7. Оптимизация работы с графами ......... .... ........... ... .. ............... 109
5.7. Примеры использования деревьев и графов для оптимизации ... 109
Оптимизация в навигации и логистике ....................... .... .. ..... 110
Оптимизация сетевых инфраструктур ...................... .. .. .. ....... 110
Принятие решений и компиляция .......... .. ...... .... .. .................. 110
Работа с зависимостями и сборкой проектов ................ .. ..... 111
Оптимизация хранения и доступа к данным .. ......... .. .... .. .. .. .. 111
Машинное обучение и анализ больших данных ..... .............. 111
Разработка игр и моделирование .. .. .................. .... .... .. .... .. .. .. 112
Выводы ....... ....... ... .. ..... ... ... .... ... .................. .. ... ... ......... ......... . 112
ГЛАВА 6. Параллельные и многопоточные приложения .... .. 113
6.1. Основы многопоточности в Java ........... .... .. ........ ..... .... .......... .... 114
Создание потоков ... ... ..... .. ... ....... .. ... .. ... .. ............. ................ ..... 114
Основы синхронизации .. .......... .. ... ... .... ...... ............ .. .... ... ....... .. 115
6.2. Пул потоков и управление потоками ................................................. 118
Создание пула потоков .... ..... ...... .............. .... .. ..... ... ... ........... .. . 118
Параллельное выполнение задач .......... ............ .. ... .... ... ......... 119
Типы пулов потоков ............... ..... ... .... ... .. ............. .. ... ... .. .. ......... 120
6.3. Оптимизация многопоточных приложений .... .. .. .... .......... .. ...... .... ... 120
6.3.1 . Избегание избыточной синхронизации .... ............. ... .. ... .. .. .. .. . 120
6.3.2. Использование конкурентных коллекций .. .. .. .. .. .. .. .. .............. 121
6.3.3. Минимизация блокировки ................................. .. ............ .. ...... 122
6.3.4. Использование атомарных операций ........ .. .. ..... .. ................. 122
6.3.5. Использование ExecutorService для управления потоками .123
Выводы ......... ... ..... .. ... ......... .... ... .... ... .... .. ..... .......... ..... .... .... ..... 124
ГЛАВА 7. Использование функций языка дпя оптимизации ...... 125
7.1. Лямбда-выражения и потоки (StreamsAPI) .. .... .. ......... ... ..... ....... ..... 126
7.2. Введение в модули (Java Modules) .... ................ .. .. .. .. .. .. ..... .. .. .... 128
Основы работы с модулями .... .. .. .... .. ... .... .... ............................ ........ 128
Тестирование , контроль н оптимизация кода Java
Основные преимущества модулей ............................ .. ....... ............. 129
Пример использования модулей ... .... .. ..... .. .......... ............ ... .... .... 129
7.3. Новые коллекции и утилиты ... ... ... .. .... .. ..... .. ..... ... ...... ..... ... ...... 129
Выводы ... .......... ........ .. ........ ............................................. ... .. .. ......... 131
ГЛАВА 8. Виртуальные потоки .... ..... ..... .... ..... .... ......... ........... 133
8.1. Подробное введение в проблему традиционной многопоточности .. 134
8.2. История появления виртуальных потоков ..... .... ... .... ........ .... .... .. .... 135
8.3. Архитектура и внутренняя реализация ... .... .................................. ... 136
8.4. Примеры использования .. .................................................... ..... ......... 136
8.5. Производительность и ограничения ..... .... ..... .... ....... ..... .. ....... .... ..... 137
8.6. Интеграция с существующими библиотеками ........ ..... ...... ..... .. ...... 138
Практические советы и best practices ....... ... .......... ..... .. ... .. .............. 139
8.7. Тестирование кода с виртуальными потоками ... .. .... .... .... .. ... .. ... .... 139
Выводы .... .. ... .. .. ......... ....... ....... .... ........ , ............... ... ..... ............... 140
ГЛАВА 9. Модулизация и производительность Jаvа-приложений .. 141
9.1. Введение в модулизацию (Java Platform Module System) ....... .. .... 142
9.2. Почему модули важны для производительности ... .. ...... .. .... ... ... ... 143
9.3. Уменьшение времени запуска за счет модулярности .................... 144
Механизмы оптимизации загрузки .... .... .............. .. ....... ...... .... .... ... .. . 145
Практические рекомендации для ускорения запуска через модули . 145
Пример влияния модуляризации на время запуска ................. 146
Особенности при контейнеризации .... .. .. .................. .. ..... ........... ..... 146
9.4. Минимизация используемых зависимостей .. ....... ..... ..... ......... ... .... 147
9.5. Снижение использования памяти ........ ... ............. ........ .. .. .... .... .. ..... .. 149
Экономия памяти за счет уменьшения объема классов ............ .... 149
Влияние на скорость загрузки классов ......... .. .. ... ... .. ....... ...... .......... 150
Ленивая загрузка (Lazy Loading) ... ... ........ .. .. ....... ... ..... ..... .. .......... .... 150
9.6. Модулизация в больших проектах .... .......... .... ...... ......... .... .. ... .......... 151
Управление зависимостями и предотвращение " загрязнения"
пространства классов .. ...... ... .... ........ .. .... ...... .. .... .... ..... .... ..... ....... ... .. 152
Оптимизация времени старта и потребления памяти ..... .. ........ ..... 152
Улучшение масштабируемости и параллельной разработки .. ... ... 152
Облегчение тестирования и повышения качества ... ...... ... ............. 153
Разграничение ответственности и повышение читаемости
архитектуры ... .. ... .. ......... ... .... ....... ....... ...... ... ...... ......... ..... .................. 153
Поддержка эволюции проекта .. ...... .......... ......... .............. ..... ......... ... 153
9.7. Практика: разбиение монолита на модули ... ..... .... ..... ... .. .. ............ .. 154
9.7.1. Анализ текущей арх ите ктуры .. ....... .... .. ........ ...... ..... .. ... ...... ... . 154
9. 7 .2. Разделение по слоям и функциональности .. ... .......... .. ..... .... 155
' 9.7.3. Определение и контроль зависимостей между модулями ... 155
9. 7.4. Минимизация публичного API .. ..... .... ..... .... ... ..... .. ........ ... .... ... . 156
9.7.5. Постепенный рефакторинг и миграция ......... .. ... .... ..... .......... 156
9.7.6. Тестируемость каждого модуля ..... .... ........ ........ .. .......... ... ...... 157
9.7.7. Технические детали: использование системы модулей Java .. 157
9.8. Инструменты для модуляризации в Java ... ... ... ..... ..... ....... .. ... .. ....... 158
9.9. Рефакторинг монолита в модульную структуру ..... ... ... ... .... .... ... ... 159
9.1 О. Влияние модулярности на тестирование и деплой ....... .. .... ... .. ... 160
9.11. Пример модулярного подхода ..... .. ................ ......... .. ............ ........ ... 161
9.12. Модули и контейнеризация .... ..... ........ .. .......... .. .... .. ... .. .. .. ... ... . .... 162
9.13. Best practices при модуляризации .. ......... .. ..... ... ...... .... .. .. .. .. ..... .. .... 163
Выводы ....... ....... ............. ..... ..... ... .......... .. ........ ..... .... ...... .... ...... ... ...... 165
Глаеа 1 О. Сборщики мусора в Java .... ... .. ................ .. ....... ... .. 167
10.1. Обзор типов GC ..... ...... ..... ... ........ ........ ..... .. .............. .. .... .. .. ...... .. 169
Serial GC .. ....... ... ... ..... .. ............ ............ .. .. .. ...... .... ..... ..... .... .. ........... 169
Тестирование, контроль и оптимизация кода Java
Parallel GC (Throughput Collector) .... ....... ... ... .. ... ...... ... ._ ......... ........... 169
G1 GC (Garbage-First) .......... .. .... ... .......... .. .... ..... .. .... .... ....... .... ........ ... 169
ZGC (Z Garbage Collector) ......... ..... ......... ..... ...... .. ..... ... ........ ........... .. 170
Shenandoah GC ........ ........ ............ ....... .................. ... .................. .. ...... 170
10.2. Выбор GC под тип приложения .. .. .. .. .... .... .............. .. ................ .. .. ... 170
Ключевые факторы , влияющие на выбор GC ................................. 171
Примеры выбора GC для типовых приложений ................ .. ..... 172
Важность эмпирической валидации .... .. .......................... ........ ........ 173
10.3. Тюнинг и мониторинг GC ...... ... .... .......... ......... .. ..... .. ................ ... ...... 174
Метрики GC ............ ..... ..... ........... .. ... .... .............. .. .......... .. .. ... .. .. .. ....... 174
Инструменты мониторинга ....... ........ .. .. ......... ....... ..... ....... .. ........... .... 174
Влияние GC на производительность .. .. .............. .. ...... .. ......... .......... 175
Выводы .. ... ..... .. .. ...... .. .... ...... ........... .... ....... ..... ...... ... .. .................. ..... 175
ГЛАВА 11 . Работа с памятью и управление ресурсами .. .. 177
11.1. Профилирование использования памяти ............. .... .. .. .... ...... ...... 178
Основные подходы к профилированию памяти .............................. 178
Пример профилирования памяти с помощью Jvlsualvm .... ..... 179
11.2. Оптимизация работы с кучей и стеком .. .... ... ...... .... ................. .. .. ... 179
11 .2.1. Оптимизация работы с кучей .......... ..... ................................. 180
11 .2.2. Оптимизация работы со стеком .... ............................... ........ 180
11 .3. Управление и минимизация утечек памяти .................. .......... .. ..... 181
11 .3.1. Причины утечек памяти ........ .. .............. .. ............................... 181
11 .3.2. Методы для предотвращения утечек памяти : ........ ....... .... .. 182
Выводы ...... ... ........ .. .. ...... ........... ......... ... .... .. .. .... ...... ........... 183
ГЛАВА 12. Оптимизация ввода-вывода ..... .... ................ .. .... 185
12.1. Эффективные методы работы с файлами и сетью ....... .... ... .. ..... 186
12.1.1. Работа с файлами ...................... ......... .. .. ... ...... .. ....... .. .......... 186
12.1.2. Работа с сетью .... ... ... .. .. ....... ........ ... .... ....................... ............ 188
12.2. Использование неблокирующего ввода-вывода (NIO) .......... .. ... 190
12.3. Примеры оптимизации ввода-вывода ..... .... ......... .. ........ .... .... .... ... 191
12.3.1 . Использование буферизации и кеширования ........... .......... 191
12.3.2. Неблокирующий 1/0 ....... ..... .. ..... ............... .......................... ... 192
12.3.3. Использование асинхронного ввода-вывода ........... .... ....... 192
Выводы ... .... .... ... .... .... .... ................ ................................................ 193
ГЛАВА 13. Безопасность и производительность .... .... ... .... 195
13.1. Влияние безопасного программирования на производительность ... 196
Защитное программирование и его цена ...... ... .. ... ..... .... ...... 197
Пример. Валидация входных данных .... ........... ............... 197
Пример. Логирование .... ...................................................... 198
13.2. Оптимизация без ущерба для безопасности .......... ....................... 198
13.2.1. Уровни проверки и инварианты .... .. .................. .. ... .. ............. 198
13.2.2. Использование вssert .. .. .... ................ , ................................ .. 198
13.2.3. Изоляция критичных проверок ... .... .. .... ..... ..... .. .. .. ................ 199
13.2.4. Кеширование и повторное использование .................. .... .... 199
13.2.5. Адаптивная безопасность ......... ......... ................. ......... ..... .... 200
13.2.6. Безопасные, но быстрые алгоритмы ............... .................... 200
13.2.7. Инструментальный анализ влияния безопасности ............. 200
13.3. Советы по написанию безопасного и быстрого кода ................. 201
Выводы ... .... ...... ........ .... .... ...... .... ..... ...... ............... .. .................... 202
ГЛАВА 14. Декомпилирование и анализ байт-кода ............ 203
14.1. Основы декомnиляции Java кода ...... ..... ......................................... 204
14.2. Инструменты для декомnиляции .................................................... 206
14.2.1 . JD-GUI (Java Decompiler GUl) ..................... ......... ................. 206
14.2.2. Ргосуоn ............... .. .... ............ .. .................................... ............ 207
Тестирование, контроль и оптимизация кода Java
14.2.3. CFR (Class File Reader) ..... ....... ....... ... ..... ........ ... .. ... .. ......... ... 207
14.2.4. FernFlower ..... ..... .. ... .... ........ ..... ....... ...... ........ ... ... ............... .... 207
14.3. Анализ байт-кода для оптимизации ... ...... ....... .. ..... .... .... .. ... ... .... .. ... 208
14.3.1. Инструменты для анализа байт-кода ...... .... ... .... .. .. ......... ..... 208
14.3.2. Оптимизация на уровне байт-кода .... ... ..... ..... .... ... .... ... ........ 208
14.3.3. Пример: анализ байт-кода с использованием ASM ...... 209
Выводы .... .................................... .. ............ ....... ... ....... ....... ................... 210
ГЛАВА 15. Оптимизация запросов к базе данных .............. 213
15.1 . Эффективное использование JDBC ........ ... ... ... .. ... ... ....... ..... .. .... .... 215
15.1.1 . Использование Connection Pooling (пула соединений) ... ... 215
15.1.2. Использование PreparedStatement .. ....... ... ... ... .. ...... .. ... ...... .217
15.1.3. Использование Batch Processing для массовых операций .. 217
15.2. Оптимизация запросов ORM (Hibernate, JPA) .. ... .. ... ... ..... ... ... ... ..... 218
15.2.1. Использование кеширования .... ............ ..... ....... ......... .... ...... 218
15.2.2. Ленивая загрузка (Lazy Loading) ..... ........... .... ... ..... ...... ..... ... 219
15.2.3. Использование FetchType.LAZY и FetchType.EAGER .. ...... 219
15.3. Профилирование и оптимизация SQL-зanpocoв .. ... .. .... ... .. .......... 220
15.3.1 . Использование EXPLAIN PLAN .. ... ........ ..... ........ ........ .... ...... 220
15.3.2. Индексация .. .... ... .... ... ....... .. .... .. .... ...... ......... ......... ........ ... ...... 220
15.3.3. Профилирование с использованием инструментов .. .. ....... 220
15.3.4. Разделение запросов ... ...... ...... .. ..... ..... ... ... .. ....................... .. 221
Выводы ... .. ...... ...... .... ..... ... .... .. ... ...... ... .... .... ...... .. .. .... ............. 221
ГЛАВА 16. Тестирование и контроль качества кода ...................................... 223
16.1. Введение в тестирование Jаvа-приложений .. .. .. ... ........................ 225
16.2. Юнит-тестирование и инструменты .. .. .. ...... ... ........ ... .. ..... .... ...... .. ... 226
16.3. Интеграционное тестирование ........ ..... .. ... ........ ... .... ....... ..... .. .. .. ..... 228
16.4. Нагрузочное тестирование ..... ....... ....... ................. .... .. ... ................ .. 229
16.5. Контроль качества кода (Code Quality) .. ...... ......... .... ... ....... ..... ... .... 230
Инструменты для контроля качества кода ....... .. .. ... ...... ... .. ... .......... 230
Пример настройки SonarQube для проекта ...... .... ...................... 230
Применение практик рефакторинга ................... .............................. 231
Выводы ...... ..... ....... ... .... .. ...... .... ... .. ....... .. .. ... ...... ... ... .... ....... ... 231
ЛАВА 17. Виды тестов при нагрузочном тестиро
17.1. Тестирование под нагрузкой (Load Testing) ...... ... .. .... .......... .... ...... 235
Цель тестирования под нагрузкой ..... ... .. .. ..... ..... ....... .... .... ...... .... ..... 235
Особенности тестирования под нагрузкой .............. ..... ..... ... ..... .. .... 236
Пример: тестирование веб-приложения .. ..... .. ......... ..... ..... .... .. ... 237
Инструменты для тестирования под нагрузкой ......... .. .... ..... .......... .237
17.2. Стресс-тестирование (Stress Testing) ..... ..... ...... ....... .... ......... ... ...... 238
Цель стресс-тестирования .................... .. ... ... .. ... ...... ..... ...... ..... ..... .... 239
Особенности стресс-тестирования ........ .... ......... ..... .. ........ .............. 239
Пример стресс-тестирования ... ....... ... ......... ..... ...... ....... ................ 240
Инструменты для стресс-тест ирования ....... ....... ... ... ....... ....... ..... .... 241
17.3. Тестирование скачков нагрузки (Spike Testing) ...... .. ... ..... ... .. ........ 242
Цель тестирования скачков нагрузки ........ .... ........... ..... ... .. ... .. ... ...... 242
Особенности тестирования скачков нагрузки ...... ....... .... ........ ........ 243
Пример стр1:сс-тестирования скачков нагрузки ....... ..... ... ......... 243
Инструменты для тестирования скачков нагрузки ....... ... ..... ..... ... .. . 244
17.4. Тестирование на продолжительное время (Soak Testing) .......... 245
Цель тестирования на продолжительное время ..... ... ... ..... ... ..... ..... 245
Особенности тестирования на продолжительное время ...... ......... 246
Пример тестирования на продолжительное время ........... ...... . 246
Инструменты для тестирования на продолжительное время ..... .. . 247
17.5. Тестирование масштабируемости (Scalabllity Testing) ...... ........ .. 248
Цель тестирования масштабируемости ............... ...... .. .... ...... ....... .. 248
Особенности те стирования масштаб и руемости .. ....... .. .... ...... .. ...... 249
Пример тестирования масштабируемости ... .. ........... .... .. ..... .... .. 249
Тестирование, контроль и оптимизация кода Java
Инструменты для тестирования масштабируемост и .............. ....... 250
17.6. Тестирование конфигураций (Configuration Testing) .. .. .. .. ........... 251
Особенности тестирования конфигураций .. ........ ....... ..... ................ 251
Пример тестирования конфигураций ...... .. .. .... .. .. .... ..... ........... .. .. 252
Инструменты для тестирования конфигураций .............. ...... .. .. .... .. 253
17.7. Создание эталона производительности (Baseline Testing) .. ...... 254
Особенности создания эталона производительности ...... .. .. .... ...... 254
Пример. Переход с Java 11 на Java 17 ...... .. .. .... .... .. ............ ... ...... 255
Инструменты для создания эталона производительности .... .... .... 255
17.8. Сравнительное тестирование (Comparlson Testlng) .... .. ...... .. ...... 256
Особенности сравнительного тестирования .. .. .... .. .. .. ..................... 257
Пример. Сравнение JDBC и R2DBC для доступа к базе данных ............ 257
Инструменты для сравнительного тестирования ...... ...... .. .... .. ....... 258
Выводы ... ...... ... ....... .... ...... .... ....... ... .... .. ... ....... ..... .. ... ...... .... ...... .. 259
ГЛАВА 18. Методы и техники оптимизации кода ........... .................................. . 261
18.1. Основы рефакторинга кода .. .. .. ... ..... ...... ...... .. ........ ... ....... .. ... .. .. 262
18.2. Пттерны и антипаттерны оптимизации · .. ... .... .. .... ... .. ..... ... .. .. ...... .. 264
18.З. Инструменты для анализа и улучшения кода ... .... ..... .. ... .. .. .. .. ...... 266
18.4. Best Practices оптимизации кода .. ..... ... ..... .. ....... .. ... .. ..... .. ... ............ 266
Выводы ........ ... ... .. .. ..... .... .... .......... .. ... ... ... .. ..... ... ..... : ... ........ ... .. .. 267
ГЛАВА 19. Продвинутые техники и подходы ........ ....... .. .................................. 271
19.1. JIТ-компиляция и ее влияние на производительность ... .. .. .. .. .. ............ 273
19.2. lnliпе-оптимизация и ее применение .. ...... .. .. .. ....... ..... ... .......... .. ..... 274
19.З. Использование специализированных библиотек и инструментов .................. 276
Выводы ... ...... ...... ... ........... ...... .... .. .. ......... .... .... ...... .... ..... .... ....... ....... 277
ГЛАВА 20. Метрики и Observabllity: как контролировать и
понимать поведение Jаvа-приложений ...... .... ....... ...... .. .. .................................. 279
20.1. Основы ObservaЫllty .. ... .... ........ ..................... ... .... ... .. ........ ....... ........ 281
Что входит в ObservaЬility ........... ....... ... .. .. .. ... ........ .......... .. .... ....... .... 282
Метрики как важнейший элемент ObservaЬility .. .. .. .... ....... .... ........ .. 283
20.2. Prometheus - стандарт де-факто для сбора метрик .............. .. ... 283
20.3. Mlcrometer - фасад для метрик в Java .............. ........ ... ........ .. .. ..... 284
20.4. Grafana - визуализация и дашборды .. .................. .......... ...... ...... .. 285
20.5. Подключаем все вместе: Prometheus + Mlcrometer + Grafana ............... 286
20.6. Какие метрики собирать? .... ... .. ...... ..... ............... ...... .. ....... .. .......... 287
Системные метрики .... ... ..... .... ..... .. ............ ...... .... ... .... ............. .. .... .... 287
JVM метрики .. ..... ...... ..... ....... ...... ....... .. ........ ... .... ... .... .... ............. ........ 288
Приложенческие метрики ... ... .......... ... .. ...... .... ..... .... .... ....... .. ..... ... .... 289
20.7. Алерты и автоматическая реакция .. .. .. ...... ....... .. ............ ..... ...... ..... 290
Але рты в Prometheus .. .... ... ... ... .. ... .. ......... ... .. ..... .. .. .. ........... ..... .. . 290
Але рты в Grafana .... .. .. ... .... ......... ........ .... ..... ... .......................... .. ....... 292
Пример настройки алерта в Grafana .. ............. .. .... .. ............................ 292
Автоматическая реакция на алерты .. .... .. ............ ...... ...... .. ......... ..... 293
20.8. ObservaЫlity в Kubernetes .. .. .. .. .... .. .. .. .. .... ...... ........... ...... .. ....... ... 294
Расширение : OpenTelemetry и трассировки .. .............. .. ...... .... .. .. .. .. 294
Что такое OpenTelemetry? .. ....... ....... ... .. .. ... .. .. : .... .... .... .... ..... ... .. .. ...... 295
Трассировки в OpenTelemetry ............. ..... ........... .. .. ..... ... ..... ... ...... ... . 295
Интеграция OpenTelemetry с Micrometer ....................... .... .. ..... ........ 296
Преимущества интеграции OpenTelemetry ............................................. 297
20.9. Best practices ..... .... ................ ...... .......... .......... .. .... ...... .. .. ....... .. .. 297
Выводы ...... .. .. .. ... ............... ... ................. ...... .... ... ... ...... .. .. .... .. .......... 298
ГЛАВА 21. Кеширование и его влияние .... ..................... ...................................... 299
Тестирование, контроль и оптимизация кода Java
21.1. Когда и как кешировать ...... .. .. ..... ..... ...... .. .............. ............ .. ............. 300
21.2. Виды кеш ей .... .... ..... .... ..................... ...... .. ... ........................................ 301
Локальные кеш и .......... ... ............ ....... ..... ... .... ....... .......... ... ...... ... .. .. ... 301
Распределенные кеш и .... .... .. ... .... .. ......... ..... ..... ... .. .... ..... .. .... ............ 301
21.3. Использование Ehcache, Caffeine, Redis ..... ......................... ... : .... .. 302
Ehcache ...... ......... .......... .... ...... .... ....... ... ... .. ..... ............... ........ ....... ..... 302
Caffeine .... .. ... .. .... ...... ... .... .... ........ ..... .. .. ........ ........ ..... ....... .. ....... ......... 302
Redis ............... .... .. ........ .... .... ............ ....... ........... .. ............... ............... 303
21.4. Оптимизация hit/miss гаtе ........ ....... ......... ...... ... .............. ......... ...... ... 303
Выводы ... .. .................................................................................................... 304
ГЛАВА 22. Работа с большими данными .......... .. ............ ........................... 305
22.1. Java и Big Data: Введение в Spark и Flink .... ... .. ..... ..... .......... ......... 306
Apache Spark ......... ... ...................... .......... ..... .... ...... ........... ... ... .......... 306
Apache Flink .......... ... .. ............... .. ...... ........ .......... ... ... ....... ...... ......... .... 307
22.2. Потоковая обработка данных .. ..... ...... ............ ................................. 308
Хранение и обработка данных в HDFS и S3 ..... ....... .. ... ..... ...... .. ..... 308
Использование Kafka вместе со Spark/Flink .... .. ..... .. ................ .... ... 309
Практики мониторинга и отладки Big Dаtа-приложений ....... ................ 309
Интеграция с системами машинного обучения .. .. ....... ..... ............ ...... 310
22.3. Производительность и ресурсоемкость .. ......... ............................. 310
Выводы ....... .... ........... .......... ........ .. ... ... ........... ... ....... .. ..... ..... 311
ГЛАВА 23. Асинхронное и реактивное программирование ...................... 313
23.1. Асинхронность и реактивность: основные понятия ..... ... ........... 314
Асинхронность .................................. ............. .. ........... ..... .......... .... .... 315
Реактивность ..... ..... .............. ..... .... ...... ..... .. ...... .... .. .. .... .. .. .. ..... ..... ...... 315
23.2. Reactor, RxJava и Project Loom .... ........ ...... ... .. .. ................ .... ............ 316
RxJava ........... ................ ..... ....... ..... ..... .......... ... ...... ... .. ...... .. ... ... .... .... . 316
Project Reactor ...... .. ...... ..... ......... ...... : ...... .. ... .. ... ..... .... ... .... .. .. .. ........... 316
Project Loom ......... ..... .. ... ..... .. ........ ..... .. .. ...... .. .. .. .... ..... ......... ........ ...... 317
23.3. Производительность реактивных приложений .. ... ....... .... ......... ... 317
Мифы и реальность ....... ... ... .... .... .. ... .. ....... ... ............ .... .. ..... .. ........... 318
23.4. JMH и реактивный код .... .... ... ... ... .. .... ........... ... ..... ..... ... .... ..... .... 318
Общие принципы ........... .. ... ....... .. ...... .... ...... ..... ... ... ..... ... ... .... ... .. ....... 319
Пример: бенчмарк RxJava против Project Loom ................................................. 319
Практические советы .. .. ... ...... .... ........ ........ ... ........ ...... .......... ... .. .... ... 320
Выводы ........ ... .. ........ .... ... ... .... .... ....... ..... .... ......... ........... .... ... ....... 320
ГЛАВА 24. Контейнеризация и производительность .......................................... 323
24.1. Оптимизация Java в контейнерах ........ .. : ..... ........ .. ...... .. .................. 324
Лучшие практики оптимизации Java в контейнерах .......... .... .. ....... 325
24.2. Настройки JVM при ограниченных ресурсах ........................ ..... ... 326
24.3. Мониторинг в Kubernetes .... ................................. .. ........ ... ..... ........... 328
Основные компоненты мониторинга Java в Kubernetes ....... .. ......................... 328
Выводы .......... ..... .. ................. .......... .... ...... ...... ........ ......... ... ............ 329
ГЛАВА 25. CI/CD и автоматизированный контроль
производительности ....... ...................... ....... .. .. ... .................................... 331
25.1. JMH и нагрузочные тесты в CI ..... .... ..... .... ....... ....... ...... ................... 332
Почему стоит запускать JMH в CI? .. ................ ... ........ ...... .......... ..... 332
Пример настройки JMH в Маvеп-проекте .... ...... ..... .... ... ... .... .. ........ .. 333
Запуск JMH в GitHub Actions ..................... .. ....... .... ... ... ............... ...... 333
Парсинг и анализ результатов .... ...... ..... .. ... ....... ... .......... .. ... .... ......... 334
25.2. Метрики и алерты в СI/СD-пайплайнах .... ....... ..... .. ............ ........ .... 334
Ка кие метрики отслеживать? ..... ......... ...... .. .. .. ..... ...... .... ............ ... .... 334
Тестирование, контрол ь и оптимизация кода Java
Сравнение с эталонными значениями ... ......... ... .. ... .. ...... .. .. ... .... .. .. .. 334
Визуализация метрик .. .. ... .... ... ..... .. ....... ..... .. ....... ... ... .. .. ... .. ... .... ..... .. . 335
25.3. GitHub Actions, Jenkins, GitLab CI для контроля деградации ................................. 335
GitHub Actions ... .. ...... ... .. .. ..... .. .. ... ... .... ... ... ..... .... ......... ... .. ............ ...... . 335
Jenkins .... ...... ... .... .... ........... ... .. .... ......... ....... ........... ...... ... .. ........ .. .. ..... 336
Gitlab CI ... ... .. ..... ............ ..... ..... ......... .. .. ... ...... ... ........ .. ... .... ......... ....... 336
25.4. ИНТЕГРАЦИЯ НАГРУЗОЧНОГО ТЕСТИРОВАНИЯ ..................................... 337
Использование Gatling, k6, Apache JMeter ... .. ..... ..... .. ... .. ... .... ............ 337
Пример Gatling в Jenkins ......... .. .. .. .. ........ ........ ..... .. ... .. ... ............... 337
Выводы ... .... .......... ..... ..... .. ..... ... ... .. .. ...... ... ............ ... ..... .... .. .. 338
ГЛАВА 26. Front-to-Back производительность ....... ... ............................... .. 341
26.1. Эффективные форматы передачи данных .. .... .... .. .... ................ ... 343
JSON .. .... ....... .... ..... .... .. ..... .. .. ... ...... .......... .......... .. .. ..... ...... ................ .. 343
Protobuf .... ... .......... ... ............ ... .. ...... ... ... ... ............. .. ... .. .. ..... ..... ... ..... ... 344
Avro ...... ..... .. ........ ..... .... ... ..... .. ... .. .. ... .. ... .. ............ ... ..... ..... ... .......... ...... 344
26.2. Оптимизация сериализации/десериализации .......... .. ...... .. .................. 345
Общие рекомендации ..... .. ... .. .. ... .. ... .... ..... .. ......... ... .................. ........ 345
Jackson (JSON) ... .... ..... ........... ..... .. ...... ..... .......... ... .... .................. ... .. . 346
Protobuf ... .... .... ...... .. .......... .... ...... ...... .. ... ..... ... ...... ... ... ...... ... ....... .. ... .... 346
JMH и сериализация ... ...... .... .. .... ... .......... .. .. ....... ... .. ..... .. ... .... .. .... ..... 346
26.3. Латентность REST и gRPC ... ..... ....... ....... ..... ..... ..... .............. ........ ..... 347
REST .. ...... ... ..... ...... .... ... .. ........ .. .... .... ....... ... .. .... ... ... ..... .. ......... ...... .. .... 347
gRPC ....... .. ...... .... .......... ..... ...... ..... ...... .... ...... ...... ..... .............. ..... ........ 348
26.4. Практические рекомендации для снижения задержек и увеличе-
ния пропускной способности коммуникационного слоя .................................... 349
Выводы ..... .. .......... ... .. .. ... ......... .. .......... ... .. ... ..... .. ............. ... .. ...... 350
ГЛАВА 27. Мобильные и десктопные Jаvа-приложения ..................................... 351
27.1. Особенности JVM на Androld .. .......... ... ........... ... .... ... ........................ 352
Dalvik и ART ............... .......... .. ....... ...... .. ..... ... ... .... ... .. .. ........................ 352
Ограничения и особенности ............................................................. 353
Практики оптимизации Апdгоid-приложений на Java ...................... 353
27.2. Оптимизация JavaFX/Swing-npилoжeний ....................................... 353
Производительность JavaFX ........ ... .......... .... ................................... 354
Практики оптимизации JavaFX ... ..... .. ............... .. ................ ........... 354
Swing: советы по производительности .............. ... .... ....................... 354
Инструменты для профилирования десктопных Jаvа-приложений ........ 354
Общие подходы .............. .............. ..... .... ... .. ... ....... ... ................ 355
Выводы .. ........ ................ .............. ...... ...... ... ..... .... .. .. ........ ... 355
Заключение .................. ............... .... ........ ..... ........ .................. .. 357
Итоговые рекомендации ................................................................... 358
Ресурсы для дальнейшего изучения .......................................... ...... 359
Будущее оптимизации Java ... .. .......................... ..... ..... .... ................. 360
Полезные утилиты и инструменты ..... .......... ........................................... 363
Ссылки на дополнительные материалы ................................................ 367
Глоссарий терминов ... ... ........... ........ ..... ...... ... ..... ... .................... 371
Список использованных источников информации .............. .. .... ..... ..... 377
Download
Сайт не распространяет и не хранит электронные версии произведений, а лишь предоставляет доступ к создаваемому пользователями каталогу ссылок на торрент-файлы, которые содержат только списки хеш-сумм
Как скачивать? (для скачивания .torrent файлов необходима регистрация)
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error