Чашечка Java
8.3K subscribers
3.97K photos
13 videos
56 files
6.44K links
Лучшие материалы по Java на русском и английском

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels
Download Telegram
Quarkus: три промаха кеша, один вызов метода

Несколько запросов одновременно обращаются к отсутствующему ключу. В Quarkus 3.27 с кешем на Caffeine аннотация @CacheResult обрабатывает такие обращения вместе: первый вызов вычисляет значение, остальные ждут результат.

Это работает в пределах одного кеша, одного ключа и одного экземпляра приложения. У объектов, входящих в ключ, должны корректно работать equals() и hashCode(). Разные ключи обрабатываются отдельно. Между экземплярами приложения такой блокировки нет.

lockTimeout задаёт предел ожидания блокировки. Это не таймаут выполнения самого метода. По умолчанию предел ожидания отключён.

При попадании в кеш тело метода не выполняется.

Кеширование в Quarkus 3.27
ResourceLock в JUnit: параллельный доступ на чтение

В параллельных тестах JUnit Jupiter @ResourceLock объявляет общий ресурс по строковому имени и режим доступа к нему.

Два теста с READ для одного ресурса могут выполняться одновременно. READ_WRITE конфликтует с любым другим доступом к тому же ресурсу. Для аннотации на тестовом методе блокировка захватывается до @BeforeEach и освобождается после @AfterEach.

Параллельный запуск нужно включить и задать режим выполнения, например через @Execution(CONCURRENT). Одного флага enabled для параллельного выполнения тестов недостаточно.

Это координация тестов Jupiter, объявивших один ресурс, а не блокировка между процессами ОС.

Parallel Execution и Synchronization
NMT в HotSpot: сначала включить, потом искать рост

Native Memory Tracking нужно включить при старте JVM, например флагом -XX:NativeMemoryTracking=summary. Если процесс уже работает без NMT, включить сбор через jcmd не получится.

После прогрева сохраните базу командой jcmd <pid> VM.native_memory baseline. Позже jcmd <pid> VM.native_memory summary.diff покажет изменения по категориям относительно неё.

NMT учитывает внутренние аллокации HotSpot, но не всю память стороннего native-кода. Рост категории даёт направление для диагностики, а не готовое доказательство утечки.

На карточке — команды из руководства Oracle Java 25.

Native Memory Tracking в HotSpot
#jvm #java