Architecture de la jvm deuxieme partie

358 vues

Publié le

2 commentaires
0 j’aime
Statistiques
Remarques
  • @David Beberman Thank you for taking your time to read my diagrams. I appreciate your comment, but there is only one thing i will like to mention, the slides concern Hot Spot virtual machine not Aicas. I mentioned it in the first part of this series. Nevertheless i am interested in your product for benchmarking. Regards Michael Njong
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • @Michael Njong -- you posted this on the JamaicaVM Personal Edition group, a private group for Aicas JamaicaVM Personal Edition users. I can not translate your transcript to english. However looking at your diagrams, it appears you are confused about the strengths of JamaicaVM technology. A critical feature is that it uses ahead-of-time (AOT) compilation. This means that AOT occurs offline during development, where there are plenty of compute resources to translate to optimized machine code. This delivers execution throughput on the order of C/C++, without the non-determinism of a JIT. As it turns out, AOT also significantly decreases load time, to the equivalent of loading any shared object file, no warmup is needed since no JIT occurs. This is just one of the critical technologies that JamaicaVM provides for embedded, realtime, secure applicaitons. As I'm going only by your slides, if I misunderstand your post, my apologies. Please contact us at info@aicas.com if you need more information about the strengths of our products and technology including the foundation JamaicaVM toolsuite, JamaicaCAR for the automotive infotainment market, or Jamaica-IoT for the growing IoT markets. Regards, David Beberman
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
358
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
3
Commentaires
2
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Architecture de la jvm deuxieme partie

  1. 1. Comme mentionnédanslapremière partie de cette série d’articlessurlaJVM,le bytecode généré parun compilateurstatique,estchargé dans laJVMgrâce aux chargeursde classe. Ensuite,leditcode écritenlangage intermédiaire noncompréhensible parle microprocesseur, estinterprété ligneparligne parl’interpréteurqui faitpartie de l’architecture de laJVM,ledit code est transformé encode assembleurpourêtre reconnuparle microprocesseur,puisen
  2. 2. code machine,pourêtre enfinexécuté.Cependant,pendantl’exécution,laJVMcompte le nombre de foisqu’uncode estexécuté,si elle constate l’appel fréquentd’uncode,celui-ci est éligible àlacompilation parlaJIT (Jus-In-Time Compiler) qui estuncompilateurdynamique faisantaussi partie de laJVM. Dans cetarticle,nousallons parlerdesrôlesde l’interpréteuret du compilateurJITdansle processusd’exécutionducode chargé dansla JVM. I-L’interpréteur L’interpréteurimplémentédansHotspot(JVMoracle) est basé surun Template. L’implémentation d’uninterpréteur peutse faire soitenmode Templatecomme c’estle casde Hotspotou enmode switchcase dans une boucle,lesdeux modesontdesavantagesetdes inconvénients que nousn’allonspas détaillerdanscetarticle. Pendantle démarrage de laJVM,celle-ci génèreenmémoire l’interpréteur enutilisantdes informations stockées dansuntemplate appeléTemplateTable.Cette structure de donnée contientle mappingentre chaque instructionde bytecode etl’instruction dédiéeàchaque type de machine.La JVMfournitaussi desaccesseurssousforme de fonctionspour accéderau contenudu TemplateTable. Après le chargementdubytecode,le code n’estpas compilé immédiatement,ceci pourdeux raisons : La première raison, estlafréquence d’exécutionducode.Eneffet,si uncode estappelé une fois il n’estdoncpas nécessaire de le compiler,il serait beaucoupplusjudicieux qu’une interprétationsoitfaite pouréviterune consommationde ressourcesinutiles,carcompilerdu code exécuté une seulefoisnécessite plusieurscycles processeur, cependant, le prix àpayer, estla lenteurd’exécution. End’autresmotsle code interprétéest moinsrapide dansl’exécution que le code compilé. La deuxième raisonc’estl’optimisation.Uncode fréquemmentexécuté permetàlaJVMde glanerdesinformationsqu’elleutiliserapendantlacompilation aux finsd’optimisation. Afind’illustrernospropos,prenonsune méthodefairequelqueChose() qui estdéfiniedansune classe X,héritée etredéfinieparune autre classe Y, lorsde l’appel de celle-ci surune instance de Y (y1. fairequelqueChose()),laJVMva faire une recherche(lookup) sur l’appelde ladite méthode afinde déterminerlaméthode de laclasse à exécuter.Parle mécanismede polymorphisme, fairequelqueChose()de Yva être exécutée. Ce processus (recherche – exécution(interprétation)) vase répétertantaussi longtemps que le code n’estpas compilé. Après plusieurs exécutions,laJVMva pouvoirglanerdes informationssurladite méthodeetse rendre compte que fairequelqueChose()estappeléparl’instance de Y. Cesinformationsseront ensuite utiliséespendantlaphase de compilation.LaJVMva optimisersonprocessusen éliminantl’étapede recherche,ce qui vapermettre àlaJVMde gagnerencélérité dansson processus.
  3. 3. Figure 1 Il existe danslaJVM5 niveaux de compilationqui représententl’étatde compilationd’uncode dans laJVM :  Niveau0 : Code interprété  Niveau1 : C1 (compilateurclient) code compilé simplifié  Niveau2 : C1 (Compilateurclient) code compilé limité  Niveau3 : C1 (Compilateurclient) code compilé enentier  Niveau4 : C2 (Compilateurserveur) code compilé Comme nouspouvonsle constater,le code interprété estauniveau0.Il représente le tout premierétatd’uncode chargé dans la JVMpendantl’exécution.Il estànoterque toutcode
  4. 4. chargé dansla JVMcommence auniveau0 avant de poursuivre sonchemindansune file de compilation. Nousconstatonségalementqu’il existe deuxtypesde compilateurdanslaJVM, le compilateurclient C1et le compilateurserveurC2. II-Compilateur Pendantl’exécution d’une méthode, laJVMétablit2compteurs,1 pour lafréquence d’appelde ladite méthode etundeuxième pourchaque branchement de laboucle,si laméthode contient une boucle.Cesdeux compteurssontdonc comparés àune variable paramétrable : CompileThreshold.Cette variable pardéfautdansle compilateurclientest1500 etpour le compilateurserveurest10000. Elle peutfaire partie des paramètres de calibrage de laJVMen indiquant:-XX :compileThreshold=N etN représente le nombre de fois nécessaire pourqu’un code soitappelé afind’ être éligible àune compilation. Le compilateurJITexisteendeux types,le client etle serveur.DanslaJVM,ilssont appelés respectivementcompilateurC1etcompilateurC2. Pour l’utilisation,il fautmentionner la commande –clientou –server dans le calibrage de laJVM, enpassantces variablesdansles argumentsd’exécution de laJVM. La différence entreles2typesde compilateurs estlaréactivité face aucode à compiler,le compilateurclientestbeaucoupplusrapide danslacompilationau débutde l’exécution que le compilateurserveur.Enrevanche,le compilateurC2(serveur) vaproduire une meilleure optimisationque le compilateurC1.Ce qui implique un certaingain entermesde rapidité d’exécution ducode compilé parC2. Depuislaversion7 de java,il existe une autre forme de compilation,qui utilise lesdeux typesde compilateurscomme levier.Appelée TieredCompilation,etparamétrée aulancementde laJVM aveccet argument–XX :+TieredCompilation ,elle permetde profiterde lacéléritéde compilation ducode compilé de C1au démarrage de l’exécution etde laqualité d’optimisation du code compilé parC2. Dans le processusde compilation,laJVMutilise une ressource appeléecode cache qui lui permetd’optimisersonprocessus.Lataille de cette structure aune incidence surla quantité du code à compiler. Elle permetàlaJVMd’y stocker certaines instructions enassembleurà utiliserpourlacompilation.Ayantune taillepardéfaut,ellepeuttoutde même être calibrée en utilisantcette commande :-XX:ReservedCodeCacheSize=N ,N étant lataille ducode cache. Lorsque la JVMconstate qu’uncode est éligible àlacompilation,il le metdansune file d’attente,ensuite selonlapriorité qui estétablieparle nombre d’appelsduditcode,il estdonc acheminé versle compilateur. Pourvisualiserleslogsde compilations,il fautcalibrerlaJVMavec cette argument – XX :+PrintCompilation.

×