Как предварительно загрузить классы в Java?

Первое открытие нового JInternalFrame в моем интерфейсе Swing занимает некоторое время. По словам профилировщика, большая часть этого времени тратится на метод Classloader.loadClass(). Я понимаю, что он загружает классы динамически, когда это необходимо, и действительно, в следующий раз, когда я открываю тот же фрейм, это происходит намного быстрее.

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

Есть ли способ добиться этого, кроме создания полного пути «фиктивных конструкторов» через мои панели и фактической инициализации экземпляра этих классов?

В идеале, если бы можно было каскадировать такую ​​загрузку, было бы еще лучше. Немного похоже на работу classfileset в ant


person Gnoupi    schedule 07.08.2014    source источник
comment
ClassLoader#loadClass   -  person BackSlash    schedule 07.08.2014
comment
Я сделал эту проблему с JasperReports. Что я сделал, так это создал фиктивный отчет, предварительно загрузив его банки и зависимости.   -  person JCalcines    schedule 07.08.2014
comment
Существует ClassPreloader, который вы можете использовать для настройки предварительной загрузки вашего класса. Например, загрузка любого класса начинается с некоторых строк, регулярных выражений или в некоторых пакетах.   -  person StarPinkER    schedule 28.10.2014
comment
@StarPinkER - интересно! Спасибо за ссылку, посмотрю   -  person Gnoupi    schedule 29.10.2014


Ответы (1)


Предполагая, что вы не делаете ничего особенного с загрузчиками классов, вы можете вызвать Class.forName(String className) для каждого класса, который хотите предварительно загрузить.

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

person user253751    schedule 07.08.2014
comment
Кажется, действительно помогает (надеюсь, никаких проблем со статическим электричеством). Теперь, чтобы найти умный способ получить зависимости для некоторых корневых классов... - person Gnoupi; 07.08.2014