2014-08-27 2 views
3

Этот вопрос идет немного дальше, чем мой предыдущий вопрос:Получение списка всех классов Java-классов, используемых из всех JVM?

Obtaining a list of all Java classes used from all JVM's?

Теперь мне нужно знать физическое местоположение, откуда эти классы загружаются из. Я проверил помощь jcmd для других команд, но мне это не помогло. Я также не могу найти его в jvisualvm, но информации также нет. Кто-нибудь может мне помочь?

EDIT: Это моя ситуация: у моей компании есть разные индивидуальные проекты java (jars), для которых мы можем контролировать, запускается ли она или останавливается. Мы можем контролировать это в нашем собственном веб-интерфейсе сборки. Каждый из таких процессов получает идентификатор процесса (PID) при запуске, а затем запускается на фоне.

Моя потребность: Мне нужен список всех загруженных классов каждым запущенным процессом PID java. У меня уже есть jcmd <pid> GC.class_histogram, но в этом списке содержится только список классов. Я также хочу получить информацию о том, где действительно загружаются классы (это jar, location в файловой системе).

ответ

1

Классов загружаются из java.lang.ClassLoader'sloadClass(String name) метода, который, в свою очередь называет findClass(String name) method.Usually, пользовательское ClassLoader переопределяет метод findClass, чтобы получить определение классов с использованием конкретного протокола и location.It может быть, что классы загружается из базы данных или из сетевого местоположения, местоположение которого может быть динамически генерировано. Значит, вы никогда не узнаете местоположение всех классов Java. Лучшим примером является AppletClassLoader, который загружает классы из сетевого потока или из удаленного места.

Bootstrap ClassLoader - основной пакет библиотеки, такие как rt.jar присутствует в папке JRE Lib

Extension ClassLoader - баночка файлы, находящиеся в папке доб или как указано в переменной окружения для внутр

System ClassLoader - путь к классам приложения или, как указано в переменная среды для пути к классу или с помощью параметра аргумента запуска JVM для -cp или -classpath

CustomClassLader - в соответствии с политикой загрузки класса класса classLoader (в основном определяемой в findClass())

+0

Из вашего объяснения я понимаю, что не всегда возможно узнать местоположение используемых классов. Но мне все же хотелось бы иметь случаи, когда это возможно, потому что 99% классов расположены в баночках, расположенных в файловой системе. У моей компании много различных проектов java, и мне нужно получить расположение классов на PID. –

+0

Какие именно классы? Классы, входящие в проект? Все классы в базах зависимости, которые есть в проекте? Возможно, объясните, почему вам нужна эта информация, что упрощает понимание того, какую область ответа вы ищете. Сейчас это просто открыто. – Gimby

+0

Спасибо, я отредактирую свой вопрос :) –

Смежные вопросы