Почему в java ClassLoader нет метода unloadClass (String name) - PullRequest
0 голосов
/ 27 апреля 2018

Как отмечается в этом посте , классы будут загружены, когда их ClassLoader будет собирать мусор, и OSGI использует это для реализации hot-depoly.
Но почему бы JDK не предоставить метод unloadClass(String name), чтобы помочь нам удалить отдельный класс? Так как они обеспечивают loadClass(String name)
Есть ли какие-либо трудности или побочные эффекты для обеспечения этой функции?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Но почему бы JDK не предоставить метод unloadClass (String name), чтобы помочь нам удалить отдельный класс?

На этот вопрос можно ответить, принимая во внимание одну из основных философий Java. Java была создана с учетом того, что пользователю не приходится иметь дело с управлением памятью. Когда вы говорите «выгрузка класса», это, по сути, означает, что удаление ссылок на класс освобождает память из области метода / области класса, где хранятся данные, относящиеся к классу.

Есть ли какие-либо трудности или побочные эффекты для обеспечения этой функции?

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

Для более детального понимания jvm вы можете обратиться по ссылке ниже:

http://blog.jamesdbloom.com/JVMInternals.html

0 голосов
/ 27 апреля 2018

Но почему бы JDK не предоставить метод unloadClass (String name), чтобы помочь нам удалить отдельный класс? Так как они предоставляют loadClass (имя строки)

Загрузка класса является очень распространенным действием, которое почти всегда необходимо выполнять (явно или в фоновом режиме) после создания загрузчика классов. Разгрузка класс - это очень специализированное действие, которое только когда-либо увидит выгоду в крошечной части вариантов использования, и сопровождается сложностями и трудностями.

Есть ли какие-либо трудности или побочные эффекты для обеспечения этой функции?

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

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