Скотт ОуксЭффективный Java. Тюнинг кода на Java 8, 11 и дальше. 2-е межд. издание
Программирование и тестирование обычно принято относить к разным профессиональным сферам. Скотт Оукс — признанный эксперт по языку Java — уверен, что если вы хотите работать с этим языком, то обязаны понимать, как выполняется код в виртуальной машине Java, и знать, какие настройки влияют на производительность. Вы сможете разобраться в производительности приложений Java в контексте как JVM, так и платформы Java, освоите средства, функции и процессы, которые могут повысить производительность в LTS-версиях Java, и познакомитесь с новыми возможностями (такими как предварительная компиляция и экспериментальные сборщики мусора). В этой книге вы: - Узнаете, как платформы и компиляторы Java влияют на производительность. - Разберетесь c механизмом сборки мусора. - Освоите четыре принципа получения наилучших результатов при тестировании производительности. - Научитесь пользоваться JDK и другими инструментами оценки производительности. - Узнаете как настройка и приемы программирования позволяют минимизировать последствия сборки мусора. - Научитесь решать проблемы производительности средствами Java API. - Поймете, как улучшить производительность приложений баз данных Java.
Это вовсе не означает, что вы не должны добавлять в свой продукт новые возможности или новый код; разумеется, совершенствование программ приносит пользу. Но вы должны знать о тех компромиссах, на которые вам придется пойти, и упрощать свой код там, где это возможно.
JVM может сохранять стеки потоков только в точках безопасного состояния. Во-вторых, стеки для каждого потока сохраняются последовательно, поэтому полученная из них информация может быть противоречивой: два потока могут удерживать одну блокировку или же поток ожидает блокировку, которая не удерживается никаким другим потоком. Стеки потоков также могут показать, насколько серьезно блокируются потоки (так как заблокированный поток уже находится в безопасном состоянии). Если последовательно сохраненные дампы потоков показывают, что многие потоки находятся в ожидании блокировки, можно сделать вывод, что за эту блокировку есть значительная конкуренция. Если последовательно сохраненные дампы потоков показывают, что многие потоки блокируются в ожидании ввода/вывода, можно сделать вывод, что ввод/вывод нуждается в настройке