SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Dalvik 292
            Jérôme Pilliet

Université Paris-Est de Marne-la-Vallée
Sommaire
●   Avant propos
●   JVM vs DVM
       ●   Principe
       ●   Comportement
●   JSR 292
       ●   Principe
       ●   java.lang.invoke
       ●   Exemple
●   Optimisation
       ●   VMs modernes
       ●   JSR 292
●   Dalvik 292
       ●   Problèmes et solutions partielles
●   Conclusion
Avant propos
●   Langages typés dynamiquement
       ●   sémantique déterminée à l'exécution
●   Smartphone / tablette
       ●   mémoire restreinte
       ●   puissance de calcul restreinte
●   Android et Dalvik
       ●   OS le plus utilisé
       ●   technologie Java - Dalvik
JVM vs DVM
                                   Principe

●   Machine à piles / machine à registres
●   Spécification ~ Java 6
JVM vs DVM
                                   Principe

●   Machine à piles / machine à registres
●   Spécification ~ Java 6
JVM vs DVM
                                   Principe

●   Machine à piles / machine à registres
●   Spécification ~ Java 6
JVM vs DVM
                                          Comportement
●   Dalvik                                     ●   Java Virtual Machine
       ●     Bytecode                                 ●   JIT Compiler
                –readonly
       ●     ODEX
                –   bytecode
                –   vtables (methodes)
                –   offsets (attributs)
                – method inlining
       ●     Zygote
                – pre-load VM
       ●     Trace/Method JIT Compiler
       ●     Garbage Collector
                –   restreint
JSR 292
 Principe
JSR 292
 Principe
JSR 292
 Principe
JSR 292
                             java.lang.invoke

●   invokedynamic
       ●   édition de lien

●   MethodHandle                   ●   CallSite
       ●   invokeExact                     ●   conteneur de MH
       ●   invoke
           combinateurs
                                       SwitchPoint
       ●
                                   ●
       ●   GuardWithTest                   ●   désoptimisation
       ●   ...

●   MethodHandle Tree
       ●   combinaison de MH
JSR 292
                   Exemple


class A {
   foo() {
     …
   }
}

       .
       .
       .
       .
             invokevirtual java/lang/Object.foo:()Object
…
b.foo()
...
JSR 292
                   Exemple


class A {
   foo() {
     …
   }
}

       .
       .
       .
       .
             invokevirtual java/lang/Object.foo:()Object
…
b.foo()
...
             invokedynamic ''foo'':()Object
JSR 292
                                                    Exemple

       // exemple
       …
       A=B+C;
       ...




…
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...
JSR 292
                                                    Exemple

       // exemple
       …
       A=B+C;
       ...




…
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...

             1. appel methode d'amorce

                      CallSite bsm(Lookup lookup, String name, MethodType type) {
                        CallSite cs = ...
                        MethodHandle mh = ...
                        cs.setTarget(mh);
                        return cs;
                      }
JSR 292
                                                    Exemple

       // exemple
       …
       A=B+C;
       ...




…
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...
                                                               2. associe un CallSite
             1. appel methode d'amorce                              au site d'appel
                      CallSite bsm(Lookup lookup, String name, MethodType type) {
                        CallSite cs = ...
                        MethodHandle mh = ...
                        cs.setTarget(mh);
                        return cs;
                      }
JSR 292
                                                    Exemple

       // exemple
       …
       A=B+C;                                              Arbre de
       ...                                              MethodHandles
                               3. appels suivants


…
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...
                                                               2. associe un CallSite
             1. appel methode d'amorce                              au site d'appel
                      CallSite bsm(Lookup lookup, String name, MethodType type) {
                        CallSite cs = ...
                        MethodHandle mh = ...
                        cs.setTarget(mh);
                        return cs;
                      }
JSR 292
                                                    Exemple

       // exemple                                                                       +(int, int)
       …
       A=B+C;                                              Arbre de                 +(double, double)
       ...                                              MethodHandles
                               3. appels suivants


