Может ли загрузчик классов Java загружать класс более одного раза - PullRequest
1 голос
/ 14 декабря 2011

Может ли загрузчик классов Java загружать класс более одного раза, то есть загружать новые версии класса, не выдавая LinkageError «дублирующее определение класса»?

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

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Загрузчик классов может загрузить класс только один раз! Это означает, что он может определить его только один раз. Он может загружать его много раз, но только в первый раз. В остальное время он будет загружать существующий экземпляр, который он уже определил с первого раза.

Попытка определить класс дважды приводит к LinkageError «дублированного определения класса». Если необходимо загружать и перезагружать классы много раз, то это должны делать разные загрузчики классов, например:

Создайте собственный загрузчик классов, который будет загружать ваши классы. Если вы хотите перезагрузить любой класс, вы должны уничтожить ваш загрузчик классов, а затем создать его новый экземпляр, который будет загружать новые версии ваших классов.

Конечно, это вызывает дополнительную нагрузку, но если вам это нужно, это нормально.

Кроме того, будьте осторожны и не оставляйте ссылки на ваши классы при уничтожении старого экземпляра вашего загрузчика классов, так как это приведет к утечке памяти!

0 голосов
/ 14 декабря 2011

Причина перезагрузки класса - изменения в классе.В этом месте горячая точка заботится о перезагрузке класса автоматически.Так что вам не нужно заботиться об этом.Надеюсь, это поможет.

...