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

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

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

Другие каналы: @tproger_channels
Download Telegram
Вызов диагностических команд JVM из Java без запуска jcmd

Каждый запуск jcmd создаёт новую JVM. Если вы встраиваете диагностику в собственный Java-инструмент, команды можно вызывать через JMX, встроенный механизм управления JVM.

В руководстве по вызову DiagnosticCommand разобрано подключение к работающей JVM через Attach API: запуск локального агента управления, получение MBeanServerConnection и вызов команды через invoke. Пример получает параметры JVM и команду запуска Java-приложения.

Имена команд нужно преобразовать: VM.command_line становится vmCommandLine. В статье есть функция преобразования и полный код вызова. Пример пока не поддерживает аргументы диагностических команд.

#java #jvm
👍1
Аварийные отчёты HotSpot: чтение hs_err и удаление чувствительных данных

При падении JVM обычно оставляет файл hs_err с ошибкой и состоянием процесса. В заголовке можно найти место сбоя и версии JVM и ОС, в разделе потока — стек Java- и нативных вызовов.

Разбор отчёта на примерах показывает, где искать состояние памяти, события компиляции и сборки мусора, загрузку классов и библиотек, чтобы выяснить, что JVM делала перед падением.

Для подготовки файла к передаче коллегам автор предлагает jhserr: можно скрыть имена пользователей и хостов, пути и переменные окружения прямо в браузере. Есть и расширение для VSCode с подсветкой и навигацией по разделам отчёта.

#jvm #java
👍1
Хаотичный планировщик помог найти ошибку в тесте JFR

В январском разборе Йоханнес Бехбергер исследовал JDK-8366486: тест CPU-time sampling обычно проходил, хотя после первой записи останавливал поток, создававший нагрузку.

Вторая запись могла получить событие от внутреннего потока JFR Periodic Tasks. Это маскировало ошибку самого теста. Успешный прогон ещё не означал, что проверяется нужный сценарий.

Автор использовал concurrency-fuzz-scheduler: написанный на Java прототип планировщика Linux меняет расписание потоков случайными паузами. С ним ошибочную ветку удалось воспроизвести быстрее, а исправленную — отдельно проверить повторными запусками.

Это конкретный кейс и экспериментальный инструмент, а не универсальный детектор гонок. В статье автор также объясняет, почему причина оказалась ошибкой проверки, а не просто проблемой синхронизации.

Разбор Бехбергера и устройство теста

#java #jvm
🔥1👏1
Как HotSpot ускоряет криптографию внутри JDK

Реализация алгоритма написана на Java, но некоторые часто выполняемые операции JVM может заменить машинным кодом под конкретный процессор. Такой механизм называется intrinsic.

В статье команды Java он разобран на постквантовых ML-KEM, ML-DSA и HSS/LMS. У первых двух много повторяющихся операций с коэффициентами полиномов — подходящая работа для векторных инструкций. Проверка подписей HSS/LMS выигрывает от ускорения SHA-256.

Аннотация @IntrinsicCandidate отмечает методы, для которых HotSpot может применить такую замену. Java-реализация остаётся запасным вариантом, если подходящего ускорения на платформе нет.

В статье приведены замеры JDK 28 на Linux/AArch64. Они сравнивают отдельные алгоритмы с включёнными intrinsics и без них. При оценке результата важны набор параметров алгоритма и возможности CPU: ускорение криптографической операции само по себе не определяет скорость всего сервиса.

#java #jvm
❤1
Helidon 27 переносит контекст с ThreadLocal на ScopedValue

Идентификатор запроса и другие данные контекста нужны в разных слоях приложения. При передаче через ThreadLocal важно правильно задать и завершить их жизненный цикл.

В Helidon 27 активный контекст фреймворка перенесли на ScopedValue. Значение привязано к ограниченной области выполнения, что помогает согласовать время жизни контекста с работой, для которой он нужен.

Использовать более новые механизмы Java позволило повышение базовой версии: Helidon 27 требует JDK 27.

Одновременно проект разделяет две линии развития. Helidon 27 — актуальная ветка с новыми возможностями, а Helidon 4.5 остаётся LTS-веткой для команд с более длинным циклом проверки и обновления.

Поэтому переход стоит планировать вместе с обновлением JDK и проверкой зависимостей сервиса.

#java #helidon #jvm