…
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...
                                                               2. associe un CallSite
             1. appel methode d'amorce                              au site d'appel
                      CallSite bsm(Lookup lookup, String name, MethodType type) {
                        CallSite cs = ...
                        MethodHandle mh = ...
                        cs.setTarget(mh);
                        return cs;
                      }
JSR 292
                                                    Exemple

       // exemple                                                                       +(int, int)
       …
       A=B+C;                                              Arbre de                 +(double, double)
       ...                                              MethodHandles
                               3. appels suivants                               fallback(CallSite cs) {
                                                                                  ...
                                                                                  cs.setTarget(...)
                                                          change la cible
…                                                                               }
invokedynamic "+" (Object, Object)Object
  bsm: RT.bsm(Lookup, String, MethodType)CallSite
...
                                                               2. associe un CallSite
             1. appel methode d'amorce                              au site d'appel
                      CallSite bsm(Lookup lookup, String name, MethodType type) {
                        CallSite cs = ...
                        MethodHandle mh = ...
                        cs.setTarget(mh);
                        return cs;
                      }
Optimisation
                   VMs modernes
                         ●   Profiling
                                 ●   présence de ''null''
                                 ●   receveurs d'appels virtuels
                                 ●   classes pour les cast/instanceof
                                 ●   fréquence des branches des if
                         ●   Détection de code chaud
                                 ●   méthode chaude
                                 ●   boucle chaude (OSR)

●   Génération de code machine optimiste
       ●   pas de test à null si jamais null
       ●   pas de branche non prise
       ●   inlining des appels virtuels
       ●   cheap-cast
       ●   désoptimisation si assomption fausse
Optimisation
                                     JSR 292
●   Profiling
        ●   détection de MethodHandle chaud et stabilité de invokedynamic
        ●   receveur de l’appel virtuel
        ●   branche pour le GuardWithTest
●   Détection
        ●   stabilité target d'un invokedynamic
                ●invokeExact / génération de bytecode
        ●   MethodHandle chaud
                ●appel en assembleur
        ●   MethodHandles Tree
                ●   génération de bytecode => Out Of Memory !!!
                ●   (Pré-JDK 7) appel en Java
                ●   (JDK 7) mini-interpréteur (AST)
                ●   (JDK 8) LambdaForm + paramètres JITé
Dalvik 292
Problèmes et solutions
Dalvik 292
                                    Problèmes et solutions

●   Détection de MethodHandle chaud
          ●   MethodHandle
                 ● bytecode spécifique
          ●   MethodHandle Tree
                 ●   squelette en code DEX
                 ●   convention d'appel spécifique                      skeleton.args
                         ●   gère l'optimisation des lambdas (Java 8)
                                                                          mh.args
●   JIT
          ●   MethodHandle et petit MethodHandle Tree
                 ● inlining                                                  Pile
          ●   Squelette
                 ●   JITé
Conclusion


●   Avancement
        ●     ajout des instructions
        ●     nouveau format DEX
        ●     génération du fichier DEX

●   Intérêt
        ●     Dalvik : une VM comme les autres
        ●     suivre évolution Java
Dalvik 292

             Jérôme Pilliet
    <jerome.pilliet@univ-paris-est.fr>

Université Paris-Est de Marne-la-Vallée

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (9)

Introduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsIntroduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomics
 
Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009Introduction à MacRuby - OSDC.fr 2009
Introduction à MacRuby - OSDC.fr 2009
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Chap4 cliserrmi
Chap4 cliserrmiChap4 cliserrmi
Chap4 cliserrmi
 
Démons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQDémons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQ
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Remote method invocation
Remote method invocationRemote method invocation
Remote method invocation
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !
 

Andere mochten auch

OWF13 - What’s next for Open Source Communities?
OWF13 - What’s next for Open Source  Communities?OWF13 - What’s next for Open Source  Communities?
OWF13 - What’s next for Open Source Communities?Paris Open Source Summit
 
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...Paris Open Source Summit
 
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URD
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URDSigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URD
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URDParis Open Source Summit
 
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...Paris Open Source Summit
 

Andere mochten auch (9)

