7
votes

Comment le code Java "Dupliqué" est optimisé par le compilateur JVM JIT?

Je suis chargé de maintenir une application basée sur JSP, en cours d'exécution sur IBM WebSphere 6.1 (IBM J9 JVM). Toutes les pages JSP ont une référence statique incluent une référence et dans cet inclusion, des méthodes java statiques sont déclarées. Ils sont inclus dans toutes les pages JSP pour offrir un "accès facile" à ces méthodes statiques utilitaires. Je sais que c'est une très mauvaise façon de travailler et je travaille pour changer cela. Mais, juste pour la curiosité, et pour soutenir mes efforts pour changer cela, je me demande comment ces méthodes statiques "dupliquées" sont optimisées par le compilateur JVM JIT.

  • Ils sont optimisés séparément même avoir exactement la même signature?
  • Le compilateur JVM JIT "voit" que ces méthodes sont toutes identiques et fournit un code Jit'ed "unifié"?

3 commentaires

Pourriez-vous rafraîchir mon esprit et dites-moi quelle est la syntaxe pour statique include ?


Il s'agit d'une inscription à l'aide d'une directive JSP (<% @ page inclut = "includefile.inc"%>). Le contenu de "inclusefile.inc" est statiquement inclus dans le code JSP lors de la compilation. Une dynamique include peut être effectuée à l'aide d'une balise JSP () où vous pouvez faire référence à une URL et le contenu est inclus à l'exécution. L'utilisation de la balise que vous pouvez également choisir de faire une statique include.


+1 pour le soutien. J'ai été exactement où vous êtes maintenant. La seule différence, dans le projet que j'ai héritée, c'était que ces méthodes statiques étaient coupées et pâtes dans chaque page JSP.


3 Réponses :


0
votes

Vous pouvez utiliser des importations statiques à partir d'une seule classe: <% @ Import Import = "Statique FOO *"%>.

alors vous n'avez plus tout ce qui est de la duplication. Et autre que l'importation, vous n'avez pas besoin de toucher AYTHINS SQUOW.


0 commentaires

11
votes

Chaque page JSP est compilée à une classe unique. Le code fourni sera donc également compilé dans des classes distinctes. Le JIT ne consolidera pas les diverses copies du code en un.

Pour éviter cela, vous pouvez mettre le code importé dans une vraie classe Java et importer cela dans le JSP. Ensuite, il n'y aura pas de duplicate, car vous réutilisez la même classe.


0 commentaires

3
votes

La réponse de MDMA est correcte pour la JVM actuelle, mais doit être qualifiée dans quelques respects.

  1. Les JITS dans les futures JVMS pourraient éventuellement supporter des optimisations agressives pour réduire l'empreinte mémoire du code natif.

  2. Le Flipside est que si vous avez des milliers de JSP distincts, il y a de fortes chances que les frais généraux de quelques méthodes statiques par classe JSP ne produisent pas beaucoup de différence pour votre empreinte mémoire de votre WebApp.


0 commentaires