TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.38K subscribers
Post #8646 301
HotSpot: как задачи JIT задерживают выгрузку ClassLoader

JIT создаёт для горячего метода задачу CompileTask: она держит ссылку на метод, класс и его загрузчик. Пока поток C1 или C2 не завершит компиляцию, GC не выгрузит загрузчик.

Поэтому тест после System.gc() может срабатывать нестабильно. Повторный полный GC иногда мешает компиляторам закончить работу.

Для диагностики дайте JIT время либо отключите фоновую компиляцию флагом -XX:-BackgroundCompilation. Это делает удаление задач предсказуемее, но добавляет скачки задержки. Тест с URLClassLoader и PhantomReference показывает этот сценарий.
albertnetymk's notes OpenJDK Trivia: Class Unloading and CompileTask Retention §The Problem When all references to a class loader are released and System.gc() is invoked, the class loader should become eligible for garbage collection. However, with JIT compilation enabled, Compi
More from @a_cup_of_java
  1. Sep 25, 2026Как ускорить агрегацию в Spring Batch с помощью DuckDB В Spring Batch агрегацию миллионов…
  2. Sep 25, 2026Как перевести сборку Gradle на Isolated Projects Isolated Projects параллельно конфигуриру…
  3. Sep 24, 2026Как перенести Spring Boot 3.5 на 4.1 и не пропустить тихие поломки Поддержка Spring Boot 3…
  4. Sep 24, 2026Почему ref = null обычно не помогает сборщику мусора JVM Локальная ссылка в стеке потока о…
  5. Sep 24, 2026Value-классы в JDK 28: где JVM убирает аллокации, а где возвращает их JEP 401 вошёл в JDK…
  6. Sep 23, 2026Как показать вызовы инструментов в интерфейсе на Spring AI 2.0 Spring AI 2.0 вынес цикл вы…
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 →