Open World Forum 2012 Outcomes
Open World Forum 2012 OutcomesOpen World Forum 2012 Outcomes
Open World Forum 2012 Outcomes
 
Barak Regev - Google Cloud Platform
Barak Regev - Google Cloud PlatformBarak Regev - Google Cloud Platform
Barak Regev - Google Cloud Platform
 
OWF13 - What’s next for Open Source Communities?
OWF13 - What’s next for Open Source  Communities?OWF13 - What’s next for Open Source  Communities?
OWF13 - What’s next for Open Source Communities?
 
OWF13 - Openstack
OWF13 - OpenstackOWF13 - Openstack
OWF13 - Openstack
 
OWF12/Java Moussine pouchkine Girard
OWF12/Java  Moussine pouchkine GirardOWF12/Java  Moussine pouchkine Girard
OWF12/Java Moussine pouchkine Girard
 
OWF12/OSDC.Fr Golang concurrency patterns
OWF12/OSDC.Fr Golang concurrency patternsOWF12/OSDC.Fr Golang concurrency patterns
OWF12/OSDC.Fr Golang concurrency patterns
 
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...
OWF14 : Project & Community driving track : The PostgreSQL Project - An examp...
 
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URD
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URDSigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URD
Sigmah presentation @Open World Forum 2012 - Olivier Sarrat, Groupe URD
 
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...
EOLE / OWF 12 - Procuring software by mentioning brand names -mathieu paapst ...
 

Mehr von Paris Open Source Summit

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...Paris Open Source Summit
 
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...Paris Open Source Summit
 
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...Paris Open Source Summit
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, ArduinoParis Open Source Summit
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...Paris Open Source Summit
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...Paris Open Source Summit
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, ZabbixParis Open Source Summit
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, InriaParis Open Source Summit
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...Paris Open Source Summit
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...Paris Open Source Summit
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...Paris Open Source Summit
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...Paris Open Source Summit
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...Paris Open Source Summit
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...Paris Open Source Summit
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...Paris Open Source Summit
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...Paris Open Source Summit
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données Paris Open Source Summit
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...Paris Open Source Summit
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...Paris Open Source Summit
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...Paris Open Source Summit
 

Mehr von Paris Open Source Summit (20)

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
 
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
 
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
 

