Чтобы ускорить время запуска JVM, разработчики Sun решили, что рекомендуется предварительно скомпилировать стандартные классы выполнения для платформы во время установки JVM. Эти предварительно скомпилированные классы можно найти, например. по адресу:
$JAVA_HOME\JRE\Bin\клиент\classes.jsa
Моя компания в настоящее время разрабатывает автономное приложение Java, которое привносит свою собственную JRE, поэтому было бы фантастическим вариантом ускорить время запуска приложения, добавив также свои собственные классы приложений в этот файл jsa.
Я не верю, что JSA файл был создан магией, поэтому: как он создан? И как я могу обмануть JVM для включения моих собственных классов?
EDIT: я уже выяснил следующее:
Класс .jsa создается командой
java -Xshare:dump
Список классов для включения в дамп можно найти в $JAVA_HOME/jre/lib/classlist
.
Мне даже удалось добавить свои собственные классы (и добавить их в rt.jar для java, чтобы их найти) и создать собственную контрольную сумму под файлом списка.
Последняя проблема: только классы в пакетах java, com.sun и org.w3c кажутся узнаваемыми, если я оставляю одни и те же классы в своих исходных пакетах, они не будут загружены. Я искал весь источник OpenJDK для указателя об этом, но, похоже, он имеет какое-то отношение к доменам защиты. Если кто-то заинтересован в этой теме и достаточно хорошо осведомлен, добавьте несколько указателей для меня, чтобы продолжить исследование.