3) Серверы приложений AFAIK, как правило, имеют иерархию загрузчиков классов и, следовательно, не существует единого загрузчика классов, который имел бы доступ ко всем классам. Фактически вам часто нужно загружать несколько экземпляров одного и того же класса, например, при развертывании независимых приложений, использующих статические переменные класса или разные версии класса или библиотеки. Вот краткое описание того, как JBoss делает это.
4) Скорее всего, профилировщики используют JVMTI .
Однако следует помнить, что не рекомендуется выставлять каждый класс и каждый объект из соображений безопасности, стабильности и производительности. Должен ли пользователь иметь возможность вызывать методы для внутренних классов или базовых классов, таких как String
? Должен ли пользователь иметь возможность звонить System.exit()
? Я бы сказал, нет, и поэтому вам нужно определить какой-то метод определения того, что подвергать. Скорее всего, гораздо более простое решение (выделенные сервисы) будет отвечать вашим требованиям варианта использования (вы не указали их, так что это всего лишь предположение).