如题所述
ããJavaèææº(JVM)æ¯å¯è¿è¡Java代ç çåæ³è®¡ç®æºãåªè¦æ ¹æ®JVMè§æ ¼æè¿°å°è§£éå¨ç§»æ¤å°ç¹å®ç计ç®æºä¸ï¼å°±è½ä¿è¯ç»è¿ç¼è¯çä»»ä½Java代ç è½å¤å¨è¯¥ç³»ç»ä¸è¿è¡ãæ¬æé¦å
ç®è¦ä»ç»ä»Javaæ件çç¼è¯å°æç»æ§è¡çè¿ç¨ï¼éå对JVMè§æ ¼æè¿°ä½ä¸è¯´æã
ãã
ããä¸.Javaæºæ件çç¼è¯ãä¸è½½ã解éåæ§è¡
ããJavaåºç¨ç¨åºçå¼åå¨æå æ¬ç¼è¯ãä¸è½½ã解éåæ§è¡å 个é¨åãJavaç¼è¯ç¨åºå°Javaæºç¨åºç¿»è¯ä¸ºJVMå¯æ§è¡ä»£ç ?åèç ãè¿ä¸ç¼è¯è¿ç¨åC/C++çç¼è¯æäºä¸åãå½Cç¼è¯å¨ç¼è¯çæä¸ä¸ªå¯¹è±¡ç代ç æ¶ï¼è¯¥ä»£ç æ¯ä¸ºå¨æä¸ç¹å®ç¡¬ä»¶å¹³å°è¿è¡è产ççãå æ¤ï¼å¨ç¼è¯è¿ç¨ä¸ï¼ç¼è¯ç¨åºéè¿æ¥è¡¨å°ææ对符å·çå¼ç¨è½¬æ¢ä¸ºç¹å®çå åå移éï¼ä»¥ä¿è¯ç¨åºè¿è¡ãJavaç¼è¯å¨å´ä¸å°å¯¹åéåæ¹æ³çå¼ç¨ç¼è¯ä¸ºæ°å¼å¼ç¨ï¼ä¹ä¸ç¡®å®ç¨åºæ§è¡è¿ç¨ä¸çå åå¸å±ï¼èæ¯å°è¿äºç¬¦å·å¼ç¨ä¿¡æ¯ä¿çå¨åèç ä¸ï¼ç±è§£éå¨å¨è¿è¡è¿ç¨ä¸åç«å åå¸å±ï¼ç¶ååéè¿æ¥è¡¨æ¥ç¡®å®ä¸ä¸ªæ¹æ³æå¨çå°åãè¿æ ·å°±ææçä¿è¯äºJavaçå¯ç§»æ¤æ§åå®å ¨æ§ã
ãã
ããè¿è¡JVMåèç çå·¥ä½æ¯ç±è§£éå¨æ¥å®æçã解éæ§è¡è¿ç¨åä¸é¨è¿è¡ï¼ä»£ç çè£ å ¥ã代ç çæ ¡éªå代ç çæ§è¡ãè£ å ¥ä»£ç çå·¥ä½ç±"ç±»è£ è½½å¨"ï¼class loaderï¼å®æãç±»è£ è½½å¨è´è´£è£ å ¥è¿è¡ä¸ä¸ªç¨åºéè¦çææ代ç ï¼è¿ä¹å æ¬ç¨åºä»£ç ä¸çç±»æ继æ¿çç±»åè¢«å ¶è°ç¨çç±»ãå½ç±»è£ è½½å¨è£ å ¥ä¸ä¸ªç±»æ¶ï¼è¯¥ç±»è¢«æ¾å¨èªå·±çåå空é´ä¸ãé¤äºéè¿ç¬¦å·å¼ç¨èªå·±åå空é´ä»¥å¤çç±»ï¼ç±»ä¹é´æ²¡æå ¶ä»åæ³å¯ä»¥å½±åå ¶ä»ç±»ãå¨æ¬å°è®¡ç®æºä¸çææç±»é½å¨åä¸å°å空é´å ï¼èææä»å¤é¨å¼è¿çç±»ï¼é½æä¸ä¸ªèªå·±ç¬ç«çåå空é´ãè¿ä½¿å¾æ¬å°ç±»éè¿å ±äº«ç¸åçåå空é´è·å¾è¾é«çè¿è¡æçï¼åæ¶åä¿è¯å®ä»¬ä¸ä»å¤é¨å¼è¿çç±»ä¸ä¼ç¸äºå½±åãå½è£ å ¥äºè¿è¡ç¨åºéè¦çææç±»åï¼è§£éå¨ä¾¿å¯ç¡®å®æ´ä¸ªå¯æ§è¡ç¨åºçå åå¸å±ã解éå¨ä¸ºç¬¦å·å¼ç¨åç¹å®çå°å空é´å»ºç«å¯¹åºå ³ç³»åæ¥è¯¢è¡¨ãéè¿å¨è¿ä¸é¶æ®µç¡®å®ä»£ç çå åå¸å±ï¼Javaå¾å¥½å°è§£å³äºç±è¶ ç±»æ¹åè使å类崩æºçé®é¢ï¼åæ¶ä¹é²æ¢äºä»£ç 对å°åçéæ³è®¿é®ã
ãã
ããéåï¼è¢«è£ å ¥ç代ç ç±åèç æ ¡éªå¨è¿è¡æ£æ¥ãæ ¡éªå¨å¯åç°æä½æ°æ 溢åºï¼éæ³æ°æ®ç±»å转åçå¤ç§é误ãéè¿æ ¡éªåï¼ä»£ç 便å¼å§æ§è¡äºã
ãã
ããJavaåèç çæ§è¡æ两ç§æ¹å¼ï¼
ãã1.å³æ¶ç¼è¯æ¹å¼ï¼è§£éå¨å å°åèç ç¼è¯ææºå¨ç ï¼ç¶ååæ§è¡è¯¥æºå¨ç ã
ãã2.解éæ§è¡æ¹å¼ï¼è§£éå¨éè¿æ¯æ¬¡è§£é并æ§è¡ä¸å°æ®µä»£ç æ¥å®æJavaåèç ç¨ åºçæææä½ã
ããé常éç¨çæ¯ç¬¬äºç§æ¹æ³ãç±äºJVMè§æ ¼æè¿°å ·æ足å¤ççµæ´»æ§ï¼è¿ä½¿å¾å°åèç ç¿»è¯ä¸ºæºå¨ä»£ç çå·¥ä½
ãã
ããå ·æè¾é«çæçã对äºé£äºå¯¹è¿è¡é度è¦æ±è¾é«çåºç¨ç¨åºï¼è§£éå¨å¯å°Javaåèç å³æ¶ç¼è¯ä¸ºæºå¨ç ï¼ä»èå¾å¥½å°ä¿è¯äºJava代ç çå¯ç§»æ¤æ§åé«æ§è½ã
ãã
ããäº.JVMè§æ ¼æè¿°
ããJVMç设计ç®æ æ¯æä¾ä¸ä¸ªåºäºæ½è±¡è§æ ¼æè¿°ç计ç®æºæ¨¡åï¼ä¸ºè§£éç¨åºå¼å人åæå¾å¥½ççµæ´»æ§ï¼åæ¶ä¹ç¡®ä¿Java代ç å¯å¨ç¬¦å该è§èçä»»ä½ç³»ç»ä¸è¿è¡ãJVMå¯¹å ¶å®ç°çæäºæ¹é¢ç»åºäºå ·ä½çå®ä¹ï¼ç¹å«æ¯å¯¹Javaå¯æ§è¡ä»£ç ï¼å³åèç (Bytecode)çæ ¼å¼ç»åºäºæç¡®çè§æ ¼ãè¿ä¸è§æ ¼å æ¬æä½ç åæä½æ°çè¯æ³åæ°å¼ãæ è¯ç¬¦çæ°å¼è¡¨ç¤ºæ¹å¼ã以åJavaç±»æ件ä¸çJava对象ã常éç¼å²æ± å¨JVMçåå¨æ 象ãè¿äºå®ä¹ä¸ºJVM解éå¨å¼å人åæä¾äºæéçä¿¡æ¯åå¼åç¯å¢ãJavaç设计è å¸æç»å¼å人å以éå¿æ欲使ç¨Javaçèªç±ã
ãã
ããJVMå®ä¹äºæ§å¶Java代ç 解éæ§è¡åå ·ä½å®ç°çäºç§è§æ ¼ï¼å®ä»¬æ¯ï¼
ããJVMæ令系ç»
ããJVMå¯åå¨
ããJVMæ ç»æ
ããJVMç¢çåæ¶å
ããJVMåå¨åº
ãã
ãã2.1JVMæ令系ç»
ãã
ããJVMæ令系ç»åå ¶ä»è®¡ç®æºçæ令系ç»æå ¶ç¸ä¼¼ãJavaæ令ä¹æ¯ç± æä½ç åæä½æ°ä¸¤é¨åç»æãæä½ç 为8ä½äºè¿å¶æ°ï¼æä½æ°è¿ç´§éå¨æä½ç çåé¢ï¼å ¶é¿åº¦æ ¹æ®éè¦èä¸åãæä½ç ç¨äºæå®ä¸æ¡æ令æä½çæ§è´¨ï¼å¨è¿éæ们éç¨æ±ç¼ç¬¦å·çå½¢å¼è¿è¡è¯´æï¼ï¼å¦iload表示ä»åå¨å¨ä¸è£ å ¥ä¸ä¸ªæ´æ°ï¼anewarray表示为ä¸ä¸ªæ°æ°ç»åé 空é´ï¼iand表示两个æ´æ°ç"ä¸"ï¼retç¨äºæµç¨æ§å¶ï¼è¡¨ç¤ºä»å¯¹æä¸æ¹æ³çè°ç¨ä¸è¿åãå½é¿åº¦å¤§äº8ä½æ¶ï¼æä½æ°è¢«å为两个以ä¸åèåæ¾ãJVMéç¨äº"big endian"çç¼ç æ¹å¼æ¥å¤çè¿ç§æ åµï¼å³é«ä½bitsåæ¾å¨ä½åèä¸ãè¿å Motorolaåå ¶ä»çRISC CPUéç¨çç¼ç æ¹å¼æ¯ä¸è´çï¼èä¸Inteléç¨ç"little endian "çç¼ç æ¹å¼å³ä½ä½bitsåæ¾å¨ä½ä½åèçæ¹æ³ä¸åã
ãã
ããJavaæ令系ç»æ¯ä»¥Javaè¯è¨çå®ç°ä¸ºç®ç设计çï¼å ¶ä¸å å«äºç¨äºè°ç¨æ¹æ³åçè§å¤å ç¨ç³»ç»çæ令ãJavaç8ä½æä½ç çé¿åº¦ä½¿å¾JVMæå¤æ256ç§æ令ï¼ç®å已使ç¨äº160å¤ç§æä½ç ã
ãã
ãã2.2JVMæ令系ç»
ãã
ããææçCPUåå å«ç¨äºä¿åç³»ç»ç¶æåå¤çå¨æéä¿¡æ¯çå¯åå¨ç»ãå¦æèææºå®ä¹è¾å¤çå¯åå¨ï¼ä¾¿å¯ä»¥ä»ä¸å¾å°æ´å¤çä¿¡æ¯èä¸å¿ 对æ æå åè¿è¡è®¿é®ï¼è¿æå©äºæé«è¿è¡é度ãç¶èï¼å¦æèææºä¸çå¯åå¨æ¯å®é CPUçå¯åå¨å¤ï¼å¨å®ç°èææºæ¶å°±ä¼å ç¨å¤çå¨å¤§éçæ¶é´æ¥ç¨å¸¸è§åå¨å¨æ¨¡æå¯åå¨ï¼è¿åèä¼éä½èææºçæçãé对è¿ç§æ åµï¼JVMåªè®¾ç½®äº4个æ为常ç¨çå¯åå¨ãå®ä»¬æ¯ï¼
ããpcç¨åºè®¡æ°å¨
ããoptopæä½æ°æ 顶æé
ããframeå½åæ§è¡ç¯å¢æé
ããvarsæåå½åæ§è¡ç¯å¢ä¸ç¬¬ä¸ä¸ªå±é¨åéçæé
ããææå¯åå¨å为32ä½ãpcç¨äºè®°å½ç¨åºçæ§è¡ãoptop,frameåvarsç¨äºè®°å½æåJavaæ åºçæéã
ãã
ãã2.3JVMæ ç»æ
ãã
ããä½ä¸ºåºäºæ ç»æç计ç®æºï¼Javaæ æ¯JVMåå¨ä¿¡æ¯ç主è¦æ¹æ³ãå½JVMå¾å°ä¸ä¸ªJavaåèç åºç¨ç¨åºåï¼ä¾¿ä¸ºè¯¥ä»£ç ä¸ä¸ä¸ªç±»çæ¯ä¸ä¸ªæ¹æ³å建ä¸ä¸ªæ æ¡æ¶ï¼ä»¥ä¿å该æ¹æ³çç¶æä¿¡æ¯ãæ¯ä¸ªæ æ¡æ¶å æ¬ä»¥ä¸ä¸ç±»ä¿¡æ¯ï¼
ããå±é¨åé
ããæ§è¡ç¯å¢
ããæä½æ°æ
ãã
ããå±é¨åéç¨äºåå¨ä¸ä¸ªç±»çæ¹æ³ä¸æç¨å°çå±é¨åéãvarså¯åå¨æå该åé表ä¸ç第ä¸ä¸ªå±é¨åéã
ããæ§è¡ç¯å¢ç¨äºä¿å解éå¨å¯¹Javaåèç è¿è¡è§£éè¿ç¨ä¸æéçä¿¡æ¯ãå®ä»¬æ¯ï¼ä¸æ¬¡è°ç¨çæ¹æ³ãå±é¨åéæéåæä½æ°æ çæ 顶åæ åºæéãæ§è¡ç¯å¢æ¯ä¸ä¸ªæ§è¡ä¸ä¸ªæ¹æ³çæ§å¶ä¸å¿ãä¾å¦ï¼å¦æ解éå¨è¦æ§è¡iadd(æ´æ°å æ³)ï¼é¦å è¦ä»frameå¯åå¨ä¸æ¾å°å½åæ§è¡ç¯å¢ï¼èå便ä»æ§è¡ç¯å¢ä¸æ¾å°æä½æ°æ ï¼ä»æ 顶弹åºä¸¤ä¸ªæ´æ°è¿è¡å æ³è¿ç®ï¼æåå°ç»æåå ¥æ 顶ã
ããæä½æ°æ ç¨äºåå¨è¿ç®æéæä½æ°åè¿ç®çç»æã
ãã
ãã2.4JVMç¢çåæ¶å
ãã
ããJavaç±»çå®ä¾æéçåå¨ç©ºé´æ¯å¨å ä¸åé çã解éå¨å ·ä½æ¿æ 为类å®ä¾åé 空é´çå·¥ä½ã解éå¨å¨ä¸ºä¸ä¸ªå®ä¾åé å®åå¨ç©ºé´åï¼ä¾¿å¼å§è®°å½å¯¹è¯¥å®ä¾æå ç¨çå ååºåç使ç¨ãä¸æ¦å¯¹è±¡ä½¿ç¨å®æ¯ï¼ä¾¿å°å ¶åæ¶å°å ä¸ã
ããå¨Javaè¯è¨ä¸ï¼é¤äºnewè¯å¥å¤æ²¡æå ¶ä»æ¹æ³ä¸ºä¸å¯¹è±¡ç³è¯·åéæ¾å åã对å åè¿è¡éæ¾ååæ¶çå·¥ä½æ¯ç±Javaè¿è¡ç³»ç»æ¿æ çãè¿å 许Javaè¿è¡ç³»ç»ç设计è èªå·±å³å®ç¢çåæ¶çæ¹æ³ãå¨SUNå ¬å¸å¼åçJava解éå¨åHot Javaç¯å¢ä¸ï¼ç¢çåæ¶ç¨åå°çº¿ç¨çæ¹å¼æ¥æ§è¡ãè¿ä¸ä½ä¸ºè¿è¡ç³»ç»æä¾äºè¯å¥½çæ§è½ï¼èä¸ä½¿ç¨åºè®¾è®¡äººåæè±äºèªå·±æ§å¶å å使ç¨çé£é©ã
ãã
ãã2.5JVMåå¨åº
ãã
ããJVMæ两类åå¨åºï¼å¸¸éç¼å²æ± åæ¹æ³åºã常éç¼å²æ± ç¨äºåå¨ç±»å称ãæ¹æ³åå段å称以å串常éãæ¹æ³åºåç¨äºåå¨Javaæ¹æ³çåèç ã对äºè¿ä¸¤ç§åå¨åºåå ·ä½å®ç°æ¹å¼å¨JVMè§æ ¼ä¸æ²¡ææç¡®è§å®ãè¿ä½¿å¾Javaåºç¨ç¨åºçåå¨å¸å±å¿ é¡»å¨è¿è¡è¿ç¨ä¸ç¡®å®ï¼ä¾èµäºå ·ä½å¹³å°çå®ç°æ¹å¼ã
ãã
ããJVMæ¯ä¸ºJavaåèç å®ä¹çä¸ç§ç¬ç«äºå ·ä½å¹³å°çè§æ ¼æè¿°ï¼æ¯Javaå¹³å°ç¬ç«æ§çåºç¡ãç®åçJVMè¿åå¨ä¸äºéå¶åä¸è¶³ï¼æå¾ äºè¿ä¸æ¥çå®åï¼ä½æ 论å¦ä½ï¼JVMçææ³æ¯æåçã
ãã
ãã对æ¯åæï¼å¦ææJavaåç¨åºæ³è±¡ææ们çC++åç¨åºï¼Javaåç¨åºç¼è¯åçæçåèç å°±ç¸å½äºC++åç¨åºç¼è¯åç80x86çæºå¨ç ï¼äºè¿å¶ç¨åºæ件ï¼ï¼JVMèææºç¸å½äº80x86计ç®æºç³»ç»,Java解éå¨ç¸å½äº80x86CPUãå¨80x86CPUä¸è¿è¡çæ¯æºå¨ç ï¼å¨Java解éå¨ä¸è¿è¡çæ¯Javaåèç ã
ãã
ããJava解éå¨ç¸å½äºè¿è¡Javaåèç çâCPUâ,ä½è¯¥âCPUâä¸æ¯éè¿ç¡¬ä»¶å®ç°çï¼èæ¯ç¨è½¯ä»¶å®ç°çãJava解éå¨å®é ä¸å°±æ¯ç¹å®çå¹³å°ä¸çä¸ä¸ªåºç¨ç¨åºãåªè¦å®ç°äºç¹å®å¹³å°ä¸ç解éå¨ç¨åºï¼Javaåèç å°±è½éè¿è§£éå¨ç¨åºå¨è¯¥å¹³å°ä¸è¿è¡ï¼è¿æ¯Java跨平å°çæ ¹æ¬ãå½åï¼å¹¶ä¸æ¯å¨ææçå¹³å°ä¸é½æç¸åºJava解éå¨ç¨åºï¼è¿ä¹æ¯Java并ä¸è½å¨ææçå¹³å°ä¸é½è½è¿è¡çåå ï¼å®åªè½å¨å·²å®ç°äºJava解éå¨ç¨åºçå¹³å°ä¸è¿è¡ã
ãã
ããä¸.Javaæºæ件çç¼è¯ãä¸è½½ã解éåæ§è¡
ããJavaåºç¨ç¨åºçå¼åå¨æå æ¬ç¼è¯ãä¸è½½ã解éåæ§è¡å 个é¨åãJavaç¼è¯ç¨åºå°Javaæºç¨åºç¿»è¯ä¸ºJVMå¯æ§è¡ä»£ç ?åèç ãè¿ä¸ç¼è¯è¿ç¨åC/C++çç¼è¯æäºä¸åãå½Cç¼è¯å¨ç¼è¯çæä¸ä¸ªå¯¹è±¡ç代ç æ¶ï¼è¯¥ä»£ç æ¯ä¸ºå¨æä¸ç¹å®ç¡¬ä»¶å¹³å°è¿è¡è产ççãå æ¤ï¼å¨ç¼è¯è¿ç¨ä¸ï¼ç¼è¯ç¨åºéè¿æ¥è¡¨å°ææ对符å·çå¼ç¨è½¬æ¢ä¸ºç¹å®çå åå移éï¼ä»¥ä¿è¯ç¨åºè¿è¡ãJavaç¼è¯å¨å´ä¸å°å¯¹åéåæ¹æ³çå¼ç¨ç¼è¯ä¸ºæ°å¼å¼ç¨ï¼ä¹ä¸ç¡®å®ç¨åºæ§è¡è¿ç¨ä¸çå åå¸å±ï¼èæ¯å°è¿äºç¬¦å·å¼ç¨ä¿¡æ¯ä¿çå¨åèç ä¸ï¼ç±è§£éå¨å¨è¿è¡è¿ç¨ä¸åç«å åå¸å±ï¼ç¶ååéè¿æ¥è¡¨æ¥ç¡®å®ä¸ä¸ªæ¹æ³æå¨çå°åãè¿æ ·å°±ææçä¿è¯äºJavaçå¯ç§»æ¤æ§åå®å ¨æ§ã
ãã
ããè¿è¡JVMåèç çå·¥ä½æ¯ç±è§£éå¨æ¥å®æçã解éæ§è¡è¿ç¨åä¸é¨è¿è¡ï¼ä»£ç çè£ å ¥ã代ç çæ ¡éªå代ç çæ§è¡ãè£ å ¥ä»£ç çå·¥ä½ç±"ç±»è£ è½½å¨"ï¼class loaderï¼å®æãç±»è£ è½½å¨è´è´£è£ å ¥è¿è¡ä¸ä¸ªç¨åºéè¦çææ代ç ï¼è¿ä¹å æ¬ç¨åºä»£ç ä¸çç±»æ继æ¿çç±»åè¢«å ¶è°ç¨çç±»ãå½ç±»è£ è½½å¨è£ å ¥ä¸ä¸ªç±»æ¶ï¼è¯¥ç±»è¢«æ¾å¨èªå·±çåå空é´ä¸ãé¤äºéè¿ç¬¦å·å¼ç¨èªå·±åå空é´ä»¥å¤çç±»ï¼ç±»ä¹é´æ²¡æå ¶ä»åæ³å¯ä»¥å½±åå ¶ä»ç±»ãå¨æ¬å°è®¡ç®æºä¸çææç±»é½å¨åä¸å°å空é´å ï¼èææä»å¤é¨å¼è¿çç±»ï¼é½æä¸ä¸ªèªå·±ç¬ç«çåå空é´ãè¿ä½¿å¾æ¬å°ç±»éè¿å ±äº«ç¸åçåå空é´è·å¾è¾é«çè¿è¡æçï¼åæ¶åä¿è¯å®ä»¬ä¸ä»å¤é¨å¼è¿çç±»ä¸ä¼ç¸äºå½±åãå½è£ å ¥äºè¿è¡ç¨åºéè¦çææç±»åï¼è§£éå¨ä¾¿å¯ç¡®å®æ´ä¸ªå¯æ§è¡ç¨åºçå åå¸å±ã解éå¨ä¸ºç¬¦å·å¼ç¨åç¹å®çå°å空é´å»ºç«å¯¹åºå ³ç³»åæ¥è¯¢è¡¨ãéè¿å¨è¿ä¸é¶æ®µç¡®å®ä»£ç çå åå¸å±ï¼Javaå¾å¥½å°è§£å³äºç±è¶ ç±»æ¹åè使å类崩æºçé®é¢ï¼åæ¶ä¹é²æ¢äºä»£ç 对å°åçéæ³è®¿é®ã
ãã
ããéåï¼è¢«è£ å ¥ç代ç ç±åèç æ ¡éªå¨è¿è¡æ£æ¥ãæ ¡éªå¨å¯åç°æä½æ°æ 溢åºï¼éæ³æ°æ®ç±»å转åçå¤ç§é误ãéè¿æ ¡éªåï¼ä»£ç 便å¼å§æ§è¡äºã
ãã
ããJavaåèç çæ§è¡æ两ç§æ¹å¼ï¼
ãã1.å³æ¶ç¼è¯æ¹å¼ï¼è§£éå¨å å°åèç ç¼è¯ææºå¨ç ï¼ç¶ååæ§è¡è¯¥æºå¨ç ã
ãã2.解éæ§è¡æ¹å¼ï¼è§£éå¨éè¿æ¯æ¬¡è§£é并æ§è¡ä¸å°æ®µä»£ç æ¥å®æJavaåèç ç¨ åºçæææä½ã
ããé常éç¨çæ¯ç¬¬äºç§æ¹æ³ãç±äºJVMè§æ ¼æè¿°å ·æ足å¤ççµæ´»æ§ï¼è¿ä½¿å¾å°åèç ç¿»è¯ä¸ºæºå¨ä»£ç çå·¥ä½
ãã
ããå ·æè¾é«çæçã对äºé£äºå¯¹è¿è¡é度è¦æ±è¾é«çåºç¨ç¨åºï¼è§£éå¨å¯å°Javaåèç å³æ¶ç¼è¯ä¸ºæºå¨ç ï¼ä»èå¾å¥½å°ä¿è¯äºJava代ç çå¯ç§»æ¤æ§åé«æ§è½ã
ãã
ããäº.JVMè§æ ¼æè¿°
ããJVMç设计ç®æ æ¯æä¾ä¸ä¸ªåºäºæ½è±¡è§æ ¼æè¿°ç计ç®æºæ¨¡åï¼ä¸ºè§£éç¨åºå¼å人åæå¾å¥½ççµæ´»æ§ï¼åæ¶ä¹ç¡®ä¿Java代ç å¯å¨ç¬¦å该è§èçä»»ä½ç³»ç»ä¸è¿è¡ãJVMå¯¹å ¶å®ç°çæäºæ¹é¢ç»åºäºå ·ä½çå®ä¹ï¼ç¹å«æ¯å¯¹Javaå¯æ§è¡ä»£ç ï¼å³åèç (Bytecode)çæ ¼å¼ç»åºäºæç¡®çè§æ ¼ãè¿ä¸è§æ ¼å æ¬æä½ç åæä½æ°çè¯æ³åæ°å¼ãæ è¯ç¬¦çæ°å¼è¡¨ç¤ºæ¹å¼ã以åJavaç±»æ件ä¸çJava对象ã常éç¼å²æ± å¨JVMçåå¨æ 象ãè¿äºå®ä¹ä¸ºJVM解éå¨å¼å人åæä¾äºæéçä¿¡æ¯åå¼åç¯å¢ãJavaç设计è å¸æç»å¼å人å以éå¿æ欲使ç¨Javaçèªç±ã
ãã
ããJVMå®ä¹äºæ§å¶Java代ç 解éæ§è¡åå ·ä½å®ç°çäºç§è§æ ¼ï¼å®ä»¬æ¯ï¼
ããJVMæ令系ç»
ããJVMå¯åå¨
ããJVMæ ç»æ
ããJVMç¢çåæ¶å
ããJVMåå¨åº
ãã
ãã2.1JVMæ令系ç»
ãã
ããJVMæ令系ç»åå ¶ä»è®¡ç®æºçæ令系ç»æå ¶ç¸ä¼¼ãJavaæ令ä¹æ¯ç± æä½ç åæä½æ°ä¸¤é¨åç»æãæä½ç 为8ä½äºè¿å¶æ°ï¼æä½æ°è¿ç´§éå¨æä½ç çåé¢ï¼å ¶é¿åº¦æ ¹æ®éè¦èä¸åãæä½ç ç¨äºæå®ä¸æ¡æ令æä½çæ§è´¨ï¼å¨è¿éæ们éç¨æ±ç¼ç¬¦å·çå½¢å¼è¿è¡è¯´æï¼ï¼å¦iload表示ä»åå¨å¨ä¸è£ å ¥ä¸ä¸ªæ´æ°ï¼anewarray表示为ä¸ä¸ªæ°æ°ç»åé 空é´ï¼iand表示两个æ´æ°ç"ä¸"ï¼retç¨äºæµç¨æ§å¶ï¼è¡¨ç¤ºä»å¯¹æä¸æ¹æ³çè°ç¨ä¸è¿åãå½é¿åº¦å¤§äº8ä½æ¶ï¼æä½æ°è¢«å为两个以ä¸åèåæ¾ãJVMéç¨äº"big endian"çç¼ç æ¹å¼æ¥å¤çè¿ç§æ åµï¼å³é«ä½bitsåæ¾å¨ä½åèä¸ãè¿å Motorolaåå ¶ä»çRISC CPUéç¨çç¼ç æ¹å¼æ¯ä¸è´çï¼èä¸Inteléç¨ç"little endian "çç¼ç æ¹å¼å³ä½ä½bitsåæ¾å¨ä½ä½åèçæ¹æ³ä¸åã
ãã
ããJavaæ令系ç»æ¯ä»¥Javaè¯è¨çå®ç°ä¸ºç®ç设计çï¼å ¶ä¸å å«äºç¨äºè°ç¨æ¹æ³åçè§å¤å ç¨ç³»ç»çæ令ãJavaç8ä½æä½ç çé¿åº¦ä½¿å¾JVMæå¤æ256ç§æ令ï¼ç®å已使ç¨äº160å¤ç§æä½ç ã
ãã
ãã2.2JVMæ令系ç»
ãã
ããææçCPUåå å«ç¨äºä¿åç³»ç»ç¶æåå¤çå¨æéä¿¡æ¯çå¯åå¨ç»ãå¦æèææºå®ä¹è¾å¤çå¯åå¨ï¼ä¾¿å¯ä»¥ä»ä¸å¾å°æ´å¤çä¿¡æ¯èä¸å¿ 对æ æå åè¿è¡è®¿é®ï¼è¿æå©äºæé«è¿è¡é度ãç¶èï¼å¦æèææºä¸çå¯åå¨æ¯å®é CPUçå¯åå¨å¤ï¼å¨å®ç°èææºæ¶å°±ä¼å ç¨å¤çå¨å¤§éçæ¶é´æ¥ç¨å¸¸è§åå¨å¨æ¨¡æå¯åå¨ï¼è¿åèä¼éä½èææºçæçãé对è¿ç§æ åµï¼JVMåªè®¾ç½®äº4个æ为常ç¨çå¯åå¨ãå®ä»¬æ¯ï¼
ããpcç¨åºè®¡æ°å¨
ããoptopæä½æ°æ 顶æé
ããframeå½åæ§è¡ç¯å¢æé
ããvarsæåå½åæ§è¡ç¯å¢ä¸ç¬¬ä¸ä¸ªå±é¨åéçæé
ããææå¯åå¨å为32ä½ãpcç¨äºè®°å½ç¨åºçæ§è¡ãoptop,frameåvarsç¨äºè®°å½æåJavaæ åºçæéã
ãã
ãã2.3JVMæ ç»æ
ãã
ããä½ä¸ºåºäºæ ç»æç计ç®æºï¼Javaæ æ¯JVMåå¨ä¿¡æ¯ç主è¦æ¹æ³ãå½JVMå¾å°ä¸ä¸ªJavaåèç åºç¨ç¨åºåï¼ä¾¿ä¸ºè¯¥ä»£ç ä¸ä¸ä¸ªç±»çæ¯ä¸ä¸ªæ¹æ³å建ä¸ä¸ªæ æ¡æ¶ï¼ä»¥ä¿å该æ¹æ³çç¶æä¿¡æ¯ãæ¯ä¸ªæ æ¡æ¶å æ¬ä»¥ä¸ä¸ç±»ä¿¡æ¯ï¼
ããå±é¨åé
ããæ§è¡ç¯å¢
ããæä½æ°æ
ãã
ããå±é¨åéç¨äºåå¨ä¸ä¸ªç±»çæ¹æ³ä¸æç¨å°çå±é¨åéãvarså¯åå¨æå该åé表ä¸ç第ä¸ä¸ªå±é¨åéã
ããæ§è¡ç¯å¢ç¨äºä¿å解éå¨å¯¹Javaåèç è¿è¡è§£éè¿ç¨ä¸æéçä¿¡æ¯ãå®ä»¬æ¯ï¼ä¸æ¬¡è°ç¨çæ¹æ³ãå±é¨åéæéåæä½æ°æ çæ 顶åæ åºæéãæ§è¡ç¯å¢æ¯ä¸ä¸ªæ§è¡ä¸ä¸ªæ¹æ³çæ§å¶ä¸å¿ãä¾å¦ï¼å¦æ解éå¨è¦æ§è¡iadd(æ´æ°å æ³)ï¼é¦å è¦ä»frameå¯åå¨ä¸æ¾å°å½åæ§è¡ç¯å¢ï¼èå便ä»æ§è¡ç¯å¢ä¸æ¾å°æä½æ°æ ï¼ä»æ 顶弹åºä¸¤ä¸ªæ´æ°è¿è¡å æ³è¿ç®ï¼æåå°ç»æåå ¥æ 顶ã
ããæä½æ°æ ç¨äºåå¨è¿ç®æéæä½æ°åè¿ç®çç»æã
ãã
ãã2.4JVMç¢çåæ¶å
ãã
ããJavaç±»çå®ä¾æéçåå¨ç©ºé´æ¯å¨å ä¸åé çã解éå¨å ·ä½æ¿æ 为类å®ä¾åé 空é´çå·¥ä½ã解éå¨å¨ä¸ºä¸ä¸ªå®ä¾åé å®åå¨ç©ºé´åï¼ä¾¿å¼å§è®°å½å¯¹è¯¥å®ä¾æå ç¨çå ååºåç使ç¨ãä¸æ¦å¯¹è±¡ä½¿ç¨å®æ¯ï¼ä¾¿å°å ¶åæ¶å°å ä¸ã
ããå¨Javaè¯è¨ä¸ï¼é¤äºnewè¯å¥å¤æ²¡æå ¶ä»æ¹æ³ä¸ºä¸å¯¹è±¡ç³è¯·åéæ¾å åã对å åè¿è¡éæ¾ååæ¶çå·¥ä½æ¯ç±Javaè¿è¡ç³»ç»æ¿æ çãè¿å 许Javaè¿è¡ç³»ç»ç设计è èªå·±å³å®ç¢çåæ¶çæ¹æ³ãå¨SUNå ¬å¸å¼åçJava解éå¨åHot Javaç¯å¢ä¸ï¼ç¢çåæ¶ç¨åå°çº¿ç¨çæ¹å¼æ¥æ§è¡ãè¿ä¸ä½ä¸ºè¿è¡ç³»ç»æä¾äºè¯å¥½çæ§è½ï¼èä¸ä½¿ç¨åºè®¾è®¡äººåæè±äºèªå·±æ§å¶å å使ç¨çé£é©ã
ãã
ãã2.5JVMåå¨åº
ãã
ããJVMæ两类åå¨åºï¼å¸¸éç¼å²æ± åæ¹æ³åºã常éç¼å²æ± ç¨äºåå¨ç±»å称ãæ¹æ³åå段å称以å串常éãæ¹æ³åºåç¨äºåå¨Javaæ¹æ³çåèç ã对äºè¿ä¸¤ç§åå¨åºåå ·ä½å®ç°æ¹å¼å¨JVMè§æ ¼ä¸æ²¡ææç¡®è§å®ãè¿ä½¿å¾Javaåºç¨ç¨åºçåå¨å¸å±å¿ é¡»å¨è¿è¡è¿ç¨ä¸ç¡®å®ï¼ä¾èµäºå ·ä½å¹³å°çå®ç°æ¹å¼ã
ãã
ããJVMæ¯ä¸ºJavaåèç å®ä¹çä¸ç§ç¬ç«äºå ·ä½å¹³å°çè§æ ¼æè¿°ï¼æ¯Javaå¹³å°ç¬ç«æ§çåºç¡ãç®åçJVMè¿åå¨ä¸äºéå¶åä¸è¶³ï¼æå¾ äºè¿ä¸æ¥çå®åï¼ä½æ 论å¦ä½ï¼JVMçææ³æ¯æåçã
ãã
ãã对æ¯åæï¼å¦ææJavaåç¨åºæ³è±¡ææ们çC++åç¨åºï¼Javaåç¨åºç¼è¯åçæçåèç å°±ç¸å½äºC++åç¨åºç¼è¯åç80x86çæºå¨ç ï¼äºè¿å¶ç¨åºæ件ï¼ï¼JVMèææºç¸å½äº80x86计ç®æºç³»ç»,Java解éå¨ç¸å½äº80x86CPUãå¨80x86CPUä¸è¿è¡çæ¯æºå¨ç ï¼å¨Java解éå¨ä¸è¿è¡çæ¯Javaåèç ã
ãã
ããJava解éå¨ç¸å½äºè¿è¡Javaåèç çâCPUâ,ä½è¯¥âCPUâä¸æ¯éè¿ç¡¬ä»¶å®ç°çï¼èæ¯ç¨è½¯ä»¶å®ç°çãJava解éå¨å®é ä¸å°±æ¯ç¹å®çå¹³å°ä¸çä¸ä¸ªåºç¨ç¨åºãåªè¦å®ç°äºç¹å®å¹³å°ä¸ç解éå¨ç¨åºï¼Javaåèç å°±è½éè¿è§£éå¨ç¨åºå¨è¯¥å¹³å°ä¸è¿è¡ï¼è¿æ¯Java跨平å°çæ ¹æ¬ãå½åï¼å¹¶ä¸æ¯å¨ææçå¹³å°ä¸é½æç¸åºJava解éå¨ç¨åºï¼è¿ä¹æ¯Java并ä¸è½å¨ææçå¹³å°ä¸é½è½è¿è¡çåå ï¼å®åªè½å¨å·²å®ç°äºJava解éå¨ç¨åºçå¹³å°ä¸è¿è¡ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-07-27
java文件被javac命令编译成 .class文件, 然后通过java命令执行, 然后向控制台输出信息比如HelloWorld.java 源代码文件, 通过javac HelloWorld.java 命令, 把源文件解释为可以被计算机执行的 HelloWorld.class 文件用java HelloWorld命令 把HelloWorld.class 文件执行, 在控制台输出结果, 这就是java编译执行的过程.
第2个回答 2013-07-27
应该不是很难吧,就是.java文件被编译成class文件,然后被执行