ãã®æçš¿ã§ã¯ãAndroidã©ã³ã¿ã€ã ã«ã€ããŠèª¬æããŸããç¹ã«ãARTãšDalvikã®éããããã³AndroidéçºããŒã«ãæéã®çµéãšãšãã«ã©ã®ããã«æ¹åããããã«ã€ããŠãç°¡æœãã€ç°¡æœã«æŠèª¬ããŸãããã®ãããã¯ã¯æããã«æ°ãããã®ã§ã¯ãããŸãããããããæãäžãå§ããã°ããã®äººã«ãšã£ãŠåœ¹ç«ã€ããšãé¡ã£ãŠããŸããèª°ãæ°ã«ãã-ç«ãžããããã
ä»®æ³ãã·ã³
ãŸããJVMãšDVMã®éããèŠãŠã¿ãŸãããã
Java Virtual Machineã¯ãåºç€ãšãªããã©ãããã©ãŒã ã«é¢ä¿ãªããJavaãã€ãã³ãŒããå®è¡ã§ããä»®æ³ãã·ã³ã§ããããã¯ããäžåºŠæžã蟌ã¿ãã©ãã§ãå®è¡ãã®ååã«åºã¥ããŠããŸããJavaãã€ãã³ãŒãã¯ãJVMããµããŒãã§ããä»»æã®ãã·ã³ã§å®è¡ã§ããŸãã
Javaã³ã³ãã€ã©ã¯ã.javaãã¡ã€ã«ãã¯ã©ã¹ãã¡ã€ã«ïŒãã€ãã³ãŒãïŒã«å€æããŸãããã€ãã³ãŒãã¯JVMã«æž¡ãããJVMã¯ããããã·ã³ã³ãŒãã«ã³ã³ãã€ã«ããŠãCPUã§çŽæ¥å®è¡ããŸãã
JVMã®æ©èœïŒ
- ã¹ã¿ãã¯ã¢ãŒããã¯ãã£ããããŸããã¹ã¿ãã¯ã¯ãã¡ãœãããé 眮ããã³ä¿åãããããŒã¿æ§é ãšããŠäœ¿çšãããŸããLIFOãŸãã¯ãã©ã¹ãã€ã³-ãã¡ãŒã¹ãã¢ãŠãããŸãã¯ãã©ã¹ãã€ã³ããã¡ãŒã¹ãã¢ãŠããã¹ããŒã ã§æ©èœããŸãã
- ã¯ã©ã¹ãã¡ã€ã«ã®ã¿ãå®è¡ã§ããŸãã
- JITã³ã³ãã€ã©ã䜿çšããŸãã
Dalvik Virtual MachineïŒDVMïŒã¯ãAndroidã¢ãã€ã«ãã©ãããã©ãŒã ã®äžéšãšããŠDanBornsteinãã«ãã£ãŠéçºããã³äœæãããJavaä»®æ³ãã·ã³ã§ãã
Dalvikã¯ãAndroidãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã³ã³ããŒãã³ããšã«ã¹ã¿ã ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®ç°å¢ã§ãããšèšããŸããåããã»ã¹ã¯ãç¬èªã®åé¢ãããã¢ãã¬ã¹ç©ºéã§å®è¡ãããŸãããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšïŒãŸãã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã®ã³ã³ããŒãã³ãã®1ã€ãèµ·åãããšïŒãDalvikä»®æ³ãã·ã³ã³ã¢ïŒZygote Dalvik VMïŒã¯ãå ±æã¡ã¢ãªã«åå¥ã®ä¿è·ãããããã»ã¹ãäœæããŸãããã®ããã»ã¹ã§ã¯ãVMãã¢ããªã±ãŒã·ã§ã³ãèµ·åããããã®ç°å¢ãšããŠçŽæ¥å±éãããŸããã€ãŸããå éšããèŠããšãAndroidã¯Dalvikä»®æ³ãã·ã³ã®ã»ããã®ããã«èŠãããããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
DVMã®æ©èœïŒ
- ã¬ãžã¹ã¿ããŒã¹ã®ã¢ãŒããã¯ãã£ã䜿çšããŸããã¡ãœãããé 眮ãããããŒã¿æ§é ã¯ãããã»ããµã¬ãžã¹ã¿ã«åºã¥ããŠããŸããPOPããã³PUSHæäœããªããããç»é²ãããä»®æ³ãã·ã³ã®åœä»€ã¯ãã¹ã¿ãã¯ãããä»®æ³ãã·ã³ã®åæ§ã®åœä»€ãããé«éã«å®è¡ãããŸãã
- ãã€ãã£ã圢åŒã®ãã€ãã³ãŒããå®è¡ããŸããAndroiddexerïŒä»¥äžã§èª¬æããŸãïŒã¯ãã¯ã©ã¹ãã¡ã€ã«ã.dex圢åŒã«å€æããDalvikVMã§ã®å®è¡çšã«æé©åããŸããã¯ã©ã¹ãã¡ã€ã«ãšã¯ç°ãªããdexãã¡ã€ã«ã«ã¯äžåºŠã«è€æ°ã®ã¯ã©ã¹ãå«ãŸããŸãã
DVMã¢ãŒããã¯ãã£ã®è©³çްã«ã€ããŠã¯ããã¡ããã芧ãã ããã
Android Dexer
Androidéçºè ã¯ãAndroidã©ã³ã¿ã€ã çšã«Javaãã€ãã³ãŒãã.dexãã€ãã³ãŒãã«å€æããããã»ã¹ãAPKãäœæããããã®éèŠãªã¹ãããã§ããããšãç¥ã£ãŠããŸãã dexã³ã³ãã€ã©ã¯ãäž»ã«æ¥åžžã®ã¢ããªã±ãŒã·ã§ã³éçºã®å éšã§æ©èœããŸãããã¢ããªã±ãŒã·ã§ã³ã®ãã«ãæéã.dexãã¡ã€ã«ã®ãµã€ãºãããã³å®è¡æã®ããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ããŸãã
ãã§ã«è¿°ã¹ãããã«ãdexãã¡ã€ã«èªäœã«ã¯äžåºŠã«è€æ°ã®ã¯ã©ã¹ãå«ãŸããŠããŸããè€æ°ã®ã¯ã©ã¹ãã¡ã€ã«ã§äœ¿çšãããéè€è¡ããã®ä»ã®å®æ°ã¯ãã¹ããŒã¹ãç¯çŽããããã«ã®ã¿å«ãŸããŠããŸãã Javaãã€ãã³ãŒãããDVMã§äœ¿çšããã代æ¿åœä»€ã»ããã«å€æãããŸããå§çž®ãããŠããªãdexãã¡ã€ã«ã¯ãéåžžãåã.classãã¡ã€ã«ããååŸãããå§çž®ãããJavaã¢ãŒã«ã€ãïŒJARïŒãããæ°ããŒã»ã³ãå°ãããªããŸãã
æåã«ãã¯ã©ã¹ãã¡ã€ã«ã¯çµã¿èŸŒã¿ã®DXã³ã³ãã€ã©ã䜿çšããŠdexãã¡ã€ã«ã«å€æãããŸãããããããAndroid Studio 3.1以éãD8ãããã©ã«ãã®ã³ã³ãã€ã©ã«ãªããŸããã DXã³ã³ãã€ã©ãšæ¯èŒããŠãD8ã¯ããé«éã«ã³ã³ãã€ã«ããããå°ããªdexãã¡ã€ã«ãåºåãããšåæã«ãå®è¡æã®ã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ãåäžãããŸãããã®æ¹æ³ã§ååŸãããdexãã€ãã³ãŒãã¯ããªãŒãã³ãœãŒã¹ã®ProGuardãŠãŒãã£ãªãã£ã䜿çšããŠæå°åãããŸãããã®çµæãåãdexãã¡ã€ã«ãåŸãããŸããããµã€ãºã¯å°ãããªããŸããæ¬¡ã«ããã®dexãã¡ã€ã«ã䜿çšããŠapkãæ§ç¯ããæçµçã«Androidããã€ã¹ã«ãããã€ããŸãã
ãããã2018幎ã®D8ã®åŸãã«ã¯R8ããããŸãããå®éã«ã¯åãD8ã§ããã远å ãããŠããã ãã§ãã
Android Studio3.4ããã³AndroidGradle 3.4.0ãã©ã°ã€ã³ä»¥éã䜿çšããå Žåãã³ã³ãã€ã«æã«ã³ãŒããæé©åããããã«Proguardã¯äœ¿çšãããªããªããŸããã代ããã«ããã©ã°ã€ã³ã¯ããã©ã«ãã§R8ã§åäœããŸããããã¯ãã³ãŒãã®çž®å°ãæé©åãããã³é£èªåèªäœãå®è¡ããŸããR8ã¯ãProguardãæäŸããæ©èœã®ãµãã»ããã®ã¿ãæäŸããŸãããJavaãã€ãã³ãŒãããdexãã€ãã³ãŒããžã®å€æã1åå®è¡ã§ããããããã«ãæéãããã«ççž®ãããŸãã
R8ãšã³ãŒãåæž
éåžžãã¢ããªã¯JetpackãGsonãGoogle PlayServicesãªã©ã®ãµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšããŸãããããã®ã©ã€ãã©ãªã®1ã€ã䜿çšããå Žåãå€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯åã ã®ã©ã€ãã©ãªã®ããäžéšãã䜿çšããŸãããã³ãŒããçž®å°ããªããšããã¹ãŠã®ã©ã€ãã©ãªã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«ä¿åãããŸãã
éçºè ãåé·ãªã³ãŒãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®èªã¿ããããšä¿å®æ§ãåäžãããããšããããŸããããšãã°ãæå³ã®ãã倿°åãšãã¶ã€ã³ãã¿ãŒã³ã䜿çšããŠãä»ã®äººãã³ãŒããããç°¡åã«çè§£ã§ããããã«ããããšãã§ããŸãããã ãããã³ãã¬ãŒãã䜿çšãããšãå¿ èŠä»¥äžã®ã³ãŒããçæãããåŸåããããŸãã
ããã§R8ãå©ãã«ãªããŸããã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãå€§å¹ ã«åæžããã¢ããªã±ãŒã·ã§ã³ã§å®éã«äœ¿çšãããã³ãŒãã®ãµã€ãºãæé©åã§ããŸãã
äŸãšããŠã以äžã¯Android Dev Summit'19ã§çºè¡šãããShrinkingYour App with R8ã¬ããŒã
ã®å³ã§ããããŒã¿ãªãªãŒã¹æ®µéã§ã®R8ã®å¹çã®æ¯èŒã¯æ¬¡ã®ããã«ãªããŸããïŒãœãŒã¹ã®Android Developers BlogããååŸïŒïŒ
詳现ã«ã€ããŠã¯ããã¡ããã芧ãã ãããã§ãªãã£ã¹ææžãšå ±åã
Androidã§ã®ARTãšDVM
DVMã¯ã¢ãã€ã«ããã€ã¹çšã«ç¹å¥ã«èšèšããã
Android 4.4KitkatãŸã§ã®Androidã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®ä»®æ³ãã·ã³ãšããŠäœ¿çšãããŸããã
ãã®ããŒãžã§ã³ãããARTãã©ã³ã¿ã€ã ãšããŠå°å ¥ãããAndroid 5.0ïŒLollipopïŒã§ã¯ARTãDalvikã«å®å šã«åã£ãŠä»£ãããŸããã
ARTãšDVMã®äž»ãªæç¢ºãªéãã¯ãARTã¯AOTã³ã³ãã€ã«ã䜿çšããDVMã¯JITã³ã³ãã€ã«ã䜿çšããããšã§ããå°ãåãŸã§ãARTã¯AOTãšJITã®ãã€ããªããã䜿ãå§ããŸãããããã詳ããèŠãŠã¿ãŸãããã
DVM
- JITã³ã³ãã€ã«ã䜿çšããŸãïŒã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã³ã«ã
- ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«å¿ èŠãªã³ãŒãã®éšåãã³ã³ãã€ã«ãããŸããæ®ãã®ã³ãŒãã¯åçã«ã³ã³ãã€ã«ãããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®èµ·åãšæäœãé ããªããŸãããã€ã³ã¹ããŒã«æéãççž®ãããŸãã
- , .
- , DVM, , , ART.
- , CPU.
- Dalvik ââ 4.4.
ART
- AOT , . , .
- , .
- AOT , DVM.
- , - .
- æ¹åãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãŸãã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãDalvikã䜿çšããå Žåãã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯2ã€ã®ããŒããã¹ãå®è¡ããå¿ èŠãããããã®çµæUXãäœäžããŸãããARTã®å Žåããã®ãããªç¶æ³ã¯ãããŸãããã¡ã¢ãªãçµ±åããããã«ããŒãã1åã¯ãªãŒã³ã¢ããããŸãã
ãããŠãDalvik察ARTã®å°ããªå³ïŒ
JIT + AOT in ART
Android 7以éã®Androidã©ã³ã¿ã€ã ïŒARTïŒã«ã¯ãã³ãŒããããã¡ã€ãªã³ã°ãåããJITã³ã³ãã€ã©ãå«ãŸããŠããŸãã JITã³ã³ãã€ã©ã¯ãAOTã³ã³ãã€ã©ãè£å®ããã©ã³ã¿ã€ã ããã©ãŒãã³ã¹ãåäžããããã£ã¹ã¯ã¹ããŒã¹ãç¯çŽããã¢ããªã±ãŒã·ã§ã³ãšã·ã¹ãã ã®æŽæ°ãé«éåããŸãã
ããã¯æ¬¡ã®ããã«çºçã
ãŸããã€ã³ã¹ããŒã«ãã§ãŒãºã§åã¢ããªã±ãŒã·ã§ã³ã®AOTã³ã³ãã€ã«ãå®è¡ãã代ããã«ãJITã³ã³ãã€ã©ïŒAndroid <5.0ãšã»ãŒåãïŒã䜿çšããŠä»®æ³ãã·ã³ã®å¶åŸ¡äžã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãããã©ãã远跡ããŸããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®ã»ã¯ã·ã§ã³ãæãé »ç¹ã«å®è¡ãããŸãããã®æ å ±ã¯ããããã®ã³ãŒãã»ã¯ã·ã§ã³ãAOTã³ã³ãã€ã«ããããã«äœ¿çšãããŸããåŸè ã®æäœã¯ãå é»äžã«ã¹ããŒããã©ã³ãéã¢ã¯ãã£ãã®å Žåã«ã®ã¿å®è¡ãããŸãã
ç°¡åã«èšããšã2ã€ã®ãŸã£ããç°ãªãã¢ãããŒãã飿ºããŠæ©èœããããã«ãªããæ¬¡ã®ãããªå©ç¹ããããŸãã
- ããå¹ççãªã³ã³ãã€ã«-ã¢ããªã±ãŒã·ã§ã³ããªã¢ã«ã¿ã€ã ã§å®è¡ããå Žåãã³ã³ãã€ã©ãŒã¯éçåæãå®è¡ãããããã¯ããã«å€ãã®äœæ¥ã«ã€ããŠåŠç¿ããæ©äŒãããããã®çµæãããé©åãªæé©åæ¹æ³ãåç¶æ³ã«é©çšãããŸãã
- RAMãšæ°žç¶ã¡ã¢ãªã®ä¿å-ãã€ãã³ãŒãã¯ãã·ã³ã³ãŒããããã³ã³ãã¯ãã§ããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ã»ã¯ã·ã§ã³ã®ã¿ã®AOTã³ã³ãã€ã«ãå®è¡ãããŠãŒã¶ãŒã䜿çšããªãã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããªãå ŽåãNANDã¡ã¢ãªã¹ããŒã¹ãå€§å¹ ã«ç¯çŽã§ããŸãã
- ã·ã¹ãã æŽæ°åŸã®ã€ã³ã¹ããŒã«ãšæåã®èµ·åé床ã®åçãªåäž-AOTã³ã³ãã€ã«ãé å»¶ãªãã
ARTã§ã®JITã³ã³ãã€ã©ã®å®è£ ã«ã€ããŠè©³ããã¯ããã¡ããã芧ãã ããã
çµè«
ãã®èšäºã§ã¯ãDalvikãšARTã®äž»ãªéãã調ã¹ãAndroidãéçºããŒã«ãæéã®çµéãšãšãã«ã©ã®ããã«æ¹åããŠããããäžè¬çã«èŠãŠã¿ãŸããã
ARTã¯ãŸã éçºäžã§ããããŠãŒã¶ãŒãšéçºè ã®äž¡æ¹ã®ãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«æ°ããæ©èœã远å ãããŠããŸãã
圹ã«ç«ã£ãããã³ã¡ã³ãã§æããŠãã ããã