TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.37K subscribers
Post #8667 334
Почему JNI-ссылки могут привести к падению JVM

JNI отдаёт нативному коду дескриптор Java-объекта. Локальная ссылка, созданная в native-методе, привязана к текущему потоку и освобождается при завершении вызова. Сохранить её в статической переменной для следующего вызова — значит оставить недействительный дескриптор.

Для кэширования класса или callback-объекта нужна NewGlobalRef(). Такая ссылка удерживает объект от сборки мусора, пока нативный код не вызовет DeleteGlobalRef(). Поэтому место освобождения стоит определить сразу.

Отдельная ошибка — передавать JNIEnv* другому потоку. Нативный поток должен получить собственное окружение через подключение к JVM. Для диагностики в HotSpot есть флаг -Xcheck:jni.

Разбор ошибок с примерами C++
freeCodeCamp.org How to Avoid JNI Crashes by Managing Local and Global References Correctly Most JNI crashes don't come from complicated logic. They come from a small set of mistakes around object references: holding on to a reference after it has become invalid, creating references faster t
  • ❤‍🔥 1
More from @a_cup_of_java
  1. Oct 6, 2026Spring переводит патч-релизы на единый Patch Thursday Регулярные патч-релизы проектов Spri…
  2. Oct 2, 2026JDK 26: измеряем затраты CPU на сборку мусора JDK 26 добавляет MemoryMXBean.getTotalGcCpuT…
  3. Oct 1, 2026Как измерить экономию памяти от компактных заголовков в Java 27 В Java 27 HotSpot по умолч…
  4. Oct 1, 2026Spring Boot 4 и BoxLang: как сохранить CFML-шаблоны при миграции BoxLang Spring Boot Start…
  5. Oct 1, 2026JDK 25 и G1: почему Arrays.fill замедлился в 265 раз В JMH-тесте на Apple M4 Max заполнени…
  6. Sep 30, 2026Как настроить MFA в Spring Security 7 для приложения и отдельных эндпоинтов Spring Securit…
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 →