äºåæ å ±
ART ïŒAndroid RunTimeïŒã¯ãAndroidã¢ããªã±ãŒã·ã§ã³çšã®æ°ããã©ã³ã¿ã€ã ç°å¢ã§ãã Android 5.0ã§ã¯ãããã©ã«ãã§Lollipop ARTãæåã«äœ¿çšãããŸãã çç£æ§ã®åäžãç®çãšããå€ãã®æ©èœåŒ·åãå«ãŸããŠããŸãã ãã®èšäºã§ã¯ãARTã®ããã€ãã®æ°æ©èœã«ã€ããŠèª¬æãã以åã«äœ¿çšããAndroid Dalvikã©ã³ã¿ã€ã ãšæ¯èŒããã¢ããªã±ãŒã·ã§ã³ãé«éåãã5ã€ã®ãã³ããå ±æããŸãã
ARTã®æ°æ©èœ
Dalvikç°å¢ã§å®è¡ãããå€ãã®Androidã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°äžã«ããŠãŒã¶ãŒãç¹å¥ãªæ³šæãæã2ã€ã®éèŠãªæ©èœãçºèŠãããŸããã æåã®æ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«å¿ èŠãªæéã§ãã 2ã€ç®ã¯ãããŸããŸãªçš®é¡ã®ãã¹ããŒããŠã³ãïŒãžã£ã³ã¯ïŒã®æ°ã§ãã ææªã®å Žåãããã¯ã€ãŸããé³ãåæºããã¢ãã¡ãŒã·ã§ã³ãããã«ã¯ã¢ããªã±ãŒã·ã§ã³ã®äºæããªãåæ¢ã§ãã ããã¯éåžžãã¢ããªã±ãŒã·ã§ã³ã次ã®ãã¬ãŒã ã®æºåã«æéãããããããããã«çºçããŸãã ãã®çµæãããã€ã¹ç»é¢ã®ãªãã¬ãã·ã¥ã¬ãŒãã«è¿œãã€ããŠããŸããã 次ã®ãã¬ãŒã ãåã®ãã¬ãŒã ãããã¯ããã«éããŸãã¯é ã圢æãããå Žåããã¬ãŒã 圢æã®é床ãåé¡ã«ãªãå¯èœæ§ããããŸãã ãã®ãããªããšãçºçããå ŽåããŠãŒã¶ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®åäœã«ããã¡ãèŠãããŸãã ããã«ããããŠãŒã¶ãŒãšéçºè ã®äž¡æ¹ãæãããããããã°ã©ã ãšã®å¯Ÿè©±ãã¯ããã«äžäŸ¿ã«ãªããŸãã ARTã«ã¯ãäžèšã®åé¡ã解決ããããã«èšèšãããããã€ãã®æ°ããæ©èœããããŸãã
- å®è¡åã®ã³ã³ãã€ã«ã ARTã¯ãããã€ã¹ã«ã€ã³ã¹ããŒã«ãããdex2oatããŒã«ã䜿çšããŠãã€ã³ã¹ããŒã«äžã«ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŸãã çµæã¯ãã¿ãŒã²ããã¢ãŒããã¯ãã£çšã«ã³ã³ãã€ã«ãããå®è¡å¯èœãã¡ã€ã«ã§ãã æ¯èŒã®ããã«ãDalvikã¯ã€ã³ã¿ãŒããªã¿ãŒã䜿çšãããã®å Žã§ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŸãã ã€ã³ã¹ããŒã«äžã«ãDalvikã¯APKãã¡ã€ã«ãæé©åãããDEXã³ãŒãã«å€æããã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãã§ã«ãã·ã³åœä»€ã«ã³ã³ãã€ã«ããŸãã ãã®çµæãARTç°å¢ã§ã¯ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãé«éã«ãªããŸãããã€ã³ã¹ããŒã«ã«ãããæéãé·ããªããŸãã ããã«ããã®ã¢ãããŒãã§ã¯ãã€ã³ã¹ããŒã«äžã«ã³ã³ãã€ã«ãããã³ãŒããä¿åããããã«è¿œå ã®ã¹ãã¬ãŒãžãå¿
èŠã«ãªããããã¢ããªã±ãŒã·ã§ã³ã¯ããå€ãã®ããã€ã¹ãã©ãã·ã¥ã¡ã¢ãªã䜿çšããŸãã
- æ¹åãããã¡ã¢ãªå²ãåœãŠã¡ã«ããºã ã ã¡ã¢ãªãéäžçã«äœ¿çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãDalvikã®äœ¿çšæã«ããã©ãŒãã³ã¹ã®åé¡ãçºçããå ŽåããããŸãã 倧ããªãªããžã§ã¯ãã®ããŒã¿ãä¿åããããã®åå¥ã®ã¹ããŒã¹ãšãARTã§ã¡ã¢ãªãå²ãåœãŠãããã®æ¹åãããã¡ã«ããºã ã¯ããã®åé¡ã軜æžããã®ã«åœ¹ç«ã¡ãŸãã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®æ¹å ã ARTã«ã¯ãããŒã¿ã®äžŠååŠçããµããŒãããé«éãªã¬ããŒãžã³ã¬ã¯ã¿ãŒãæèŒãããŠãããã¡ã¢ãªã®æçåãå°ãªããªããå¹ççã«äœ¿çšã§ããŸãã
- JNIããã©ãŒãã³ã¹ã®æ¹åã JNIã³ãŒãåŒã³åºãã®æé©åãšããããã®æ»ããããã«ãããJNIåŒã³åºããè¡ãããã«å¿
èŠãªåœä»€ã®æ°ãåæžãããŸãã
- 64ãããã¢ãŒããã¯ãã£ã®ãµããŒãã ARTã¯ã64ãããã¢ãŒããã¯ãã£ã«æé©ã§ãã ããã«ãããå€ãã®ã¢ããªã±ãŒã·ã§ã³ãé©åãªããŒããŠã§ã¢ã§å®è¡ããéã®ããã©ãŒãã³ã¹ãåäžããŸãã
ãããã®æ©èœåŒ·åã®è€åå¹æã«ãããAndroid SDKã®ã¿ã䜿çšããŠèšè¿°ãããã¢ããªã±ãŒã·ã§ã³ãšJNIåŒã³åºããéäžçã«äœ¿çšããããã°ã©ã ã®äž¡æ¹ã«å¯ŸãããŠãŒã¶ãŒã®èªèãåäžããŸãã ãŠãŒã¶ãŒã®èŠ³ç¹ããã®è¿œå ã®å©ç¹ã«ã¯ã1åã®å é»ã§ããé·ãããããªãŒå¯¿åœãå«ãŸããŸãã ããã§ã®ãã€ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã¯äžåºŠããã³ã³ãã€ã«ããããçµæãšããŠããé«éã«å®è¡ããããšããããšã§ã-æ¥åžžã®äœ¿çšã§æ¶è²»ãããããããªãŒé»åã¯å°ãªããªããŸãã
ARTãšDalvikã®ããã©ãŒãã³ã¹ã®æ¯èŒ
Android KitKat 4.4ã®æ«å®çãšããŠARTããªãªãŒã¹ãããã°ããã®ãšããDalvikãšæ¯èŒããŠããã©ãŒãã³ã¹ã«æ¹å€ããããŸããã ãã®ãããªæ¯èŒã¯æ£çŽãšã¯èšããŸããã çµå±ã®ãšããã圌ãã¯ARTã®åæã®äºåããŒãžã§ã³ãæçãã補åãšæ¯èŒããé·å¹Žã®äœæ¥ãéããŠå€ãã®æ¹åãæœããŸããã ãããã®åæãã¹ãã®çµæãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã¯ãDalvikãããARTç°å¢ã§é ããªããŸããã
çŸåšãéç£ããã€ã¹ã§äœ¿çšãããŠããæçããARTç°å¢ãDalvikãšæ¯èŒããæ©äŒããããŸãã Android 5.0ã§ã¯ARTã®ã¿ã䜿çšãããŠãããããARTãšDalvikã®çŽæ¥æ¯èŒã¯ãæåã«Android KitKat 4.4ãã€ã³ã¹ããŒã«ãããç¹å®ã®ããã€ã¹ã§ãã¹ããå®è¡ããDalvikç°å¢ã®ããŒã¿ãåä¿¡ããAndroid Lollipop 5.0ã«æŽæ°ããŠå®è¡ããå Žåã«ã®ã¿å¯èœã§ãARTç°å¢åãã®åãäžé£ã®ãã¹ãã
ãã®è³æãæºåããéã«ãIntel Atomããã»ããµãããŒã¹ã«ããSurfTab xintron i7.0ã¿ãã¬ããã§åæ§ã®ãã¹ããè¡ããŸããã æåã«ãAndroid 4.4.4ãã€ã³ã¹ããŒã«ãããããã«å¿ããŠããã¹ãäžã«Dalvikã䜿çšããã次ã«ããã€ã¹ãAndroid 5.0ã«æŽæ°ãããŸããã ARTã®ããã©ãŒãã³ã¹ããã¹ãããŸããã
ãã¹ãã¯Androidã®ããŸããŸãªããŒãžã§ã³ã§å®è¡ããããããæ€åºãããæ¹åã®äžéšã¯ARTã§ã¯ãªããä»ã®Androidã®æ¹åã«ãããã®ã§ããå¯èœæ§ããããŸãã ãã ããå éšããã©ãŒãã³ã¹åæã«åºã¥ããŠãã·ã¹ãã ããã©ãŒãã³ã¹ãåäžããäž»ãªçç±ã¯ARTã®äœ¿çšã§ãããšèšããŸãã
äœåºŠãå®è¡ãããã³ãŒãã®ç©æ¥µçãªæé©åã«ããDalvikãå©ç¹ãåŸãããšãã§ããããã©ãŒãã³ã¹ãã¹ãã䜿çšããŸããã ããã«ãã€ã³ãã«ãéçºããã²ãŒã ã¢ããªã±ãŒã·ã§ã³ã·ãã¥ã¬ãŒã¿ãŒã䜿çšããŠã·ã¹ãã ããã¹ãããŸããã
åŸãããããŒã¿ã«åºã¥ããŠãARTã¯ãã¹ãŠã®ãã¹ãã§DalvikãããåªããŠãããšçµè«ä»ããããšãã§ããŸãã å Žåã«ãã£ãŠã¯ããã®åªäœæ§ã¯éåžžã«éèŠã§ãã
ARTïŒAndroid LollipopïŒããã³DalvikïŒAndroid KitKatïŒã®çžå¯Ÿçãªãã¹ãããã©ãŒãã³ã¹
䜿çšãããã¹ãã¢ããªã±ãŒã·ã§ã³ã®è©³çŽ°ã«ã€ããŠã¯ã次ã®ãªã³ã¯ãã¯ãªãã¯ããŠãã ããã
- 象é2.1.1
- ã«ãã§ã€ã³ããŒã¯2.0
- Smartbench 2012ã®çç£æ§
- Antutu 4.4å
šäœ ïŒãã¹ãäžã«äœ¿çšãããããŒãžã§ã³ã¯ããŠã³ããŒãã§ããªããªããŸããïŒ
- CFãã³ã1.3å šäœ
IcyRocksããŒãžã§ã³1.0ã¯ãIntelãäœæããããã€ã¹ããã©ãŒãã³ã¹ãã¹ãã¢ããªã±ãŒã·ã§ã³ã§ãã å®éã®ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ãæš¡å£ããŸãã ã»ãšãã©ã®èšç®ã§ã¯ããªãŒãã³ãœãŒã¹ã®Cocos2Dã©ã€ãã©ãªãšJBox2Dã©ã€ãã©ãªïŒç©çãšã³ãžã³ãJavaç©çãšã³ãžã³ïŒã䜿çšããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãããŸããŸãªè² è·ã¬ãã«ã§1ç§éã«åºåããããã«ç®¡çãããã¬ãŒã ã®å¹³åæ°ïŒFPSã1ç§ãããã®ãã¬ãŒã æ°ïŒã枬å®ããŸãã 次ã«ãããŸããŸãªåäœã¢ãŒãã§ååŸããFPSã€ã³ãžã±ãŒã¿ãŒã®å¹Ÿäœå¹³åã䜿çšããŠãæçµçãªã€ã³ãžã±ãŒã¿ãŒãèšç®ããŸãã ããã«ãããã°ã©ã ã¯ãç°ãªãè² è·ã¬ãã«ã§ã®ãã®ãããªãã¬ãŒã éã®å¹³åãšããŠããäžæ£ãªããã¬ãŒã /ç§ïŒãžã£ã³ã¯/ç§ïŒã®ã¬ãã«ãèšç®ããŸãã IcyRocksã¯ãDalvikã«å¯ŸããARTã®åªäœæ§ã瀺ããŠããŸãã
ARTããã³Dalvikç°å¢ã§ããã©ãŒãã³ã¹ããã¹ãããéã®1ç§ãããã®çžå¯Ÿãã¬ãŒã
ãã¹ãã®çµæãARTã§ã¯ãã¬ãŒã ã®ç¹æ§ãDalvikãããäžå®ã§ããããäžæ£ãªããã¬ãŒã ãå°ãªãããšãããããŸããã ãã®çµæãARTã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãããã¹ã ãŒãºã«æ©èœããŸãã
ARTããã³Dalvikç°å¢ã§ã®ãã¹ãæã®ãäžæ£ãªããã¬ãŒã /ç§ã®çžå¯Ÿçãªæ°å€
åŸãããçµæãããä»æ¥ã®ARTã§ã¯ãDalvikãããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšçç£æ§ãå®çŸã§ãããšèªä¿¡ãæã£ãŠèšããŸãã
DalvikããARTãžã®ã³ãŒãã®ç§»æ€
DalvikããARTãžã®ç§»è¡ã¯ééçã§ããDalvikç°å¢ã§åäœããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã³ãŒããå€æŽããããšãªãARTç°å¢ã§ãåäœããŸãã ãã®çµæããŠãŒã¶ãŒãã·ã¹ãã ãæŽæ°ãããšãäœåãªåŽåããããã«ã¢ããªã±ãŒã·ã§ã³ã®åäœãéããªããŸãã ãã ããç¹ã«ã¢ããªã±ãŒã·ã§ã³ãJava Native Interfaceã䜿çšããŠããå ŽåãARTç°å¢ã§ãã¹ãããã®ã«åé¡ã¯ãããŸããã å®éãARTã¯ãJNIãšã©ãŒãåŠçããããã«Dalvikãããå³å¯ãªã¡ã«ããºã ã䜿çšããŠããŸãã 詳现ã«ã€ããŠã¯ããã¡ããã芧ãã ããã
ã³ãŒããæé©åããããã®5ã€ã®ãã³ã
ARTç°å¢ã§å®è¡ãããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ãäžèšã§èª¬æãããã©ãããã©ãŒã ã®æ¹åã«ãã£ãŠã®ã¿åäžããŸãã ãã ããããã©ãŒãã³ã¹ãããã«åäžãããããã«ã¢ããªã±ãŒã·ã§ã³ãæé©åããããã«åŸãããšãã§ããäžé£ã®æšå¥šäºé ããããŸãã 以äžã«èª¬æããåã³ãŒãæé©åææ³ã«ã¯ããã®åäœã®ç¹åŸŽã瀺ãç°¡åãªã³ãŒãäŸãè£ åãããŠããŸãã
ããããã®æé©åã¢ãããŒãã䜿çšããŠãã©ã®ããã©ãŒãã³ã¹ã²ã€ã³ãæåŸ ã§ããããæ£ç¢ºã«äºåã«äºæž¬ããããšã¯äžå¯èœã§ãã ããã§ã®ãã€ã³ãã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãç°ãªãããããã®æçµçãªããã©ãŒãã³ã¹ã¯ãæ®ãã®ã³ãŒããšãã®äœ¿çšæ©èœã«å€§ããäŸåãããšããããšã§ãã ãã ããææ¡ãããæé©åæ¹æ³ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæ¹åã§ããçç±ã説æããŸãã ã¢ããªã±ãŒã·ã§ã³ãžã®åœ±é¿ãè©äŸ¡ããã«ã¯ãã³ãŒãã«é©çšããŠãã¹ãããŸãã
ç§ãã¡ãæäŸããæšå¥šäºé ã¯åºãé©çšã§ããŸãããARTã§äœæ¥ããå Žåãdex2oatã³ã³ãã€ã©ãŒã«ãã£ãŠæ¹åãèªèãããdexãã¡ã€ã«ãããã€ããªãŒå®è¡å¯èœã³ãŒããçæããŠæé©åããããšã«çŠç¹ãåœãŠãŠããŸãã
ãã³ãçªå·1ã å¯èœãªéããã¯ã©ã¹ã®ãããªãã¯ãã£ãŒã«ãã®ä»£ããã«ããŒã«ã«å€æ°ã䜿çšããŸãã
å€æ°ã®ã¹ã³ãŒããå¶éããããšã«ãããã³ãŒãã®å¯èªæ§ãåäžããæœåšçãªãšã©ãŒã®æ°ãæžãã ãã§ãªããæé©åã«ããé©ãããã®ã«ãªããŸãã
以äžã«ç€ºãéæé©åã³ãŒãã®ãããã¯ã§ã¯ãå€æ°vã®å€ãå®è¡æã«èšç®ãããŸãã ããã¯ããã®å€æ°ãmïŒïŒã¡ãœããã®å€éšããã¢ã¯ã»ã¹å¯èœã§ãããã³ãŒãã®ä»»æã®éšåã§å€æŽã§ãããšããäºå®ã«ãããã®ã§ãã ãããã£ãŠãå€æ°ã®å€ã¯ã³ã³ãã€ã«æ®µéã§ã¯äžæã§ãã ã³ã³ãã€ã©ã¯ã some_global_callïŒïŒã¡ãœãããåŒã³åºããšããã®å€æ°ã®å€ãå€æŽããããã©ãããç¥ããŸãããå€æ°vãç¹°ãè¿ããšãã¡ãœããå€ã®ã³ãŒããå€æŽã§ããããã§ãã
ãã®äŸã®æé©åããŒãžã§ã³ã§ã¯ã vã¯ããŒã«ã«å€æ°ã§ãã ãã®ããããã®å€ã¯ã³ã³ãã€ã«æ®µéã§èšç®ã§ããŸãã ãã®çµæãã³ã³ãã€ã©ãŒã¯çæããã³ãŒãã«å€æ°ã®å€ãå ¥ããããšãã§ããŸããããã¯ãå®è¡æã«å€æ°ã®å€ãèšç®ããããšãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã
æé©åãããŠããªãã³ãŒã | æé©åãããã³ãŒã |
| |
ãã³ãçªå·2ã finalããŒã¯ãŒãã䜿çšããŠããã£ãŒã«ãå€ãå®æ°ã§ããããšãã³ã³ãã€ã©ã«äŒããŸã
finalããŒã¯ãŒãã¯ãå®æ°ã§ãªããã°ãªããªãå€æ°ã誀ã£ãŠå€æŽããããšããã³ãŒããä¿è·ããããã«äœ¿çšã§ããŸãã ãã ããã³ã³ãã€ã©ã®åã«å®æ°ãããããšãäŒãããããããã©ãŒãã³ã¹ã¯åäžããŸãã
æé©åãããŠããªãã³ãŒãã®ãã©ã°ã¡ã³ãã§ã¯ã vã®å€ãå€æŽãããå¯èœæ§ããããããå®è¡æã«å€v * v * vãèšç®ããå¿ èŠããããŸãã æé©åãããããŒãžã§ã³ã§ã¯ãå€æ°ã宣èšããŠããã«å€ãå²ãåœãŠããšãã«finalããŒã¯ãŒãã䜿çšãããšãå€æ°ã®å€ãå€æŽãããªãããšãã³ã³ãã€ã©ãŒã«éç¥ãããŸãã ãããã£ãŠãå€ã®èšç®ã¯ã³ã³ãã€ã«æ®µéã§å®è¡ã§ããããã°ã©ã å®è¡äžã«å€ãèšç®ããã³ãã³ãã§ã¯ãªããå€ãåºåã³ãŒãã«è¿œå ãããŸãã
æé©åãããŠããªãã³ãŒã | æé©åãããã³ãŒã |
| |
ãã³ãçªå·3ã ã¯ã©ã¹ãšã¡ãœããã宣èšãããšãã«finalããŒã¯ãŒãã䜿çšããŸã
Javaã®ã¡ãœããã¯ããããå€æ çã§ããå¯èœæ§ãããããã finalããŒã¯ãŒãã䜿çšããŠã¡ãœãããŸãã¯ã¯ã©ã¹ã宣èšãããšãã¡ãœããã¯ãµãã¯ã©ã¹ã§ãªãŒããŒã©ã€ããããªãããšãã³ã³ãã€ã©ãŒã«éç¥ãããŸãã
ã³ãŒãã®æé©åãããŠããªãããŒãžã§ã³ã§ã¯ãé¢æ°mïŒïŒãåŒã³åºãåã«ãããã解決ããå¿ èŠããããŸãã
æé©åãããã³ãŒãã§ã¯ã mïŒïŒã¡ãœããã宣èšãããšãã«finalããŒã¯ãŒãã䜿çšãããããã³ã³ãã€ã©ãŒã¯ã¡ãœããã®ã©ã®ããŒãžã§ã³ãåŒã³åºãããããèªèããŠããŸãã ãããã£ãŠãã¡ãœããã®æ€çŽ¢ãåé¿ããããã°ã©ã ã®å¿ èŠãªå Žæã«åã蟌ãããšã«ããã mïŒïŒã¡ãœããã®åŒã³åºãããã®ã³ã³ãã³ãã«çœ®ãæããããšãã§ããŸãã ãã®çµæãçç£æ§ãåäžããŸãã
æé©åãããŠããªãã³ãŒã | æé©åãããã³ãŒã |
| |
ãã³ãçªå·4ã JNIãä»ããå°ããªã¡ãœããã®åŒã³åºããé¿ãã
JNIåŒã³åºãã䜿çšããã®ã«ã¯ååãªçç±ããããŸãã ããšãã°ãJavaã¢ããªã±ãŒã·ã§ã³ã§åå©çšãããC / C ++ã³ãŒããŸãã¯ã©ã€ãã©ãªãããå Žåã ãããããã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãäœæããããäœã¬ãã«ã®ã¡ã«ããºã ã䜿çšããŠçç£æ§ãåäžãããããšãç®æšã§ãã ãã ããJNIåŒã³åºãã¯ããããã·ã¹ãã ã«å€§ããªè² è·ãããããããJNIåŒã³åºãã®æ°ãæå°éã«æããããšãéèŠã§ãã JNIã䜿ââçšããŠããã©ãŒãã³ã¹ãæé©åãããšããã®è¿œå ã®è² æ ã«ãããæåŸ ãããå©ç¹ã倱ãããå¯èœæ§ããããŸãã ç¹ã«ãèšç®äžéèŠã§ã¯ãªãçãJNIã¡ãœãããé »ç¹ã«åŒã³åºããšãããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã ãããŠããã®ãããªåŒã³åºãããµã€ã¯ã«ã«å ¥ãããããšãã·ã¹ãã ã®äžå¿ èŠãªè² è·ãå¢å ããã ãã§ãã
ã³ãŒãäŸ
class A { public final int factorial(int x){ int f = 1; for (int i =2; i <= x; i++) f *= i; return f; } public int compute (){ int sum = 0; for (int i = 0; i < 1000; i++) sum += factorial(i % 5); // JNI- factorial(), // , // // JNI- return sum; } }
ãã³ãçªå·5ã ãã€ãã£ãã³ãŒãã§åãæ©èœãå®è£ ãã代ããã«æšæºã©ã€ãã©ãªã䜿çšãã
æšæºJavaã©ã€ãã©ãªã¯çå£ã«æé©åãããŠããŸãã Javaã®å éšã¡ã«ããºã ãå¯èœãªéã䜿çšãããšãå¯èœãªéãæé«ã®ããã©ãŒãã³ã¹ãå®çŸã§ããŸãã æšæºãœãªã¥ãŒã·ã§ã³ã¯ãèªäœã®å®è£ ãããã¯ããã«é«éã«åäœã§ããŸãã å®éã«ã¯ãæšæºã©ã€ãã©ãªé¢æ°ã®åŒã³åºããæåŠããããšã«ãããè¿œå ã®ã·ã¹ãã è² è·ãåé¿ããããšãããšãããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
ã³ãŒãã®æé©åãããŠããªãããŒãžã§ã³ã¯ãæ°å€ã®çµ¶å¯Ÿå€ãååŸããã¢ã«ãŽãªãºã ã®ç¬èªã®å®è£ ã«ãããæšæºé¢æ°Math.absïŒïŒã®åŒã³åºããåé¿ããããšããè©Šã¿ã瀺ããŠããŸãã ãã ããã³ã³ãã€ã«æã«ARTã®æé©åãããå éšå®è£ ã«ãã£ãŠåŒã³åºãã眮ãæãããããããã©ã€ãã©ãªé¢æ°ãåŒã³åºãããã³ãŒãã¯ããé«éã«åäœããŸãã
æé©åãããŠããªãã³ãŒã | æé©åãããã³ãŒã |
| |
æé©åææ³ã®ãã¹ã
ARTç°å¢ã§å®è¡ããéã®ãã³ãïŒ2ã®æé©åãããã³ãŒããšæé©åãããŠããªãã³ãŒãã®ããã©ãŒãã³ã¹ã®éãã調ã¹ãŠã¿ãŸãããã ãã®å®éšã§ã¯ãIntel Atom Z3530 CPUãããŒã¹ã«æ§ç¯ãããAsus Fonepad 8ã¿ãã¬ããã䜿çšããŸãã ããã€ã¹ãAndroid 5.0ã«æŽæ°ãããŸããã
ãã¹ãããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
public final class Ops { int v = 42; final int w = 42; public int testUnoptimized(){ return v*v*v; } public int testOptimized(){ return w*w*w; } }
testUnoptimizedã¡ãœãããštestOptimizedã¡ãœããã®éãã¯ã2çªç®ã®ã¡ãœãããæé©åããããã®äžã§äœ¿çšãããå€æ°wãfinalããŒã¯ãŒãã§å®£èšãããããšã ãã§ãã
ãã¹ãäžãåã¡ãœããã¯æå®ãããåæ°åŒã³åºãããŸãã ãããã®åŒã³åºããè¡ããããµã€ã¯ã«ã¯ãããã¯ã°ã©ãŠã³ãã¹ã¬ããã§å®è¡ãããŸãã ãã¹ããå®äºãããšãçµæãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«è¡šç€ºãããŸãã
æé©åçµæããã¹ãããããã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹
ãã®è¡šã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãªãªãŒã¹ããŒãžã§ã³ã§10åé£ç¶ããŠãã¹ããå®è¡ããçµæã瀺ããŠããŸãã åã ã®ã€ã³ãžã±ãŒã¿ã¯ããããã察å¿ããã¡ãœããã®ãµã€ã¯ãªãã¯ã³ãŒã«ã®çµæãšããŠ1,000äžåååŸãããŸããã
æé©åãããã³ãŒããšæé©åãããŠããªãã³ãŒãã®å®è¡é床ã®æ¯èŒ
ãã | æé©åãããªç§ã | æé©åãããŠããªããmsã |
1 | 25 | 193 |
2 | 21 | 203 |
3 | 30 | 220 |
4 | 25 | 175 |
5 | 23 | 184 |
6 | 28 | 177 |
7 | 30 | 186 |
8 | 27 | 191 |
9 | 34 | 212 |
10 | 27 | 174 |
å¹³å | 27 | 191.5 |
Android Studioãžã®ã€ã³ããŒãã«é©ãããããžã§ã¯ããœãŒã¹ã³ãŒãã¯ã ãã¡ãã«ãããŸã ã
ARTã®Intelæé©å
Intelã¯OEMãšååããŠãIntelããã»ããµåãã«æé©åãããããŒãžã§ã³ã®DalvikãæäŸããŸããã ARTã§ãåãããšãèµ·ãããŸãããã®çµæãæ°ããã©ã³ã¿ã€ã ç°å¢ã®ããã©ãŒãã³ã¹ã¯æéãšãšãã«åäžããŸãã ã³ãŒãã®æé©åãããããŒãžã§ã³ã¯ãAndroidãªãŒãã³ãœãŒã¹ãããžã§ã¯ãïŒAOSPïŒã§å ¥æããããããã€ã¹ã¡ãŒã«ãŒããçŽæ¥å ¥æã§ããŸãã åãšåæ§ã«ãæé©åã¯ãŠãŒã¶ãŒãšéçºè ã®äž¡æ¹ã«ãšã£ãŠééçã§ããã€ãŸãããããã®å©ç¹ã掻çšããããã«ãã©ã¡ããè¿œå ã®åªåãããå¿ èŠã¯ãããŸããã
Intelããã»ããµãŒã«åºã¥ããããã€ã¹åãã®Androidã¢ããªã±ãŒã·ã§ã³ã®æé©åã®è©³çŽ°ã«ã€ããŠã¯ãã³ã³ãã€ã©ãŒã«ã€ããŠç¥ãã Intel Developer Zoneã«ã¢ã¯ã»ã¹ããŠãã ããã
ãŸãšã
ãã®èšäºã§ã¯ãæ°ããART Androidã©ã³ã¿ã€ã ã®äž»ãªæ©èœã調ã¹ãŸããã ceteris paribusã䜿çšãããšãDalvikãããåªããããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒãå®çŸã§ããŸãã ããããç¹å®ã®åã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ãã©ã³ã¿ã€ã ã ãã§ãªãéçºè ã«ã倧ããäŸåããŸãã ã³ãŒãæé©åã®ãã³ãããé«éã§äŸ¿å©ãªã¢ããªã±ãŒã·ã§ã³ã®äœæã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã