Java åºç¨ç¨åºçæ§è½ç»å¸¸æ为å¼å社åºä¸ç讨论çç¹ãå 为该è¯è¨ç设计åè¡·æ¯ä½¿ç¨è§£éçæ¹å¼æ¯æåºç¨ç¨åºçå¯ç§»æ¤æ§ç®æ ï¼æ©æ
Java è¿è¡æ¶ææä¾çæ§è½çº§å«è¿ä½äº C å
C++
ä¹ç±»çç¼è¯è¯è¨ã尽管è¿äºè¯è¨å¯ä»¥æä¾æ´é«çæ§è½ï¼ä½æ¯çæç代ç åªè½å¨æéçå ç§ç³»ç»ä¸æ§è¡ãå¨è¿å»çåå¹´ä¸ï¼Java
è¿è¡æ¶ä¾åºåå¼åäºä¸äºå¤æçå¨æç¼è¯å¨ï¼é常称ä½å³æ¶ï¼Just-in-timeï¼JITï¼ç¼è¯å¨ãç¨åºè¿è¡æ¶ï¼JIT
ç¼è¯å¨éæ©å°æé¢ç¹æ§è¡çæ¹æ³ç¼è¯ææ¬å°ä»£ç ãè¿è¡æ¶æè¿è¡æ¬å°ä»£ç ç¼è¯èä¸æ¯å¨ç¨åºè¿è¡åè¿è¡ç¼è¯ï¼ç¨ C æ
C++ ç¼åçç¨åºæ£å¥½å±äºåä¸æ
å½¢ï¼ï¼ä¿è¯äºå¯ç§»æ¤æ§çéæ±ãæäº JIT ç¼è¯å¨çè³ä¸ä½¿ç¨è§£éç¨åºå°±è½ç¼è¯ææç代ç ï¼ä½æ¯è¿äºç¼è¯å¨ä»ç¶éè¿å¨ç¨åºæ§è¡æ¶è¿è¡ä¸äºæä½æ¥ä¿æ Java åºç¨ç¨åºçå¯ç§»æ¤æ§ã
ç±äºå¨æç¼è¯ææ¯çå¤é¡¹æ¹è¿ï¼å¨å¾å¤åºç¨ç¨åºä¸ï¼ç°ä»£ç JIT ç¼è¯å¨å¯ä»¥äº§çä¸ C æ C++
éæç¼è¯ç¸å½çåºç¨ç¨åºæ§è½ãä½æ¯ï¼ä»ç¶æå¾å¤è½¯ä»¶å¼å人å认为 ââ åºäºç»éªæè
ä¼ é» ââ
å¨æç¼è¯å¯è½ä¸¥éå¹²æ°ç¨åºæä½ï¼å 为ç¼è¯å¨å¿
é¡»ä¸åºç¨ç¨åºå
±äº« CPUãä¸äºå¼å人å强çå¼å对 Java
代ç è¿è¡éæç¼è¯ï¼å¹¶ä¸åä¿¡é£æ ·å¯ä»¥è§£å³æ§è½é®é¢ã对äºæäºåºç¨ç¨åºåæ§è¡ç¯å¢èè¨ï¼è¿ç§è§ç¹æ¯æ£ç¡®çï¼éæç¼è¯å¯ä»¥æ大å°æé« Java
æ§è½ï¼æè
说å®æ¯æä¸çå®ç¨éæ©ãä½æ¯ï¼éæå°ç¼è¯ Java åºç¨ç¨åºå¨è·å¾é«æ§è½çåæ¶ä¹å¸¦æ¥äºå¾å¤å¤ææ§ãä¸è¬ç
Java å¼å人åå¯è½å¹¶æ²¡æå
åå°æåå° JIT å¨æç¼è¯å¨çä¼ç¹ã
æ¬æèå¯äº Java è¯è¨éæç¼è¯åå¨æç¼è¯ææ¶åçä¸äºé®é¢ï¼éç¹ä»ç»äºå®æ¶ (RT) ç³»ç»ãç®è¦æè¿°äº Java
è¯è¨è§£éç¨åºçæä½åç并说æäºç°ä»£ JIT ç¼è¯å¨æ§è¡æ¬å°ä»£ç ç¼è¯çä¼ç¼ºç¹ãä»ç»äº IBM å¨ WebSphere Real Time ä¸åå¸ç
AOT ç¼è¯ææ¯åå®çä¸äºä¼ç¼ºç¹ãç¶åæ¯è¾äºè¿ä¸¤ç§ç¼è¯çç¥å¹¶æåºäºå ç§æ¯è¾éåä½¿ç¨ AOT
ç¼è¯çåºç¨ç¨åºé¢ååæ§è¡ç¯å¢ãè¦ç¹å¨äºè¿ä¸¤ç§ç¼è¯ææ¯å¹¶ä¸äºæ¥ï¼å³ä½¿å¨ä½¿ç¨è¿ä¸¤ç§ææ¯æ为ææçåç§åºç¨ç¨åºä¸ï¼å®ä»¬ä¹åå«åå¨ä¸äºå½±ååºç¨ç¨åºçä¼ç¼º
ç¹ã
æ§è¡ Java ç¨åº
Java ç¨åºæåæ¯éè¿ Java SDK ç javacç¨åºç¼è¯ææ¬å°çä¸å¹³å°æ å
³çæ ¼å¼ï¼ç±»æ件ï¼ãå¯å°æ¤æ ¼å¼çä½ Java
å¹³å°ï¼å 为å®å®ä¹äºæ§è¡ Java ç¨åºæéçææä¿¡æ¯ãJava ç¨åºæ§è¡å¼æï¼ä¹ç§°ä½ Java è¿è¡æ¶ç¯å¢ï¼JREï¼ï¼å
å«äºä¸ºç¹å®çæ¬å°å¹³å°å®ç°
Java å¹³å°çèææºãä¾å¦ï¼åºäº Linux ç Intel x86 å¹³å°ãSun Solaris å¹³å°å AIX æä½ç³»ç»ä¸è¿è¡ç IBM
System p å¹³å°ï¼æ¯ä¸ªå¹³å°é½æ¥æä¸ä¸ª JREãè¿äº JRE å®ç°å®ç°äºææçæ¬å°æ¯æï¼ä»èå¯ä»¥æ£ç¡®æ§è¡ä¸º
Java å¹³å°ç¼åçç¨åºã
äºå®ä¸ï¼æä½æ°å æ ç大å°æå®é
éå¶ï¼ä½æ¯ç¼ç¨äººåæå°ç¼åè¶
åºè¯¥éå¶çæ¹æ³ãJVM æä¾äºå®å
¨æ§æ£æ¥ï¼å¯¹é£äºå建åºæ¤ç±»æ¹æ³çç¼ç¨äººåè¿è¡éç¥ã
Java å¹³å°ç¨åºè¡¨ç¤ºçä¸ä¸ªéè¦é¨åæ¯åèç åºåï¼å®æè¿°äº Java
ç±»ä¸æ¯ä¸ªæ¹æ³ææ§è¡çæä½ãåèç 使ç¨ä¸ä¸ªç论ä¸æ é大çæä½æ°å æ æ¥æ述计ç®ãè¿ä¸ªåºäºå æ çç¨åºè¡¨ç¤ºæä¾äºå¹³å°æ å
³æ§ï¼å 为å®ä¸ä¾èµä»»ä½ç¹å®æ¬å°å¹³å°
ç CPU ä¸å¯ç¨å¯åå¨çæ°ç®ãå¯å¨æä½æ°å æ ä¸æ§è¡çæä½çå®ä¹é½ç¬ç«äºæææ¬å°å¤çå¨çæ令éãJava
èææºï¼JVMï¼è§èå®ä¹äºè¿äºåèç çæ§è¡ï¼åè§ åèèµæï¼ãæ§è¡ Java ç¨åºæ¶ï¼ç¨äºä»»ä½ç¹å®æ¬å°å¹³å°çä»»ä½ JRE é½å¿
é¡»éµå® JVM
è§èä¸ååºçè§åã
å 为åºäºå æ çæ¬å°å¹³å°å¾å°ï¼Intel X87 æµ®ç¹æ°åå¤çå¨æ¯ä¸ä¸ªææ¾çä¾å¤ï¼ï¼æ以大å¤æ°æ¬å°å¹³å°ä¸è½ç´æ¥æ§è¡ Java åèç ã为äºè§£å³è¿ä¸ªé®é¢ï¼æ©æç JRE éè¿è§£éåèç æ¥æ§è¡ Java ç¨åºãå³ JVM å¨ä¸ä¸ªå¾ªç¯ä¸éå¤æä½ï¼
âè·åå¾
æ§è¡çä¸ä¸ä¸ªåèç ï¼
â解ç ï¼
âä»æä½æ°å æ è·åæéçæä½æ°ï¼
âæç
§ JVM è§èæ§è¡æä½ï¼
âå°ç»æååå æ ã
è¿ç§æ¹æ³çä¼ç¹æ¯å
¶ç®åæ§ï¼JRE å¼å人ååªéç¼å代ç æ¥å¤çæ¯ç§åèç å³å¯ã并ä¸å 为ç¨äºæè¿°æä½çåèç å°äº 255 个ï¼æ以å®ç°çææ¬æ¯è¾ä½ãå½ç¶ï¼ç¼ºç¹æ¯æ§è½ï¼è¿æ¯ä¸ä¸ªæ©æé æå¾å¤äººå¯¹ Java å¹³å°ä¸æ»¡çé®é¢ï¼å°½ç®¡æ¥æå¾å¤å
¶ä»ä¼ç¹ã
解å³ä¸ C æ C++ ä¹ç±»çè¯è¨ä¹é´çæ§è½å·®è·æå³çï¼ä½¿ç¨ä¸ä¼çºç²å¯ç§»æ¤æ§çæ¹å¼å¼åç¨äº Java å¹³å°çæ¬å°ä»£ç ç¼è¯ã
ç¼è¯ Java 代ç
å°½ç®¡ä¼ é»ä¸ Java ç¼ç¨ç âä¸æ¬¡ç¼åï¼éå¤è¿è¡â
çå£å·å¯è½å¹¶éå¨æææ
åµä¸é½ä¸¥æ ¼æç«ï¼ä½æ¯å¯¹äºå¤§éçåºç¨ç¨åºæ¥è¯´æ
åµç¡®å®å¦æ¤ãå¦ä¸æ¹é¢ï¼æ¬å°ç¼è¯æ¬è´¨ä¸æ¯ç¹å®äºå¹³å°çãé£ä¹ Java
å¹³å°å¦ä½å¨ä¸çºç²å¹³å°æ å
³æ§çæ
åµä¸å®ç°æ¬å°ç¼è¯çæ§è½ï¼çæ¡å°±æ¯ä½¿ç¨ JIT ç¼è¯å¨è¿è¡å¨æç¼è¯ï¼è¿ç§æ¹æ³å·²ç»ä½¿ç¨äºåå¹´ï¼åè§å¾ 1ï¼ï¼
å¾ 1. JIT ç¼è¯å¨
ä½¿ç¨ JIT ç¼è¯å¨æ¶ï¼Java
ç¨åºææ¯æ¬¡ç¼è¯ä¸ä¸ªæ¹æ³çå½¢å¼è¿è¡ç¼è¯ï¼å 为å®ä»¬å¨æ¬å°å¤çå¨æ令ä¸æ§è¡ä»¥è·å¾æ´é«çæ§è½ãæ¤è¿ç¨å°çææ¹æ³çä¸ä¸ªå
é¨è¡¨ç¤ºï¼è¯¥è¡¨ç¤ºä¸åèç ä¸åä½æ¯å
¶çº§
å«è¦é«äºç®æ å¤çå¨çæ¬å°æ令ãï¼IBM JIT
ç¼è¯å¨ä½¿ç¨ä¸ä¸ªè¡¨è¾¾å¼æ åºå表示æ¹æ³çæä½ãï¼ç¼è¯å¨æ§è¡ä¸ç³»åä¼å以æé«è´¨éåæçï¼æåæ§è¡ä¸ä¸ªä»£ç çææ¥éª¤å°ä¼ååçå
é¨è¡¨ç¤ºè½¬æ¢æç®æ å¤çå¨çæ¬
å°æ令ãçæç代ç ä¾èµè¿è¡æ¶ç¯å¢æ¥æ§è¡ä¸äºæ´»å¨ï¼æ¯å¦ç¡®ä¿ç±»å转æ¢çåæ³æ§æè
对ä¸è½å¨ä»£ç ä¸ç´æ¥æ§è¡çæäºç±»åç对象è¿è¡åé
ãJIT
ç¼è¯å¨æä½çç¼è¯çº¿ç¨ä¸åºç¨ç¨åºçº¿ç¨æ¯åå¼çï¼å æ¤åºç¨ç¨åºä¸éè¦çå¾
ç¼è¯çæ§è¡ã
å¾ 1 ä¸è¿æè¿°äºç¨äºè§å¯æ§è¡ç¨åºè¡ä¸ºçåææ¡æ¶ï¼éè¿å¨ææ§å°å¯¹çº¿ç¨åæ ·æ¾åºé¢ç¹æ§è¡çæ¹æ³ã该æ¡æ¶è¿ä¸ºä¸é¨è¿è¡åæçæ¹æ³æä¾äºå·¥å
·ï¼ç¨æ¥åå¨ç¨åºçæ¤æ¬¡æ§è¡ä¸å¯è½ä¸ä¼æ¹åçå¨æå¼ã
å 为è¿ä¸ª JIT ç¼è¯è¿ç¨å¨ç¨åºæ§è¡æ¶åçï¼æ以è½å¤ä¿æå¹³å°æ å
³æ§ï¼åå¸çä»ç¶æ¯ä¸ç«ç Java å¹³å°ä»£ç ãC å C++ ä¹ç±»çè¯è¨ç¼ºä¹è¿ç§ä¼ç¹ï¼å 为å®ä»¬å¨ç¨åºæ§è¡åè¿è¡æ¬å°ç¼è¯ï¼åå¸ç»ï¼æ¬å°å¹³å°ï¼æ§è¡ç¯å¢çæ¯æ¬å°ä»£ç ã
ææ
尽管éè¿ JIT ç¼è¯ä¿æäºå¹³å°æ å
³æ§ï¼ä½æ¯ä»åºäºä¸å®ä»£ä»·ãå 为å¨ç¨åºæ§è¡æ¶è¿è¡ç¼è¯ï¼æ以ç¼è¯ä»£ç çæ¶é´å°è®¡å
¥ç¨åºçæ§è¡æ¶é´ãä»»ä½ç¼åè¿å¤§å C æ C++ ç¨åºç人é½ç¥éï¼ç¼è¯è¿ç¨å¾å¾è¾æ
¢ã
为äºå
æè¿ä¸ªç¼ºç¹ï¼ç°ä»£ç JIT
ç¼è¯å¨ä½¿ç¨äºä¸é¢ä¸¤ç§æ¹æ³çä»»æä¸ç§ï¼æäºæ
åµä¸åæ¶ä½¿ç¨äºè¿ä¸¤ç§æ¹æ³ï¼ã第ä¸ç§æ¹æ³æ¯ï¼ç¼è¯ææç代ç ï¼ä½æ¯ä¸æ§è¡ä»»ä½èæ¶å¤çåæå转æ¢ï¼å æ¤å¯ä»¥å¿«
éçæ代ç ãç±äºçæ代ç çé度å¾å¿«ï¼å æ¤å°½ç®¡å¯ä»¥ææ¾è§å¯å°ç¼è¯å¸¦æ¥çå¼éï¼ä½æ¯è¿å¾å®¹æ就被åå¤æ§è¡æ¬å°ä»£ç æ带æ¥çæ§è½æ¹åææ©çã第äºç§æ¹æ³æ¯ï¼
å°ç¼è¯èµæºåªåé
ç»å°éçé¢ç¹æ§è¡çæ¹æ³ï¼é常称ä½çæ¹æ³ï¼ãä½ç¼è¯å¼éæ´å®¹æ被åå¤æ§è¡ç代ç 带æ¥çæ§è½ä¼å¿æ©çãå¾å¤åºç¨ç¨åºåªæ§è¡å°éççæ¹æ³ï¼å
æ¤è¿ç§æ¹æ³ææå°å®ç°äºç¼è¯æ§è½ææ¬çæå°åã
å¨æç¼è¯å¨çä¸ä¸ªä¸»è¦çå¤ææ§å¨äºæè¡¡äºè§£ç¼è¯ä»£ç çé¢æè·ç使æ¹æ³çæ§è¡å¯¹æ´ä¸ªç¨åºçæ§è½èµ·å¤å¤§ä½ç¨ãä¸ä¸ªæ端çä¾åæ¯ï¼ç¨åºæ§è¡åï¼æ¨é常æ¸
æ¥åªäºæ¹
æ³å¯¹äºè¿ä¸ªç¹å®çæ§è¡çæ§è½è´¡ç®æ大ï¼ä½æ¯ç¼è¯è¿äºæ¹æ³æ¯«æ ç¨å¤ï¼å 为ç¨åºå·²ç»å®æãèå¨å¦ä¸ä¸ªæ端ï¼ç¨åºæ§è¡åæ æ³å¾ç¥åªäºæ¹æ³éè¦ï¼ä½æ¯æ¯ç§æ¹æ³çæ½
å¨åçé½æ大åäºã大å¤æ°å¨æç¼è¯å¨çæä½ä»äºè¿ä¸¤ä¸ªæ端ä¹é´ï¼æ¹æ³æ¯æè¡¡äºè§£æ¹æ³é¢æè·ççéè¦ç¨åº¦ã
Java è¯è¨éè¦å¨æå 载类è¿ä¸äºå®å¯¹ Java
ç¼è¯å¨ç设计æçéè¦çå½±åãå¦æå¾
ç¼è¯ä»£ç å¼ç¨çå
¶ä»ç±»è¿æ²¡æå è½½æä¹åï¼æ¯å¦ä¸ä¸ªæ¹æ³éè¦è¯»åæ个å°æªå è½½çç±»çéæå段å¼ãJava
è¯è¨è¦æ±ç¬¬ä¸æ¬¡æ§è¡ç±»å¼ç¨æ¶å è½½è¿ä¸ªç±»å¹¶å°å
¶è§£æå°å½åç JVM
ä¸ãç´å°ç¬¬ä¸æ¬¡æ§è¡æ¶æ解æå¼ç¨ï¼è¿æå³ç没æå°åå¯ä¾ä»ä¸å 载该éæå段ãç¼è¯å¨å¦ä½å¤çè¿ç§å¯è½æ§ï¼ç¼è¯å¨çæä¸äºä»£ç ï¼ç¨äºå¨æ²¡æå 载类æ¶å 载并解
æç±»ãç±»ä¸æ¦è¢«è§£æï¼å°±ä¼ä»¥ä¸ç§çº¿ç¨å®å
¨çæ¹å¼ä¿®æ¹åå§ä»£ç ä½ç½®ä»¥ä¾¿ç´æ¥è®¿é®éæå段çå°åï¼å 为æ¤æ¶å·²è·ç¥è¯¥å°åã
IBM JIT
ç¼è¯å¨ä¸è¿è¡äºå¤§éçåªå以便使ç¨å®å
¨èææçç代ç è¡¥ä¸ææ¯ï¼å æ¤å¨è§£æç±»ä¹åï¼æ§è¡çæ¬å°ä»£ç åªå è½½å段çå¼ï¼å°±åç¼è¯æ¶å·²ç»è§£æäºå段ä¸æ ·ãå¦å¤ä¸
ç§æ¹æ³æ¯çæä¸äºä»£ç ï¼ç¨äºå¨æ¥æå段çä½ç½®ä»¥åä¸ç´æ£æ¥æ¯å¦å·²ç»è§£æå段ï¼ç¶åå 载该å¼ã对äºé£äºç±æªè§£æåæ已解æ并被é¢ç¹è®¿é®çå段æ¥è¯´ï¼è¿ç§ç®å
çè¿ç¨å¯è½å¸¦æ¥ä¸¥éçæ§è½é®é¢ã
å¨æç¼è¯çä¼ç¹
å¨æå°ç¼è¯ Java ç¨åºæä¸äºéè¦çä¼ç¹ï¼çè³è½å¤æ¯éæç¼è¯è¯è¨æ´å¥½å°çæ代ç ï¼ç°ä»£ç JIT ç¼è¯å¨å¸¸å¸¸åçæç代ç ä¸æå
¥æé©ä»¥æ¶éæå
³ç¨åºè¡ä¸ºçä¿¡æ¯ï¼ä»¥ä¾¿å¦æè¦éæ©æ¹æ³è¿è¡éç¼è¯ï¼å°±å¯ä»¥æ´å¥½å°ä¼åå¨æè¡ä¸ºã
å
³äºæ¤æ¹æ³çä¸ä¸ªå¾å¥½çä¾åæ¯æ¶éä¸ä¸ªç¹å® arraycopyæä½çé¿åº¦ãå¦æåç°æ¯æ¬¡æ§è¡æä½æ¶è¯¥é¿åº¦åºæ¬ä¸åï¼åå¯ä»¥ä¸ºæé¢ç¹ä½¿ç¨ç
arraycopyé¿åº¦çæä¸é¨ç代ç ï¼æè
å¯ä»¥è°ç¨è°æ´ä¸ºè¯¥é¿åº¦ç代ç åºåãç±äºå
åç³»ç»åæ令é设计çç¹æ§ï¼ç¨äºå¤å¶å
åçæä½³éç¨ä¾ç¨çæ§è¡é度é
常æ¯ç¨äºå¤å¶ç¹å®é¿åº¦ç代ç æ
¢ãä¾å¦ï¼å¤å¶ 8
个åèç对é½çæ°æ®å¯è½éè¦ä¸å°ä¸¤æ¡æ令ç´æ¥å¤å¶ï¼ç¸æ¯ä¹ä¸ï¼ä½¿ç¨å¯ä»¥å¤çä»»æåèæ°åä»»æ对é½æ¹å¼çä¸è¬å¤å¶å¾ªç¯å¯è½éè¦ 10 æ¡æ令æ¥å¤å¶åæ ·ç 8
个åèãä½æ¯ï¼å³ä½¿æ¤ç±»ä¸é¨ç代ç æ¯ä¸ºæ个ç¹å®çé¿åº¦çæçï¼çæç代ç ä¹å¿
é¡»æ£ç¡®å°æ§è¡å
¶ä»é¿åº¦çå¤å¶ãçæ代ç åªæ¯ä¸ºäºä½¿å¸¸è§é¿åº¦çæä½æ§è¡å¾æ´å¿«ï¼
å æ¤å¹³åä¸æ¥ï¼æ§è½å¾å°äºæ¹è¿ãæ¤ç±»ä¼å对大å¤æ°éæç¼è¯è¯è¨é常ä¸å®ç¨ï¼å 为ææå¯è½çæ§è¡ä¸é¿åº¦æå®çæä½æ¯ä¸ä¸ªç¹å®ç¨åºæ§è¡ä¸é¿åº¦æå®çæä½è¦å°å¾
å¤ã
æ¤ç±»ä¼åçå¦ä¸ä¸ªéè¦çä¾åæ¯åºäºç±»å±æ¬¡ç»æçä¼åãä¾å¦ï¼ä¸ä¸ªèæ¹æ³è°ç¨éè¦æ¥çæ¥æ¶æ¹å¯¹è±¡çç±»è°ç¨ï¼ä»¥ä¾¿æ¾åºåªä¸ªå®é
ç®æ å®ç°äºæ¥æ¶æ¹å¯¹è±¡çèæ¹æ³ã
ç 究表æï¼å¤§å¤æ°èè°ç¨åªæä¸ä¸ªç®æ 对åºäºææçæ¥æ¶æ¹å¯¹è±¡ï¼è JIT
ç¼è¯å¨å¯ä»¥ä¸ºç´æ¥è°ç¨çææ¯èè°ç¨æ´ææçç代ç ãéè¿åæ代ç ç¼è¯åç±»å±æ¬¡ç»æçç¶æï¼JIT
ç¼è¯å¨å¯ä»¥ä¸ºèè°ç¨æ¾å°ä¸ä¸ªç®æ æ¹æ³ï¼å¹¶ä¸çæç´æ¥è°ç¨ç®æ æ¹æ³ç代ç èä¸æ¯æ§è¡è¾æ
¢çèè°ç¨ãå½ç¶ï¼å¦æç±»å±æ¬¡ç»æåçååï¼å¹¶ä¸åºç°å¦å¤çç®æ æ¹æ³ï¼
å JIT
ç¼è¯å¨å¯ä»¥æ´æ£æåçæç代ç 以便æ§è¡èè°ç¨ãå¨å®è·µä¸ï¼å¾å°éè¦ä½åºè¿äºæ´æ£ãå¦å¤ï¼ç±äºå¯è½éè¦ä½åºæ¤ç±»æ´æ£ï¼å æ¤éæå°æ§è¡è¿ç§ä¼åé常麻ç¦ã
å 为å¨æç¼è¯å¨é常åªæ¯éä¸ç¼è¯å°éççæ¹æ³ï¼æ以å¯ä»¥æ§è¡æ´ä¸»å¨çåææ¥çææ´å¥½ç代ç ï¼ä½¿ç¼è¯çåæ¥æ´é«ãäºå®ä¸ï¼å¤§é¨åç°ä»£ç
JIT
ç¼è¯å¨ä¹æ¯æéç¼è¯è¢«è®¤ä¸ºæ¯çæ¹æ³çæ¹æ³ãå¯ä»¥ä½¿ç¨éæç¼è¯å¨ï¼ä¸å¤ªå¼ºè°ç¼è¯æ¶é´ï¼ä¸å¸¸è§çé常主å¨çä¼åæ¥åæå转æ¢è¿äºé¢ç¹æ§è¡çæ¹æ³ï¼ä»¥ä¾¿çææ´å¥½
ç代ç 并è·å¾æ´é«çæ§è½ã
è¿äºæ¹è¿åå
¶ä»ä¸äºç±»ä¼¼çæ¹è¿æ产çç综åæææ¯ï¼å¯¹äºå¤§éç Java åºç¨ç¨åºæ¥è¯´ï¼å¨æç¼è¯å·²ç»å¼¥è¡¥äºä¸ C å C++ ä¹ç±»è¯è¨çéææ¬å°ç¼è¯æ§è½ä¹é´çå·®è·ï¼å¨æäºæ
åµä¸ï¼çè³è¶
è¿äºåè
çæ§è½ã
缺ç¹
ä½æ¯ï¼å¨æç¼è¯ç¡®å®å
·æä¸äºç¼ºç¹ï¼è¿äºç¼ºç¹ä½¿å®å¨æäºæ
åµä¸ç®ä¸ä¸ä¸ä¸ªçæ³ç解å³æ¹æ¡ãä¾å¦ï¼å 为è¯å«é¢ç¹æ§è¡çæ¹æ³ä»¥åç¼è¯è¿äºæ¹æ³éè¦æ¶é´ï¼æ以åºç¨
ç¨åºé常è¦ç»åä¸ä¸ªåå¤è¿ç¨ï¼å¨è¿ä¸ªè¿ç¨ä¸æ§è½æ æ³è¾¾å°å
¶æé«å¼ãå¨è¿ä¸ªåå¤è¿ç¨ä¸åºç°æ§è½é®é¢æå 个åå ãé¦å
ï¼å¤§éçåå§ç¼è¯å¯è½ç´æ¥å½±ååºç¨ç¨åºç
å¯å¨æ¶é´ãä¸ä»
è¿äºç¼è¯å»¶è¿äºåºç¨ç¨åºè¾¾å°ç¨³å®ç¶æçæ¶é´ï¼æ³å Web
æå¡å¨ç»
åä¸ä¸ªåå§é¶æ®µåæè½å¤æ§è¡å®é
æç¨çå·¥ä½ï¼ï¼èä¸å¨åå¤é¶æ®µä¸é¢ç¹æ§è¡çæ¹æ³å¯è½å¯¹åºç¨ç¨åºç稳å®ç¶æçæ§è½æèµ·çä½ç¨ä¹ä¸å¤§ãå¦æ JIT
ç¼è¯ä¼å»¶è¿å¯å¨åä¸è½æ¾èæ¹ååºç¨ç¨åºçé¿ææ§è½ï¼åæ§è¡è¿ç§ç¼è¯å°±é常浪费ãè½ç¶ææçç°ä»£ JVM
é½æ§è¡è°ä¼æ¥åè½»å¯å¨å»¶è¿ï¼ä½æ¯å¹¶éå¨æææ
åµä¸é½è½å¤å®å
¨è§£å³è¿ä¸ªé®é¢ã
å
¶æ¬¡ï¼æäºåºç¨ç¨åºå®å
¨ä¸è½å¿åå¨æç¼è¯å¸¦æ¥ç延è¿ãå¦ GUI æ¥å£ä¹ç±»äº¤äºå¼åºç¨ç¨åºå°±æ¯è¿æ ·çä¾åãå¨è¿ç§æ
åµä¸ï¼ç¼è¯æ´»å¨å¯è½å¯¹ç¨æ·ä½¿ç¨é æä¸å©å½±åï¼åæ¶åä¸è½æ¾èå°æ¹ååºç¨ç¨åºçæ§è½ã
æåï¼ç¨äºå®æ¶ç¯å¢å¹¶å
·æä¸¥æ ¼çä»»å¡æ¶éçåºç¨ç¨åºå¯è½æ æ³å¿åç¼è¯çä¸ç¡®å®æ§æ§è½å½±åæå¨æç¼è¯å¨æ¬èº«çå
åå¼éã
å æ¤ï¼è½ç¶ JIT ç¼è¯ææ¯å·²ç»è½å¤æä¾ä¸éæè¯è¨æ§è½ç¸å½ï¼çè³æ´å¥½ï¼çæ§è½æ°´å¹³ï¼ä½æ¯å¨æç¼è¯å¹¶ä¸éåäºæäºåºç¨ç¨åºãå¨è¿äºæ
åµä¸ï¼Java 代ç çæåï¼Ahead-of-timeï¼AOTï¼ç¼è¯å¯è½æ¯åéç解å³æ¹æ¡ã
AOT Java ç¼è¯
大è´è¯´æ¥ï¼Java è¯è¨æ¬å°ç¼è¯åºè¯¥æ¯ä¸ºä¼ ç»è¯è¨ï¼å¦ C++ æ
Fortranï¼èå¼åçç¼è¯ææ¯çä¸ä¸ªç®ååºç¨ãä¸å¹¸çæ¯ï¼Java è¯è¨æ¬èº«çå¨æç¹æ§å¸¦æ¥äºé¢å¤çå¤ææ§ï¼å½±åäº Java
ç¨åºéæç¼è¯ä»£ç çè´¨éãä½æ¯åºæ¬ææ³ä»ç¶æ¯ç¸åçï¼å¨ç¨åºæ§è¡åçæ Java æ¹æ³çæ¬å°ä»£ç ï¼ä»¥ä¾¿å¨ç¨åºè¿è¡æ¶ç´æ¥ä½¿ç¨æ¬å°ä»£ç ãç®çå¨äºé¿å
JIT ç¼è¯å¨çè¿è¡æ¶æ§è½æ¶èæå
åæ¶èï¼æè
é¿å
解éç¨åºçæ©ææ§è½å¼éã
ææ
å¨æç±»å è½½æ¯å¨æ JIT ç¼è¯å¨é¢ä¸´çä¸ä¸ªææï¼ä¹æ¯ AOT
ç¼è¯çä¸ä¸ªæ´éè¦çé®é¢ãåªæå¨æ§è¡ä»£ç å¼ç¨ç±»çæ¶åæå 载该类ãå 为æ¯å¨ç¨åºæ§è¡åè¿è¡ AOT
ç¼è¯çï¼æ以ç¼è¯å¨æ æ³é¢æµå è½½äºåªäºç±»ãå°±æ¯è¯´ç¼è¯å¨æ æ³è·ç¥ä»»ä½éæå段çå°åãä»»ä½å¯¹è±¡çä»»ä½å®ä¾å段çå移éæä»»ä½è°ç¨çå®é
ç®æ ï¼çè³å¯¹ç´æ¥è°
ç¨ï¼éèè°ç¨ï¼ä¹æ¯å¦æ¤ãå¨æ§è¡ä»£ç æ¶ï¼å¦æè¯æ对任ä½è¿ç±»ä¿¡æ¯çé¢æµæ¯é误çï¼è¿æå³ç代ç æ¯é误ç并ä¸è¿çºç²äº Java çä¸è´æ§ã
å 为代ç å¯ä»¥å¨ä»»ä½ç¯å¢ä¸æ§è¡ï¼æ以类æ件å¯è½ä¸ä»£ç ç¼è¯æ¶ä¸åãä¾å¦ï¼ä¸ä¸ª JVM
å®ä¾å¯è½ä»ç£ççæ个ç¹å®ä½ç½®å 载类ï¼èåé¢ä¸ä¸ªå®ä¾å¯è½ä»ä¸åçä½ç½®çè³ç½ç»å 载该类ã设æ³ä¸ä¸ªæ£å¨è¿è¡ bug
ä¿®å¤çå¼åç¯å¢ï¼ç±»æ件çå
容å¯è½éä¸åçåºç¨ç¨åºçæ§è¡èååãæ¤å¤ï¼Java 代ç å¯è½å¨ç¨åºæ§è¡åæ ¹æ¬ä¸åå¨ï¼æ¯å¦ Java
åå°æå¡é常å¨è¿è¡æ¶çææ°ç±»æ¥æ¯æç¨åºçè¡ä¸ºã
缺å°å
³äºéæãå段ãç±»åæ¹æ³çä¿¡æ¯æå³ç严ééå¶äº Java ç¼è¯å¨ä¸ä¼åæ¡æ¶ç大é¨ååè½ãå
èå¯è½æ¯éææå¨æç¼è¯å¨åºç¨çæéè¦çä¼åï¼ä½æ¯ç±äºç¼è¯å¨æ æ³è·ç¥è°ç¨çç®æ æ¹æ³ï¼å æ¤æ æ³å使ç¨è¿ç§ä¼åã
å
è
å
èæ¯ä¸ç§ç¨äºå¨è¿è¡æ¶çæ代ç é¿å
ç¨åºå¼å§åç»ææ¶å¼éçææ¯ï¼æ¹æ³æ¯å°å½æ°çè°ç¨ä»£ç æå
¥å°è°ç¨æ¹çå½æ°ä¸ãä½æ¯å
èæ大ççå¤å¯è½æ¯ä¼åæ¹å¯è§ç代ç çèå´æ©å¤§äºï¼ä»èè½å¤çææ´é«è´¨éç代ç ãä¸é¢æ¯ä¸ä¸ªå
èåç代ç 示ä¾ï¼
int foo() { int x=2, y=3; return bar(x,y); }final int bar(int a, int b) { return a+b; }
å¦æç¼è¯å¨å¯ä»¥è¯æè¿ä¸ª barå°±æ¯ foo()ä¸è°ç¨çé£ä¸ªæ¹æ³ï¼å barä¸ç代ç å¯ä»¥å代 foo()ä¸å¯¹
bar()çè°ç¨ãè¿æ¶ï¼bar()æ¹æ³æ¯ finalç±»åï¼å æ¤è¯å®æ¯ foo()ä¸è°ç¨çé£ä¸ªæ¹æ³ãçè³å¨ä¸äºèè°ç¨ä¾åä¸ï¼å¨æ JIT
ç¼è¯å¨é常è½å¤æ¨æµæ§å°å
èç®æ æ¹æ³ç代ç ï¼å¹¶ä¸å¨ç»å¤§å¤æ°æ
åµä¸è½å¤æ£ç¡®ä½¿ç¨ãç¼è¯å¨å°çæ以ä¸ä»£ç ï¼
int foo() { int x=2, y=3; return x+y; }
å¨è¿ä¸ªä¾åä¸ï¼ç®ååå为å¼ä¼ æçä¼åå¯ä»¥çæç´æ¥è¿å
5ç代ç ãå¦æä¸ä½¿ç¨å
èï¼åä¸è½æ§è¡è¿ç§ä¼åï¼äº§ççæ§è½å°±ä¼ä½å¾å¤ãå¦æ没æ解æ
bar()æ¹æ³ï¼ä¾å¦éæç¼è¯ï¼ï¼åä¸è½æ§è¡è¿ç§ä¼åï¼è代ç å¿
é¡»æ§è¡èè°ç¨ãè¿è¡æ¶ï¼å®é
è°ç¨çå¯è½æ¯å¦å¤ä¸ä¸ªæ§è¡ä¸¤ä¸ªæ°åç¸ä¹èä¸æ¯ç¸å ç
baræ¹æ³ãæ以ä¸è½å¨ Java ç¨åºçéæç¼è¯æé´ç´æ¥ä½¿ç¨å
èã
AOT
代ç å æ¤å¿
é¡»å¨æ²¡æ解ææ¯ä¸ªéæãå段ãç±»åæ¹æ³å¼ç¨çæ
åµä¸çæãæ§è¡æ¶ï¼æ¯ä¸ªè¿äºå¼ç¨å¿
é¡»å©ç¨å½åè¿è¡æ¶ç¯å¢çæ£ç¡®å¼è¿è¡æ´æ°ãè¿ä¸ªè¿ç¨å¯è½ç´æ¥å½±å
第ä¸æ¬¡æ§è¡çæ§è½ï¼å 为å¨ç¬¬ä¸æ¬¡æ§è¡æ¶å°è§£æææå¼ç¨ãå½ç¶ï¼åç»æ§è¡å°ä»ä¿®è¡¥ä»£ç ä¸è·çï¼ä»èå¯ä»¥æ´ç´æ¥å°å¼ç¨å®ä¾ãéæå段ææ¹æ³ç®æ ã
å¦å¤ï¼ä¸º Java æ¹æ³çæçæ¬å°ä»£ç é常éè¦ä½¿ç¨ä»
å¨å个 JVM å®ä¾ä¸ä½¿ç¨çå¼ãä¾å¦ï¼ä»£ç å¿
é¡»è°ç¨ JVM
è¿è¡æ¶ä¸çæäºè¿è¡æ¶ä¾ç¨æ¥æ§è¡ç¹å®æä½ï¼å¦æ¥æ¾æªè§£æçæ¹æ³æåé
å
åãè¿äºè¿è¡æ¶ä¾ç¨çå°åå¯è½å¨æ¯æ¬¡å° JVM å è½½å°å
åæ¶ååãå æ¤ AOT
ç¼è¯ä»£ç éè¦ç»å®å° JVM çå½åæ§è¡ç¯å¢ä¸ï¼ç¶åæè½æ§è¡ãå
¶ä»çä¾åæå符串çå°åå常éæ± å
¥å£çå
é¨ä½ç½®ã
å¨ WebSphere Real Time ä¸ï¼AOT æ¬å°ä»£ç ç¼è¯éè¿ jxeinajarå·¥å
·ï¼åè§å¾ 2ï¼æ¥æ§è¡ã该工å
·å¯¹ JAR æ件ä¸ææç±»çæææ¹æ³åºç¨æ¬å°ä»£ç ç¼è¯ï¼ä¹å¯ä»¥éæ©æ§å°å¯¹éè¦çæ¹æ³åºç¨æ¬å°ä»£ç ç¼è¯ãç»æ被åå¨å°å为 Java eXEcutable (JXE) çå
é¨æ ¼å¼ä¸ï¼ä½æ¯ä¹å¯è½»æ¾å°åå¨å°ä»»æçæä¹
æ§å®¹å¨ä¸ã
æ¨å¯è½è®¤ä¸ºå¯¹ææç代ç è¿è¡éæç¼è¯æ¯æ好çæ¹æ³ï¼å 为å¯ä»¥å¨è¿è¡æ¶æ§è¡æ大æ°éçæ¬å°ä»£ç ãä½æ¯æ¤å¤å¯ä»¥ä½åºä¸äºæè¡¡ãç¼è¯çæ¹æ³è¶å¤ï¼ä»£ç å ç¨çå
å
å°±è¶å¤ãç¼è¯åçæ¬å°ä»£ç 大æ¦æ¯åèç 大 10 åï¼æ¬å°ä»£ç æ¬èº«çå¯åº¦æ¯åèç å°ï¼èä¸å¿
é¡»å
å«ä»£ç çéå å
æ°æ®ï¼ä»¥ä¾¿å°ä»£ç ç»å®å° JVM
ä¸ï¼å¹¶ä¸å¨åºç°å¼å¸¸æ请æ±å æ è·è¸ªæ¶æ£ç¡®æ§è¡ä»£ç ãæææ®é Java åºç¨ç¨åºç JAR
æ件é常å
å«è®¸å¤å¾å°æ§è¡çæ¹æ³ãç¼è¯è¿äºæ¹æ³ä¼æ¶èå
åå´æ²¡æä»ä¹é¢ææ¶çãç¸å
³çå
åæ¶èå
æ¬ä»¥ä¸è¿ç¨ï¼å°ä»£ç åå¨å°ç£çä¸ãä»ç£çååºä»£ç 并è£
å
¥
JVMï¼ä»¥åå°ä»£ç ç»å®å° JVMãé¤éå¤æ¬¡æ§è¡ä»£ç ï¼å¦åè¿äºä»£ä»·ä¸è½ç±æ¬å°ä»£ç ç¸å¯¹è§£éçæ§è½ä¼å¿æ¥å¼¥è¡¥ã
å¾ 2. jxeinajar
è·å¤§å°é®é¢ç¸è¿èçä¸ä¸ªäºå®æ¯ï¼å¨ç¼è¯è¿çæ¹æ³å解éè¿çæ¹æ³ä¹é´è¿è¡çè°ç¨ï¼å³ç¼è¯è¿çæ¹æ³è°ç¨è§£éè¿çæ¹æ³ï¼æè
ç¸åï¼å¯è½æ¯è¿ä¸¤ç±»æ¹æ³åèªå
é¨ä¹é´
è¿è¡çè°ç¨æéçå¼é大ãå¨æç¼è¯å¨éè¿æç»ç¼è¯ææç± JIT
ç¼è¯ä»£ç é¢ç¹è°ç¨çé£äºè§£éè¿çæ¹æ³æ¥åå°è¿é¡¹å¼éï¼ä½æ¯å¦æä¸ä½¿ç¨å¨æç¼è¯å¨ï¼åè¿é¡¹å¼éå°±ä¸å¯é¿å
ãå æ¤å¦ææ¯éæ©æ§å°ç¼è¯æ¹æ³ï¼åå¿
须谨æ
æä½ä»¥ä½¿
ä»å·²ç¼è¯æ¹æ³å°æªç¼è¯æ¹æ³ç转æ¢æå°åã为äºå¨ææå¯è½çæ§è¡ä¸é½é¿å
è¿ä¸ªé®é¢èéæ©æ£ç¡®çæ¹æ³ä¼é常å°é¾ã
ä¼ç¹
è½ç¶ AOT ç¼è¯ä»£ç å
·æä¸è¿°ç缺ç¹åææï¼ä½æ¯æåç¼è¯ Java ç¨åºå¯ä»¥æé«æ§è½ï¼å°¤å
¶æ¯å¨ä¸è½å°å¨æç¼è¯å¨ä½ä¸ºææ解å³æ¹æ¡çç¯å¢ä¸ã
å¯ä»¥éè¿è°¨æ
å°ä½¿ç¨ AOT ç¼è¯ä»£ç å å¿«åºç¨ç¨åºå¯å¨ï¼å 为è½ç¶è¿ç§ä»£ç éå¸¸æ¯ JIT
ç¼è¯ä»£ç æ
¢ï¼ä½æ¯å´æ¯è§£é代ç å¿«å¾å¤åãæ¤å¤ï¼å 为å è½½åç»å® AOT
ç¼è¯ä»£ç çæ¶é´é常æ¯æ£æµåå¨æç¼è¯ä¸ä¸ªéè¦æ¹æ³çæ¶é´å°ï¼æ以è½å¤å¨ç¨åºæ§è¡çæ©æè¾¾å°é£æ ·çæ§è½ã类似å°ï¼äº¤äºå¼åºç¨ç¨åºå¯ä»¥å¾å¿«å°ä»æ¬å°ä»£ç ä¸è·
çï¼æ é使ç¨å¼èµ·è¾å·®ååºè½åçå¨æç¼è¯ã
RT åºç¨ç¨åºä¹è½ä» AOT ç¼è¯ä»£ç ä¸è·å¾éè¦çæ¶çï¼æ´å
·ç¡®å®æ§çæ§è½è¶
è¿äºè§£éçæ§è½ãWebSphere Real Time
使ç¨çå¨æ JIT ç¼è¯å¨éå¯¹å¨ RT ç³»ç»ä¸ç使ç¨è¿è¡äºä¸é¨çè°æ´ã使ç¼è¯çº¿ç¨ä»¥ä½äº RT
ä»»å¡çä¼å
级æä½ï¼å¹¶ä¸ä½åºäºè°æ´ä»¥é¿å
çæ带æ严éçä¸ç¡®å®æ§æ§è½å½±åç代ç ãä½æ¯ï¼å¨ä¸äº RT ç¯å¢ä¸ï¼åºç° JIT
ç¼è¯å¨æ¯ä¸å¯æ¥åçãæ¤ç±»ç¯å¢é常éè¦æä¸¥æ ¼çæ¶é管çæ§å¶ãå¨è¿äºä¾åä¸ï¼AOT
ç¼è¯ä»£ç å¯ä»¥æä¾æ¯è§£éè¿ç代ç æ´å¥½çåå§æ§è½ï¼åä¸ä¼å½±åç°æçç¡®å®æ§ãæ¶é¤ JIT
ç¼è¯çº¿ç¨çè³æ¶é¤äºå¯å¨æ´é«ä¼å
级 RT ä»»å¡æ¶åçç线ç¨æ¢å æ带æ¥çæ§è½å½±åã
ä¼ç¼ºç¹ç»è®¡
å¨æï¼JITï¼ç¼è¯å¨æ¯æå¹³å°ä¸ç«æ§ï¼å¹¶éè¿å©ç¨åºç¨ç¨åºæ§è¡çå¨æè¡ä¸ºåå
³äºå è½½çç±»åå
¶å±æ¬¡ç»æçä¿¡æ¯æ¥çæé«è´¨éç代ç ãä½æ¯
JIT
ç¼è¯å¨å
·æä¸ä¸ªæéçç¼è¯æ¶é¢ç®ï¼èä¸ä¼å½±åç¨åºçè¿è¡æ¶æ§è½ãå¦ä¸æ¹é¢ï¼éæï¼AOTï¼ç¼è¯å¨åçºç²äºå¹³å°æ å
³æ§å代ç è´¨éï¼å 为å®ä»¬ä¸è½å©ç¨ç¨åºçå¨
æè¡ä¸ºï¼ä¹ä¸å
·æå
³äºå è½½çç±»æç±»å±æ¬¡ç»æçä¿¡æ¯ãAOT ç¼è¯æ¥ææææ éå¶çç¼è¯æ¶é¢ç®ï¼å 为 AOT
ç¼è¯æ¶é´ä¸ä¼å½±åè¿è¡æ¶æ§è½ï¼ä½æ¯å¨å®è·µä¸å¼å人åä¸ä¼é¿æçå¾
éæç¼è¯æ¥éª¤çå®æã
表 1 æ»ç»äºæ¬æ讨论ç Java è¯è¨å¨æåéæç¼è¯å¨çä¸äºç¹æ§ï¼
表 1. æ¯è¾ç¼è¯ææ¯
两ç§ææ¯é½éè¦è°¨æ
éæ©ç¼è¯çæ¹æ³ä»¥å®ç°æé«çæ§è½ã对å¨æç¼è¯å¨èè¨ï¼ç¼è¯å¨èªèº«ä½åºå³çï¼è对äºéæç¼è¯å¨ï¼ç±å¼å人åä½åºéæ©ã让
JIT ç¼è¯å¨éæ©ç¼è¯çæ¹æ³æ¯ä¸æ¯ä¼ç¹å¾é¾è¯´ï¼åå³äºç¼è¯å¨å¨ç»å®æ
å½¢ä¸æ¨æè½åç好åãå¨å¤§å¤æ°æ
åµä¸ï¼æ们认为è¿æ¯ä¸ç§ä¼ç¹ã
å 为å®ä»¬å¯ä»¥æ好å°ä¼åè¿è¡ä¸çç¨åºï¼æ以 JIT ç¼è¯å¨å¨æä¾ç¨³å®ç¶ææ§è½æ¹é¢æ´èä¸ç¹ï¼èè¿ä¸ç¹å¨å¤§éçç产 Java
ç³»ç»ä¸æ为éè¦ãéæç¼è¯å¯ä»¥äº§çæä½³ç交äºå¼æ§è½ï¼å 为没æè¿è¡æ¶ç¼è¯è¡ä¸ºæ¥å½±åç¨æ·é¢æçååºæ¶é´ãéè¿è°æ´å¨æç¼è¯å¨å¯ä»¥å¨æç§ç¨åº¦ä¸è§£å³å¯å¨åç¡®
å®æ§æ§è½é®é¢ï¼ä½æ¯éæç¼è¯å¨éè¦æ¶å¯æä¾æå¿«çå¯å¨é度åæé«çº§å«çç¡®å®æ§ã表 2 å¨åç§ä¸åçæ§è¡ç¯å¢ä¸å¯¹è¿ä¸¤ç§ç¼è¯ææ¯è¿è¡äºæ¯è¾ï¼
表 2. 使ç¨è¿äºææ¯çæä½³ç¯å¢
å¾ 3 å±ç¤ºäºå¯å¨æ§è½å稳å®ç¶ææ§è½çæ»ä½è¶å¿ï¼
å¾ 3. AOT å JIT çæ§è½å¯¹æ¯
ä½¿ç¨ JIT ç¼è¯å¨çåå§é¶æ®µæ§è½å¾ä½ï¼å 为è¦é¦å
解éæ¹æ³ãéçç¼è¯æ¹æ³çå¢å¤å JIT
æ§è¡ç¼è¯æéæ¶é´ç缩çï¼æ§è½æ²çº¿éæ¸åé«æåè¾¾å°æ§è½å³°å¼ãå¦ä¸æ¹é¢ï¼AOT ç¼è¯ä»£ç å¯å¨æ¶çæ§è½æ¯è§£éçæ§è½é«å¾å¤ï¼ä½æ¯æ æ³è¾¾å° JIT
ç¼è¯å¨æè½è¾¾å°çæé«æ§è½ãå°éæ代ç ç»å®å° JVM å®ä¾ä¸ä¼äº§çä¸äºå¼éï¼å æ¤å¼å§æ¶çæ§è½æ¯ç¨³å®ç¶æçæ§è½å¼ä½ï¼ä½æ¯è½å¤æ¯ä½¿ç¨ JIT
ç¼è¯å¨æ´å¿«å°è¾¾å°ç¨³å®ç¶æçæ§è½æ°´å¹³ã
没æä¸ç§æ¬å°ä»£ç ç¼è¯ææ¯è½å¤éåææç Java
æ§è¡ç¯å¢ãæç§ææ¯ææ
é¿çé常æ£æ¯å
¶ä»ææ¯ç弱项ãåºäºè¿ä¸ªåå ï¼éè¦åæ¶ä½¿ç¨è¿ä¸¤ç§ç¼è¯ææ¯ä»¥æ»¡è¶³ Java
åºç¨ç¨åºå¼å人åçè¦æ±ãäºå®ä¸ï¼å¯ä»¥ç»å使ç¨éæåå¨æç¼è¯ä»¥ä¾¿æä¾æ大å¯è½çæ§è½æå ââ ä½æ¯å¿
é¡»å
·å¤å¹³å°æ å
³æ§ï¼å®æ¯ Java
è¯è¨ç主è¦åç¹ï¼å æ¤ä¸æé®é¢ã
ç»æè¯
æ¬ææ¢è®¨äº Java è¯è¨æ¬å°ä»£ç ç¼è¯çé®é¢ï¼ä¸»è¦ä»ç»äº JIT ç¼è¯å¨å½¢å¼çå¨æç¼è¯åéæ AOT ç¼è¯ï¼æ¯è¾äºäºè
çä¼ç¼ºç¹ã
è½ç¶å¨æç¼è¯å¨å¨è¿å»çåå¹´éå®ç°äºæ大çæçï¼ä½¿å¤§éçåç§ Java åºç¨ç¨åºå¯ä»¥èµ¶ä¸æè¶
è¿éæç¼è¯è¯è¨ï¼å¦ C++ æ
Fortranï¼æè½å¤è¾¾å°çæ§è½ãä½æ¯å¨æç¼è¯å¨æäºç±»åçåºç¨ç¨åºåæ§è¡ç¯å¢ä¸ä»ç¶ä¸å¤ªåéãè½ç¶ AOT
ç¼è¯å·ç§°å¨æç¼è¯ç¼ºç¹çä¸è½è§£å³æ¹æ¡ï¼ä½æ¯ç±äº Java è¯è¨æ¬èº«çå¨æç¹æ§ï¼å®ä¹é¢ä¸´çæä¾æ¬å°ç¼è¯å
¨é¨æ½è½çææã
è¿ä¸¤ç§ææ¯é½ä¸è½è§£å³ Java æ§è¡ç¯å¢ä¸æ¬å°ä»£ç ç¼è¯çææéæ±ï¼ä½æ¯åè¿æ¥åå¯ä»¥å¨æææçå°æ¹ä½ä¸ºå·¥å
·ä½¿ç¨ãè¿ä¸¤ç§ææ¯å¯ä»¥ç¸äºè¡¥å
ãè½å¤æ°å½å°ä½¿ç¨è¿ä¸¤ç§ç¼è¯æ¨¡åçè¿è¡æ¶ç³»ç»å¯ä»¥ä½¿å¾å¤§èå´å
çåºç¨ç¨åºå¼åç¯å¢ä¸çå¼å人ååç¨æ·åçã
温馨提示:答案为网友推荐,仅供参考