Краткое содержание
В высоконагруженном Java-приложении массовая блокировка потоков вызвана вызовом DatatypeFactory.newInstance(), который через ServiceLoader инициирует синхронизированное сканирование JAR-файлов при конвертации дат.
Темы
Java
производительность
архитектура ПО
Теги
java
performance
threading
memory dump
classloader
architecture
debugging
Упомянутые сущности
URLClassPath
DatatypeFactory
ServiceLoader
ClassLoader
Полный текст
Одна строка кода, которая заблокировала 102 потокаСервис работает штатно, дашборды зелёные. Но в дампе памяти высоконагруженного Java-приложения обнаруживается пробка: сотня потоков намертво встала в ожидании блокировки URLClassPath.Виновником оказывается обычный вызов DatatypeFactory.newInstance(). Он запускает скрытую машинерию ServiceLoader. Идёт сканирование JAR-файлов, которое жёстко упирается в синхронизированный метод поиска провайдеров.При 800 RPS банальная конвертация дат создаёт миллионы холостых обращений к ClassLoader. Декодируем логику фреймворка.
Другие посты из habr_com
habr_com
2026-02-27T17:00:59+00:00
В посте описывается применение трёхмерной физической модели для управления загрузкой шихты в доменную печь, что позволяет повысить её стабильность и предотвратить аварии.
Читать