TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.38K subscribers
Post #8652 344
Как убрать временные MemorySegment при доступе к нативной памяти в Java

В горячем цикле обёртка MemorySegment для каждого нативного адреса создаёт короткоживущие объекты и нагружает GC. Разбор арифметики указателей через FFM API показывает другой путь: один глобальный сегмент начинается с адреса 0 и расширяется через reinterpret до Long.MAX_VALUE.

VarHandle, построенный из описания структуры, получает этот сегмент как базу, а числовой адрес как смещение. Новая обёртка на каждом проходе не нужна. В авторском JMH-тесте такой вариант дал примерно 21 млн против 1,49 млн операций в миллисекунду.

Цена ускорения: глобальный сегмент не проверит, существует ли память по адресу и не была ли она освобождена. Для горячего участка сначала измерьте аллокации и производительность собственным JMH-тестом, а время жизни памяти контролируйте отдельно.
More from @a_cup_of_java
  1. Sep 27, 2026Spring Boot 4: как выбрать режим RestTestClient для проверки REST API Новый RestTestClient…
  2. Sep 27, 2026Java 25 и Micronaut: упрощаем точку входа через compact source file В Java 25 механизм com…
  3. Sep 26, 2026Как проверить отправку Kafka-сообщения в Spring Boot без Docker В интеграционном тесте с E…
  4. Sep 26, 2026Gradle 9.5.1 в одноразовом CI: сокращаем запуск сборки В свежем CI-контейнере нет состояни…
  5. Sep 26, 2026Vaadin и Spring: как собрать интерактивный Java-интерфейс Во второй части проекта NeuroWat…
  6. Sep 25, 2026HotSpot: как задачи JIT задерживают выгрузку ClassLoader JIT создаёт для горячего метода з…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →