Загружает ли системный загрузчик классов все классы в classpath, даже если они на самом деле не используются? - PullRequest
2 голосов
/ 07 июня 2011

Я использую JDK 1.6 для запуска небольшого приложения. Однако я установил очень массивный путь к классам, который включает в себя множество классов.

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

Например, я использую ant 1.7 для запуска своего приложения.

С наилучшими пожеланиями, Роберт Джи

Ответы [ 3 ]

6 голосов
/ 07 июня 2011

Нет, ClassLoader загружает класс, когда класс нужен в памяти. Он не загружает все классы одновременно, так как может исчерпать память.

2 голосов
/ 07 июня 2011

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

Вы можете проверить это, добавив параметр -verbose в вашу Java JVM, после чего он выдаствсе классы, которые он загружает, и откуда.

1 голос
/ 07 июня 2011

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

...