Java VM: как войти разгрузки класса - PullRequest
1 голос
/ 25 октября 2019

Я не смог найти здесь, на SO и через веб-поиск, рабочий способ использования параметров для Java VM (JVM) для регистрации выгрузки классов.

Здесь http://www.herongyang.com/JVM/ClassLoader-JVM-Option-verbose-class.html рекомендуется позвонить java -verbose:class -version, но это сказано для загрузки, и это дало журнал только для загрузки.

Вкл. Параметры виртуальной машины Java HotSpot :

-XX: -TraceClassUnloading Отслеживать выгрузку классов. -XX: -TraceClassLoading Трассировка загрузки классов.

java -XX:-TraceClassUnloading -version не выводит информацию о классах:

[0.004s][warning][arguments] -XX:-TraceClassUnloading is deprecated. Will use -Xlog:class+unload=off instead.
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)

и:

java -XX:-TraceClassLoading -version
[0.002s][warning][arguments] -XX:-TraceClassLoading is deprecated. Will use -Xlog:class+load=off instead.
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)

То же самое.

Дополнительный вопрос: устаревшее слово означает обескураженное, не работающее больше, почему такое поведение?

однако для загрузки класса java -Xlog:class+load -version выводит информацию, например,

[0.037s][info][class,load] java.nio.CharBuffer source: shared objects file
[0.037s][info][class,load] java.nio.HeapCharBuffer source: shared objects file
[0.037s][info][class,load] java.nio.charset.CoderResult source: shared objects file

Но java -Xlog:class+unload -version только информация о версии.

Как получить журнал выгрузки классов для Java VM HotSpot (и / или OpenJDK)?

1 Ответ

2 голосов
/ 25 октября 2019

Вы говорите, что

java -XX:-TraceClassUnloading -version 

не выводит информацию о классах. Но я не знаю, почему ожидал бы , что он предоставит информацию.

Вы увидите журналирование, только если JVM была запущена И классы были загружены и выгружены:

  • Документация для опции -version гласит:

    -version Отображает информацию о версии и затем завершает работу.

    Это не означает, что JVM запущена.

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

    1. создан дополнительный загрузчик классов и
    2. этот загрузчик классов используется для загрузки классов, и
    3. эти классы и загрузчик классов все становятся недоступными 1 и
    4. ГХ запускает 2 , а
    5. ГХ обнаруживает, что классы недоступны 2 и выгрузки 4 их.

Короче говоря, вы (были), скорее всего, не видели никакого сообщения журнала выгрузки, потому что нет классов(были) выгружаются.


1 - Между классом и его загрузчиком классов есть двусторонняя связь, а также односторонняя связь любого экземпляра класса с самим классом. Одним из следствий этого является то, что загрузчик классов начальной загрузки и загрузчик классов приложений будут оставаться доступными в течение всего срока службы JVM.

2 - ГХ обычно запускается только при необходимости;то есть когда использование кучи достигает определенного порога. Он не запускается автоматически при выходе из JVM.

3 - Один прогон ГХ не обязательно найдет все недоступные объекты.

4 - Некоторые JVM / GC не поддерживают выгрузку классов, и эту функцию можно отключить (или, возможно, потребуется включить) с помощью параметра командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...