используется GroovyClassLoader, но порой нужно удалить из него класс, а поскольку из classLoader-а нельзя выгружать классы, то при необходимости создаем новый, но без ненужного класса.
Проблема в том, что тогда старый ClassLoader не удаляется сборщиком мусора и люто течет metaspace. В вижу только, что он сам себя удерживает. Как такое может быть ?
Инстансы классов из этого класслоадера живут долго?
> вижу только, что он сам себя удерживает. Как такое может быть ? сам себя не может. если никто извне на него ( или загруженные классы) не ссылается, он будет собран gc. кэши, thread-local-data обычно те места, в которых остаётся ненайденное.
Я тут кстати еще нашел такую штуку https://wiki.openjdk.java.net/display/zgc/Main Я правильно понимаю, что выгрузку классов отключили только для сборщика zgc. При этом я нашел интересную презентацию, кстати (смотреть 7 слайд) http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2019.pdf , там сказано, что сборка класов освуществляется всё же. Неужели это из-за разных вендоров?
Я еще потыкаю, вполне допускаю, что mat не показывает, что существуют классы, которые где-то используюится и принадлежат данному classLoader-у
в 11 выгрузка классов ещё не было, с 12 должна afaiu
на 5 слайде же рассказывают про новвоведения для 11
но мы же говорим только про конкретный сборщик zgc ?
ага, zgc новый. остальные gc ( коллеги поправят, если ошибусь) выгрузку класса делают. когда, именно, как, вероятно, надо смотреть конкретно для gc
Обсуждают сегодня