2010-09-24 8 views
1

Представьте, что приложение (container-) создает несколько загрузчиков классов для размещения нескольких других/суб-приложений.Оптимизация точек доступа (sun-jvm) выполняется несколько раз, если класс загружен разными загрузчиками классов?

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

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

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

Я имею в виду на солнце (сервер) Vm с доставкой JDK 1.6

ответ

0

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

-XX:+PrintCompilation 

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

-verbose:class 

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

+0

Спасибо, что ответили - мне не хватает вашего опыта :). Однако я попробую использовать jvm-переключатели. – MartinK

+0

Используя эти переключатели, вы можете сделать свой собственный тест, чтобы проверить поведение HotSpot. И, пожалуйста, сообщите о своих результатах! ;-) –

+0

@Neeme: Угадайте, что? Я сделал! Я создал блог! См .: http://growninthewild.blogspot.com/2010/09/java-virtual-machine-hotspot.html – MartinK

0

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

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