Проводится ли оптимизация точки доступа (sun-jvm) несколько раз, если класс загружается разными загрузчиками классов? - PullRequest
1 голос
/ 24 сентября 2010

представьте себе, что (контейнерное) приложение создает несколько загрузчиков классов для размещения нескольких других / подприложений.

Для приложения-контейнера существует корневой загрузчик классов -say.Каждый раз, когда загружается субприложение, контейнер создает новый загрузчик классов для этого приложения.

Некоторые субприложения используют одни и те же классы, но они не были загружены загрузчиком классов контейнера, поэтому каждое субприложение (лучше: его загрузчик классов) загружает код, например, для класса А. Поэтому перманентное пространство будет заполнено дважды: один раз для подпрограммы № 1 и один раз для подпрограммы № 2.

Что это означает дляспот-оптимизация?
Произойдут ли одни и те же оптимизации дважды в классе A, по одному разу для каждого загрузчика классов?
Или есть какая-то "волшебная" встроенная функция, которая этого избегает?(Оптимизация сделана один раз)
Кто-то знает ссылку, это было объяснено?

Я имею в виду Sun (сервер) VM доставки с JDK 1.6

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Должен. Нет гарантии, что 2-й загрузчик классов загрузил тот же байт-код, что и 1-й загрузчик классов.

0 голосов
/ 24 сентября 2010

У меня нет литературы, на которую я могу указать вам, чтобы доказать это, но я могу сказать вам по опыту, что если ваши классы перезагружаются, ваши методы будут перекомпилированы и повторно оптимизированы,Вы можете наблюдать это, добавив:

-XX:+PrintCompilation

в командную строку Java и запустите ваше приложение.Это скажет вам точно, какие методы компилируются.Если вы видите один и тот же метод вывода дважды, вы знаете, что он перекомпилируется.Если вы не уверены, что ваши классы перезагружаются, добавьте:

-verbose:class

.Это покажет вам все события загрузки класса.

...