2010-09-24 1 views
1

Imaginez qu'une application (conteneur) crée plusieurs chargeurs de classe pour héberger deux autres applications/sous-applications.Est-ce que l'optimisation de hotspot (sun-jvm) a lieu plusieurs fois, si une classe est chargée par différents chargeurs de classe?

Il existe un chargeur de classe de type -say-root pour l'application de conteneur. Chaque fois qu'une sous-application est chargée, le conteneur crée un nouveau chargeur de classe pour cette application.

Certaines sous-applications utilisent les mêmes classes, mais elles n'ont pas été chargées par le chargeur de classe du conteneur, de sorte que chaque sous-application (mieux: son chargeur de classe) charge le code, par exemple. classe A. Par conséquent, l'espace permspace sera rempli deux fois: une fois pour la sous-application # 1 et une fois pour la sous-application # 2. Qu'est-ce que cela signifie pour l'optimisation des points chauds du soleil?


Les mêmes optimisations se produiront-elles deux fois sur la classe A, une fois pour chaque chargeur de classe?
Ou, y a-t-il un "magique" intégré qui évite cela? (Optimisations effectuées une fois)
Quelqu'un connaît un lien, si cela est expliqué?

Je me réfère à un soleil (serveur) expédition vm avec jdk 1.6

Répondre

0

Je n'ai pas la littérature que je peux vous indiquer pour le prouver, mais je peux vous dire par expérience que si vos classes sont en train d'être rechargées, vos méthodes seront recompilées et ré-optimisées. Vous pouvez observer ceci en ajoutant:

-XX:+PrintCompilation 

et d'exécuter votre application. Cela vous dira exactement quelles méthodes sont compilées. Si vous voyez deux fois la même sortie, vous savez qu'elle est recompilée. Si vous n'êtes pas sûr que vos classes sont rechargées, ajouter:

-verbose:class 

ainsi. Cela vous montrera tous les événements de chargement de classe.

+0

Merci d'avoir répondu - mon expérience me manque :). Cependant, je vais essayer les commutateurs jvm que vous avez fournis. – MartinK

+0

En utilisant ces commutateurs, vous pouvez effectuer votre propre test pour vérifier le comportement de HotSpot. Et s'il vous plaît, rapportez avec vos résultats! ;-) –

+0

@Neeme: Devinez quoi? J'ai fait! J'ai créé un blog! Voir: http://growninthewild.blogspot.com/2010/09/java-virtual-machine-hotspot.html – MartinK

0

Il doit. Il n'y a aucune garantie que le 2nd classloader ait chargé le même bytecode que le 1er classloader.

Questions connexes