OWF12/PAUG Conf Days From dalvik to apps development jérôme pilliet student

  • 1.
  • 2. Dalvik 292 Jérôme Pilliet Université Paris-Est de Marne-la-Vallée
  • 3. Sommaire ● Avant propos ● JVM vs DVM ● Principe ● Comportement ● JSR 292 ● Principe ● java.lang.invoke ● Exemple ● Optimisation ● VMs modernes ● JSR 292 ● Dalvik 292 ● Problèmes et solutions partielles ● Conclusion
  • 4. Avant propos ● Langages typés dynamiquement ● sémantique déterminée à l'exécution ● Smartphone / tablette ● mémoire restreinte ● puissance de calcul restreinte ● Android et Dalvik ● OS le plus utilisé ● technologie Java - Dalvik
  • 5. JVM vs DVM Principe ● Machine à piles / machine à registres ● Spécification ~ Java 6
  • 6. JVM vs DVM Principe ● Machine à piles / machine à registres ● Spécification ~ Java 6
  • 7. JVM vs DVM Principe ● Machine à piles / machine à registres ● Spécification ~ Java 6
  • 8. JVM vs DVM Comportement ● Dalvik ● Java Virtual Machine ● Bytecode ● JIT Compiler –readonly ● ODEX – bytecode – vtables (methodes) – offsets (attributs) – method inlining ● Zygote – pre-load VM ● Trace/Method JIT Compiler ● Garbage Collector – restreint
  • 12. JSR 292 java.lang.invoke ● invokedynamic ● édition de lien ● MethodHandle ● CallSite ● invokeExact ● conteneur de MH ● invoke combinateurs SwitchPoint ● ● ● GuardWithTest ● désoptimisation ● ... ● MethodHandle Tree ● combinaison de MH
  • 13. JSR 292 Exemple class A { foo() { … } } . . . . invokevirtual java/lang/Object.foo:()Object … b.foo() ...
  • 14. JSR 292 Exemple class A { foo() { … } } . . . . invokevirtual java/lang/Object.foo:()Object … b.foo() ... invokedynamic ''foo'':()Object
  • 15. JSR 292 Exemple // exemple … A=B+C; ... … invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ...
  • 16. JSR 292 Exemple // exemple … A=B+C; ... … invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ... 1. appel methode d'amorce CallSite bsm(Lookup lookup, String name, MethodType type) { CallSite cs = ... MethodHandle mh = ... cs.setTarget(mh); return cs; }
  • 17. JSR 292 Exemple // exemple … A=B+C; ... … invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ... 2. associe un CallSite 1. appel methode d'amorce au site d'appel CallSite bsm(Lookup lookup, String name, MethodType type) { CallSite cs = ... MethodHandle mh = ... cs.setTarget(mh); return cs; }
  • 18. JSR 292 Exemple // exemple … A=B+C; Arbre de ... MethodHandles 3. appels suivants … invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ... 2. associe un CallSite 1. appel methode d'amorce au site d'appel CallSite bsm(Lookup lookup, String name, MethodType type) { CallSite cs = ... MethodHandle mh = ... cs.setTarget(mh); return cs; }
  • 19. JSR 292 Exemple // exemple +(int, int) … A=B+C; Arbre de +(double, double) ... MethodHandles 3. appels suivants … invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ... 2. associe un CallSite 1. appel methode d'amorce au site d'appel CallSite bsm(Lookup lookup, String name, MethodType type) { CallSite cs = ... MethodHandle mh = ... cs.setTarget(mh); return cs; }
  • 20. JSR 292 Exemple // exemple +(int, int) … A=B+C; Arbre de +(double, double) ... MethodHandles 3. appels suivants fallback(CallSite cs) { ... cs.setTarget(...) change la cible … } invokedynamic "+" (Object, Object)Object bsm: RT.bsm(Lookup, String, MethodType)CallSite ... 2. associe un CallSite 1. appel methode d'amorce au site d'appel CallSite bsm(Lookup lookup, String name, MethodType type) { CallSite cs = ... MethodHandle mh = ... cs.setTarget(mh); return cs; }
  • 21. Optimisation VMs modernes ● Profiling ● présence de ''null'' ● receveurs d'appels virtuels ● classes pour les cast/instanceof ● fréquence des branches des if ● Détection de code chaud ● méthode chaude ● boucle chaude (OSR) ● Génération de code machine optimiste ● pas de test à null si jamais null ● pas de branche non prise ● inlining des appels virtuels ● cheap-cast ● désoptimisation si assomption fausse
  • 22. Optimisation JSR 292 ● Profiling ● détection de MethodHandle chaud et stabilité de invokedynamic ● receveur de l’appel virtuel ● branche pour le GuardWithTest ● Détection ● stabilité target d'un invokedynamic ●invokeExact / génération de bytecode ● MethodHandle chaud ●appel en assembleur ● MethodHandles Tree ● génération de bytecode => Out Of Memory !!! ● (Pré-JDK 7) appel en Java ● (JDK 7) mini-interpréteur (AST) ● (JDK 8) LambdaForm + paramètres JITé
  • 24. Dalvik 292 Problèmes et solutions ● Détection de MethodHandle chaud ● MethodHandle ● bytecode spécifique ● MethodHandle Tree ● squelette en code DEX ● convention d'appel spécifique skeleton.args ● gère l'optimisation des lambdas (Java 8) mh.args ● JIT ● MethodHandle et petit MethodHandle Tree ● inlining Pile ● Squelette ● JITé
  • 25. Conclusion ● Avancement ● ajout des instructions ● nouveau format DEX ● génération du fichier DEX ● Intérêt ● Dalvik : une VM comme les autres ● suivre évolution Java
  • 26. Dalvik 292 Jérôme Pilliet <jerome.pilliet@univ-paris-est.fr> Université Paris-Est de Marne-la-Vallée