專利名稱::在動(dòng)態(tài)輸出中減少由動(dòng)態(tài)編譯所引起的可察覺暫停的機(jī)制的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及編譯處理技術(shù),尤其涉及在動(dòng)態(tài)輸出中減少由于動(dòng)態(tài)編譯所引起的可察覺暫停的方法和裝置。
背景技術(shù):
:本部分所描述的方法是可推行的,但不一定是以前被考慮和推行的方法。因此,除非另外說(shuō)明,否則,就不應(yīng)該臆斷,本部分所描述的任何方法由于其內(nèi)容包含于本部分而被認(rèn)為是現(xiàn)有技術(shù)。諸如Sun公司的Java的程序設(shè)計(jì)語(yǔ)言可以讓程序員用一種語(yǔ)言在多種平臺(tái)上相對(duì)容易地開發(fā)應(yīng)用程序,這就導(dǎo)致產(chǎn)品開發(fā)消耗更多資源而不是保證相互可操作性。在一典型的Java實(shí)施中,只要Java應(yīng)用程序是可執(zhí)行的,一個(gè)Java虛擬機(jī)(JVM)的實(shí)例也同時(shí)啟動(dòng)來(lái)支持Java應(yīng)用程序的運(yùn)行。JVM,其可以是原碼(nativecode)(本機(jī)代碼或原始機(jī)器碼)形式,解釋執(zhí)行Java字節(jié)碼。Java字節(jié)碼來(lái)源于Java源代碼,是由人工程序員編寫和理解的。字節(jié)碼起著代碼的中間級(jí)作用。Java程序可以在正執(zhí)行JVM的任何平臺(tái)上運(yùn)行。有時(shí),更希望Java應(yīng)用程序是用原始機(jī)器碼(nativemachinecode)(本機(jī)代碼)形式而不是JVM解釋字節(jié)碼形式來(lái)執(zhí)行的。在這些例子中,字節(jié)碼可以通過編譯器編譯為原始機(jī)器指令碼(本機(jī)代碼),編譯器的典型例子為just-in-time(JIT)。這樣一來(lái),JVM可以更加快了特定應(yīng)用程序的運(yùn)行速度(而不是使用Java解釋器執(zhí)行應(yīng)用程序的Java字節(jié)碼,該應(yīng)用程序直接通過速度更快的處理器執(zhí)行)。JVM包括在某些間隔觸發(fā)將字節(jié)碼向下編譯成為原始機(jī)器碼的采樣機(jī)制。例如,一個(gè)采樣機(jī)制可以被設(shè)置成每隔30毫秒觸發(fā)一次編譯。然而編譯會(huì)消耗用于其他處理的系統(tǒng)資源。于是,為了使編譯的影響最小化,JVM可設(shè)定每次編譯可能只進(jìn)行5毫秒的限制。這種情況特別適用于只夠一次運(yùn)行一個(gè)處理器線程的資源的單個(gè)處理器系統(tǒng)。通過采樣機(jī)制限制編譯時(shí)間,JVM可以分配更多的時(shí)間給處理器線程而保證編譯不增加系統(tǒng)資源的負(fù)擔(dān)。采樣機(jī)制的缺陷之一是編譯的靜態(tài)特性。編譯被設(shè)定在特定時(shí)刻發(fā)生并限制在某一持續(xù)時(shí)間內(nèi)。然而。對(duì)于如性能測(cè)試之類的處理器敏感的程序,就要編譯盡可能多的方法以便最大提高執(zhí)行效率。在這些例子中,除采樣之外,一些虛擬機(jī)還使用“熱方法(hotmethod)”(在某一時(shí)間間隔內(nèi)被頻繁調(diào)用的方法)的動(dòng)態(tài)編譯。熱方法通過跟蹤最近執(zhí)行的方法列表而被編譯,該列表中的每一個(gè)方法都被標(biāo)記,使得該方法被編譯為原始機(jī)器碼來(lái)執(zhí)行而不是解釋執(zhí)行。然而,熱方法的動(dòng)態(tài)編譯的缺陷之一是編譯器快速消耗不成比例數(shù)量的系統(tǒng)資源。若有大量熱方法存在時(shí)就更是如此。這會(huì)對(duì)其他系統(tǒng)功能,如視頻和音頻動(dòng)態(tài)輸出過程,起副作用。例如,若沒有足夠的處理能力,視頻動(dòng)畫幀就不能以必要的頻率刷新,使得動(dòng)畫查看程序察覺到不想要的間斷,暫?;蚝谄痢>C上所述,很明顯,無(wú)論是靜態(tài)采樣方法還是熱方法的動(dòng)態(tài)編譯,單從自身都無(wú)法提供最滿意的效果。因此,就需要用于管理編譯的改進(jìn)機(jī)制。
發(fā)明內(nèi)容根據(jù)本發(fā)明的實(shí)施例,提供了一種在動(dòng)態(tài)輸出中減少由于動(dòng)態(tài)編譯所引起的可察覺暫停的方法。動(dòng)態(tài)輸出被定義為頻繁發(fā)生變化的輸出。動(dòng)態(tài)輸出的例子可能是運(yùn)動(dòng)視頻、動(dòng)畫或音頻。根據(jù)該方法,在具有虛擬機(jī)的系統(tǒng)上運(yùn)行的應(yīng)用程序發(fā)送輸出到用戶接口以便呈現(xiàn)給用戶。無(wú)論何時(shí)應(yīng)用程序發(fā)送這樣的輸出,它都調(diào)用一種方法來(lái)通知虛擬機(jī)這種輸出已經(jīng)發(fā)生。如此輸出已經(jīng)發(fā)生的通知是通過虛擬機(jī)來(lái)傳送給跟蹤輸出頻度(frequencyoftheoutput)的動(dòng)態(tài)輸出監(jiān)視器的。動(dòng)態(tài)輸出監(jiān)視器把輸出的頻度與閾值比較以確定是否為動(dòng)態(tài)輸出,以及確定虛擬機(jī)的編譯是否應(yīng)該被掛起或連續(xù)。如果輸出的頻度超過了該閾值,動(dòng)態(tài)輸出監(jiān)視器就改變?nèi)謩?dòng)態(tài)輸出指示器的值,以通知其他的系統(tǒng)組件掛起編譯。特別地,全局動(dòng)態(tài)輸出指示器用于通知系統(tǒng)中的編譯器是否繼續(xù)標(biāo)識(shí)方法為編譯。當(dāng)系統(tǒng)解釋器收到把方法處理的控制傳送到一個(gè)編譯器的指令時(shí),編譯就發(fā)生了。一旦處理控制被傳送到編譯器,編譯器檢查全局動(dòng)態(tài)輸出指示器以確定動(dòng)態(tài)輸出監(jiān)視器是否已經(jīng)請(qǐng)求掛起編譯。如果是,則編譯器將通過不標(biāo)識(shí)任何方法為編譯來(lái)掛起編譯。如果某一當(dāng)前被解釋方法日志中有“熱方法”則該方法通常被標(biāo)識(shí)為編譯。當(dāng)前被解釋方法是指被Java解釋器剛剛執(zhí)行過的那些方法。如果不標(biāo)識(shí)方法為編譯則那些方法下一次仍然被解釋器處理,解釋器也不把方法處理的控制傳送給編譯器;這樣,編譯就不執(zhí)行。由于編譯沒有執(zhí)行,更多資源就可以用于給用戶的動(dòng)態(tài)輸出。這也就減少了動(dòng)態(tài)輸出中用戶將經(jīng)歷可察覺暫停的可能性。以此方式,本發(fā)明的實(shí)施例允許熱方法被動(dòng)態(tài)編譯。然而,當(dāng)動(dòng)態(tài)輸出發(fā)生時(shí),熱方法的編譯就被掛起以提供需要進(jìn)行動(dòng)態(tài)輸出的處理資源給輸出呈現(xiàn)機(jī)制。通過該方式自動(dòng)控制動(dòng)態(tài)編譯,就有可能獲得熱方法編譯好處而不會(huì)負(fù)面影響系統(tǒng)其他部分的操作。本發(fā)明通過附圖實(shí)例來(lái)圖示說(shuō)明但不限于此,附圖類似的標(biāo)號(hào)表示類似的元素,其中圖1是本發(fā)明實(shí)施例可以在其中執(zhí)行的系統(tǒng)概況;圖2是根據(jù)本發(fā)明的實(shí)施例所顯示的動(dòng)態(tài)輸出監(jiān)視器的操作流程圖;圖3是根據(jù)本發(fā)明的實(shí)施例的解釋器的操作流程圖;圖4是根據(jù)本發(fā)明的實(shí)施例所顯示的編譯器的操作流程圖;圖5A是根據(jù)本發(fā)明實(shí)施例在采樣機(jī)制操作期間的處理線程的框圖;圖5B是根據(jù)本發(fā)明實(shí)施例在熱方法動(dòng)態(tài)編譯操作期間的處理線程的框圖;以及圖6是本發(fā)明實(shí)施例可以在其中執(zhí)行的通用計(jì)算機(jī)系統(tǒng)框圖。具體實(shí)施例方式在下面的描述中,出于解釋的目的,闡述了大量的細(xì)節(jié),以便徹底了解本發(fā)明。然而很清楚,本發(fā)明沒有這些細(xì)節(jié)也是可實(shí)現(xiàn)的。在其他例子中,用框圖形式示出公知結(jié)構(gòu)和裝置以避免對(duì)本發(fā)明不必要的模糊理解。結(jié)構(gòu)概況先看圖1,顯示的是本發(fā)明實(shí)施例在其中執(zhí)行的系統(tǒng)100的框圖,為了方便圖示,本發(fā)明實(shí)施例參考在系統(tǒng)100中JVM101進(jìn)行描述。然而應(yīng)該注意的是,本發(fā)明并不局限于這樣的實(shí)施例,也不必被JVM執(zhí)行。另外,能夠執(zhí)行本文所述處理過程的任何系統(tǒng)都可能用上。系統(tǒng)100的例子可以包括手持計(jì)算裝置,個(gè)人數(shù)字助理,移動(dòng)電話,便攜式計(jì)算機(jī),PC計(jì)算機(jī),或執(zhí)行所述處理過程的其他任一類型的計(jì)算機(jī)系統(tǒng)。如所示出的,JVM101包括解釋器102和編譯器106等等。解釋器102和編譯器106被JVM101用來(lái)處理由系統(tǒng)100上的應(yīng)用程序150調(diào)用的方法。解釋器102通過執(zhí)行字節(jié)碼來(lái)解釋性地執(zhí)行方法。此外,解釋器102使用執(zhí)行日志104來(lái)記錄方法的運(yùn)行過程。在處理方法的過程中,解釋器102還負(fù)責(zé)確定處理控制是否應(yīng)該傳送給編譯器106。編譯器106在被稱為編譯的處理過程中將字節(jié)碼編譯成原碼。在編譯期間,調(diào)用編譯器106以將方法的字節(jié)碼翻譯成被一個(gè)或多個(gè)系統(tǒng)100處理器順序執(zhí)行的原始可執(zhí)行碼(nativeexecutablecode)(本機(jī)代碼)。另外,編譯器106還負(fù)責(zé)多個(gè)其它任務(wù)。例如,根據(jù)一個(gè)實(shí)施例,編譯器106還負(fù)責(zé)確定是否在執(zhí)行日志104中為將來(lái)的編譯標(biāo)識(shí)方法。執(zhí)行日志104包含了解釋器102當(dāng)前所執(zhí)行過的方法的列表,執(zhí)行日志104中所記錄的方法被標(biāo)識(shí)為“熱方法”,該方法在一定間隔內(nèi)被解釋器102特別頻繁地執(zhí)行過。例如,根據(jù)一實(shí)施例,執(zhí)行日志104可能是一個(gè)具有20個(gè)隊(duì)列空間大小的隊(duì)列,而每一個(gè)隊(duì)列空間都代表最近被解釋的方法。同理,執(zhí)行日志104只跟蹤最后20個(gè)被解釋器102執(zhí)行的方法。無(wú)論方法被解釋器102何時(shí)執(zhí)行,該方法都被記錄在執(zhí)行日志104中。后續(xù)附加方法的處理使最起始的方法被推出執(zhí)行日志104。然而,如果最起始的方法在20個(gè)方法之內(nèi)又一次被執(zhí)行,它便重新進(jìn)入執(zhí)行日志104并保留為熱方法。執(zhí)行日志104中的熱方法被編譯器106標(biāo)識(shí)為編譯。例如,只要它從解釋器102得到了處理控制,編譯器106就通常把執(zhí)行日志104中的所有方法都做標(biāo)識(shí)為編譯。然而,為了保持熱方法編譯和用于將動(dòng)態(tài)輸出呈現(xiàn)給用戶(對(duì)用戶進(jìn)行動(dòng)態(tài)輸出)的處理能力之間的平衡而不產(chǎn)生可察覺的暫停,編譯器106還監(jiān)控動(dòng)態(tài)輸出的存在。動(dòng)態(tài)輸出可以是任意類型的輸出,如視頻,動(dòng)畫,音頻或其他類型的頻繁變化的輸出。根據(jù)動(dòng)態(tài)輸出是否正在進(jìn)行,編譯器106可以通過判定不把執(zhí)行日志104中的方法標(biāo)識(shí)為編譯來(lái)動(dòng)態(tài)控制熱方法的編譯。JVM101還包括采樣中斷108,采樣中斷是用于被編譯器106觸發(fā)方法編譯的一種機(jī)制。為了實(shí)現(xiàn)此項(xiàng),在一個(gè)實(shí)施例中,采樣中斷108給方法執(zhí)行中解釋器102所檢查到的全局變量賦值,該全局變量的值是用來(lái)指示采樣觸發(fā)器是否有標(biāo)志。采樣觸發(fā)器讓解釋器102識(shí)別處理線程的控制需要轉(zhuǎn)給編譯器106進(jìn)行編譯。當(dāng)解釋器102正在處理或解釋該方法時(shí),解釋器102根據(jù)所賦給全局變量的值來(lái)確定采樣中斷108是否已經(jīng)標(biāo)志采樣觸發(fā)器。如果采樣觸發(fā)器已經(jīng)有標(biāo)志,則解釋器102將把處理線程的控制轉(zhuǎn)交給編譯器106。類似地,通過標(biāo)識(shí)在執(zhí)行日志104中的方法,編譯器106使得采樣中斷108所用的同一個(gè)全局變量通知解釋器102是否將處理控制傳送給編譯器106。因此,當(dāng)解釋器102再次執(zhí)行被標(biāo)識(shí)的方法時(shí),解釋器102將識(shí)別出采樣觸發(fā)器已經(jīng)被標(biāo)志,從而把處理控制傳送給編譯器106。一旦編譯器106有了處理控制,編譯器106就確定是否標(biāo)識(shí)執(zhí)行日志104中的方法。為了確定是否標(biāo)識(shí)執(zhí)行日志104中的方法,編譯器106首先確定動(dòng)態(tài)輸出是否正在進(jìn)行。為此,JVM101必須通過與應(yīng)用程序150的通信來(lái)識(shí)別動(dòng)態(tài)輸出正在進(jìn)行。應(yīng)用程序150在系統(tǒng)100上運(yùn)行并且調(diào)用由JVM101來(lái)執(zhí)行的方法。在一實(shí)例中,當(dāng)應(yīng)用程序150向用戶接口進(jìn)行諸如多媒體展示期間的顯示和音頻發(fā)生改變等輸出的任何時(shí)刻,應(yīng)用程序150都將調(diào)用一輸出指示器來(lái)通知JVM101有關(guān)于該輸出。例如,假設(shè)應(yīng)用程序150是一個(gè)在系統(tǒng)100上運(yùn)行的圖形游戲應(yīng)用程序。應(yīng)用程序150將會(huì)察覺到,游戲的視覺輸出已發(fā)生一幀接一幀的變化并且調(diào)用輸出指示器,其用來(lái)通知JVM101的組件輸出正在進(jìn)行。在一實(shí)施例中,當(dāng)輸出指示器被調(diào)用時(shí),JVM101使用動(dòng)態(tài)輸出監(jiān)視器110來(lái)處理輸出指示。動(dòng)態(tài)輸出監(jiān)視器110是用來(lái)監(jiān)視應(yīng)用程序150所進(jìn)行的輸出指示器的調(diào)用。例如,當(dāng)應(yīng)用程序150調(diào)用輸出指示器的每一時(shí)刻,動(dòng)態(tài)輸出監(jiān)視器110均使用時(shí)鐘112來(lái)日志記錄該現(xiàn)象的發(fā)生,以便跟蹤來(lái)自應(yīng)用程序150報(bào)告的輸出頻度。如果動(dòng)態(tài)輸出監(jiān)視器110確定輸出頻度已超出了特定的閾值,如每分鐘調(diào)用的某些次數(shù),則動(dòng)態(tài)輸出監(jiān)視器110會(huì)對(duì)全局變量的值進(jìn)行設(shè)置以指示所述正顯示的輸出為動(dòng)態(tài)輸出。動(dòng)態(tài)輸出監(jiān)視器110連續(xù)監(jiān)視所有應(yīng)用程序進(jìn)行的輸出指示器的調(diào)用。如果輸出指示器的調(diào)用降到了所設(shè)閾值之下,動(dòng)態(tài)輸出監(jiān)視器110就可改變?nèi)肿兞恳灾甘舅稣陲@示的輸出不是動(dòng)態(tài)輸出。利用全局變量,編譯器106可以確定是否將執(zhí)行日志104中的方法標(biāo)識(shí)為編譯,從而在進(jìn)行動(dòng)態(tài)輸出過程期間動(dòng)態(tài)地控制方法的編譯。功能概況監(jiān)控動(dòng)態(tài)輸出現(xiàn)在參看圖2,示出了根據(jù)本發(fā)明的實(shí)施例所展示的動(dòng)態(tài)輸出監(jiān)視器110和應(yīng)用程序150操作過程的流程圖。在步驟202,當(dāng)應(yīng)用程序150向系統(tǒng)100的用戶接口發(fā)送輸出時(shí),應(yīng)用程序150也調(diào)用輸出指示器。例如,發(fā)送給用戶接口的輸出可能會(huì)引起顯示屏像素的變化或產(chǎn)生新的一組音頻數(shù)據(jù)。因此,根據(jù)一個(gè)實(shí)施例,響應(yīng)于顯示像素和音頻數(shù)據(jù)的變化,應(yīng)用程序150負(fù)責(zé)調(diào)用輸出指示器來(lái)通知JVM101有關(guān)于輸出。根據(jù)一個(gè)實(shí)施例,輸出指示器可以是一段定制Java類的實(shí)例,用來(lái)指示到JVM101輸出的出現(xiàn)。當(dāng)應(yīng)用程序150調(diào)用輸出指示器時(shí),JVM101把指示器指向動(dòng)態(tài)輸出監(jiān)視器110。因此,在步驟204,動(dòng)態(tài)輸出監(jiān)視器110監(jiān)視輸出指示器的調(diào)用。利用時(shí)鐘112,動(dòng)態(tài)輸出監(jiān)視器110確定出在一定單位時(shí)間段內(nèi)被報(bào)告輸出的頻度。根據(jù)一個(gè)實(shí)施例,動(dòng)態(tài)輸出監(jiān)視器110通過創(chuàng)建一個(gè)表現(xiàn)出在一定單位時(shí)間內(nèi)方法調(diào)用數(shù)量的比率來(lái)動(dòng)態(tài)監(jiān)視輸出指示器調(diào)用。例如,動(dòng)態(tài)輸出監(jiān)視器110可每秒鐘創(chuàng)建一個(gè)比率值以計(jì)算每秒鐘輸出指示器被調(diào)用的次數(shù)。因此,例如,若輸出指示器每秒被調(diào)用四次,則比率的值就報(bào)告為4。利用這個(gè)比率,動(dòng)態(tài)輸出監(jiān)視器110將該比率值與比率閾值比較以確定動(dòng)態(tài)輸出當(dāng)前是否正在進(jìn)行。比率閾值代表的是,編譯應(yīng)被掛起之前每單位時(shí)間內(nèi)所檢測(cè)到的輸出次數(shù)的最大允許值。比率閾值越高,編譯就越有可能被允許出現(xiàn)。類似的,較低的比率閾值保證編譯幾乎不可能引起動(dòng)態(tài)輸出進(jìn)行期間的間斷或暫停。根據(jù)一個(gè)實(shí)施例,比率閾值的值可以被系統(tǒng)100,JVM101,或諸如應(yīng)用程序150的其他任何組件所自動(dòng)設(shè)置和自動(dòng)改變。例如,系統(tǒng)100的任何組件都可以確定,在任意給定的時(shí)間點(diǎn),以提高效能為目的的方法編譯的好處都多于動(dòng)態(tài)輸出中任何間斷或暫停的影響。因此,如果比率閾值的初始值設(shè)置為2,系統(tǒng)100的一個(gè)組件就可以把該值增加到5。在另外的實(shí)施例中,比率閾值也可以被系統(tǒng)100的用戶手工設(shè)置。請(qǐng)注意,雖然動(dòng)態(tài)輸出監(jiān)視器110可以通過比較上述比率和某一比率閾值來(lái)確定動(dòng)態(tài)輸出是否正在進(jìn)行,但本發(fā)明并不局限于這樣一種實(shí)施例,并且動(dòng)態(tài)輸出監(jiān)視器110可以通過跟蹤應(yīng)用程序150對(duì)輸出指示器進(jìn)行調(diào)用的任何其他方法來(lái)確定動(dòng)態(tài)輸出是否正在進(jìn)行。再請(qǐng)看圖2,在步驟206,動(dòng)態(tài)輸出監(jiān)視器110使用上面描述的處理過程來(lái)確定動(dòng)態(tài)輸出是否正在進(jìn)行。做出如此確定后,根據(jù)一實(shí)施例,動(dòng)態(tài)輸出監(jiān)視器110將會(huì)改變?nèi)肿兞康闹?。該變量之所以被定義為“全局”變量是因?yàn)樗杀幌到y(tǒng)100的任何組件或?qū)ο笏L問。全局變量用于把動(dòng)態(tài)輸出的存在通信傳送給系統(tǒng)100上的所有組件或?qū)ο?。該全局變量在后文中稱做“全局動(dòng)態(tài)輸出指示器”。因此,一旦確定了動(dòng)態(tài)輸是否出正在進(jìn)行,動(dòng)態(tài)輸出監(jiān)視器110就在步驟207或步驟208分別將全局動(dòng)態(tài)輸出指示器的值賦為0或者1。如果比率閾值高于輸出指示器調(diào)用的頻度,則在步驟207,將全局動(dòng)態(tài)輸出指示器的值賦為0。在這個(gè)例子中,系統(tǒng)100的其他組件可被配置來(lái)識(shí)別出,如果全局動(dòng)態(tài)輸出指示器的值被賦為0則沒有動(dòng)態(tài)輸出正在進(jìn)行。如果輸出指示器調(diào)用的頻度高于比率閾值,則在步驟208,將全局動(dòng)態(tài)輸出指示器的值賦為1,并且,系統(tǒng)100的其他組件可被配置來(lái)識(shí)別出,全局動(dòng)態(tài)輸出指示器的值為1,這就指示了有動(dòng)態(tài)輸出正在進(jìn)行。因?yàn)閯?dòng)態(tài)輸出監(jiān)視器110動(dòng)態(tài)地將全局動(dòng)態(tài)輸出指示器的值設(shè)置為0或者1,系統(tǒng)100和JVM101的組件就會(huì)不斷隨著動(dòng)態(tài)輸出是否正在進(jìn)行而更新。此外,雖然所描述的全局動(dòng)態(tài)輸出指示器的值可以設(shè)置為0或1,但本發(fā)明并不局限于這一實(shí)施例,全局動(dòng)態(tài)輸出指示器的值可以被設(shè)置為任何值。例如,在其他實(shí)施例中全局動(dòng)態(tài)輸出指示器的值可以被設(shè)置為代表動(dòng)態(tài)輸出頻度的任意數(shù)字值。具體來(lái)說(shuō),值為0可表示當(dāng)前沒有正在進(jìn)行的動(dòng)態(tài)輸出,而值為5可表示當(dāng)前正在進(jìn)行的動(dòng)態(tài)輸出頻度很高。因此,在0和5之間的任意值則表示不同的動(dòng)態(tài)輸出頻度。在一實(shí)施例中,利用全局動(dòng)態(tài)輸出指示器的值,動(dòng)態(tài)編譯可以在動(dòng)態(tài)輸出時(shí)根據(jù)動(dòng)態(tài)輸出的頻度而可變地得到控制。方法的解釋處理當(dāng)動(dòng)態(tài)輸出監(jiān)視器110監(jiān)控動(dòng)態(tài)輸出的時(shí)候,應(yīng)用程序150正在調(diào)用由JVM101執(zhí)行的方法。舉例假設(shè),方法n近來(lái)已被當(dāng)前運(yùn)行在系統(tǒng)100上的應(yīng)用程序150所調(diào)用。參看圖3,示出了根據(jù)本發(fā)明實(shí)施例中所示出的解釋器102的操作流程框圖。當(dāng)方法n被調(diào)用時(shí),JVM101就將該方法傳送給解釋器102以解釋執(zhí)行。在步驟302,解釋器102用字節(jié)碼形式來(lái)解釋執(zhí)行方法n。在解釋執(zhí)行期間或其他任意時(shí)間,在步驟304,方法n的條目就被放置在執(zhí)行日志104中,由于方法n的條目已由執(zhí)行日志104生成,當(dāng)處理控制轉(zhuǎn)向編譯器106時(shí),方法n通常將會(huì)被標(biāo)識(shí)為編譯。正像下面所描述的,編譯器106根據(jù)動(dòng)態(tài)輸出是否正在進(jìn)行而負(fù)責(zé)給執(zhí)行日志104中的任何方法做標(biāo)識(shí)。由于方法n已經(jīng)被標(biāo)識(shí)為編譯,則當(dāng)它下一次解釋執(zhí)行時(shí),解釋器102就把處理控制轉(zhuǎn)向編譯器106,使得方法n用本文所述的處理過程來(lái)被編譯。當(dāng)把方法n放置在執(zhí)行日志104以后,在步驟306,解釋器102確定采樣觸發(fā)器是否已經(jīng)有標(biāo)志,采樣觸發(fā)器用來(lái)指示解釋器102是否應(yīng)該將處理控制移交給編譯器106。在一實(shí)施例中,采樣觸發(fā)器在以下兩種情況被標(biāo)志(1)采樣機(jī)制已經(jīng)被觸發(fā)或(2)已被編譯器106標(biāo)識(shí)為編譯的方法當(dāng)前正在被解釋器102解釋執(zhí)行。兩者的唯一區(qū)別在于,前者的采樣機(jī)制是強(qiáng)制在特定間隔給采樣觸發(fā)器做標(biāo)志的,而后者中的熱方法是根據(jù)編譯器106標(biāo)識(shí)為編譯的方法在任一給定的時(shí)間給采樣觸發(fā)器做標(biāo)志的。根據(jù)一實(shí)施例,為了確定采樣觸發(fā)器是否已被做了標(biāo)志,解釋器102就檢查下文被稱做“全局編譯變量”的另一個(gè)全局變量的值。全局編譯變量通知解釋器102是否把處理控制過程轉(zhuǎn)向編譯器106。如果全局編譯變量值為1,則采樣觸發(fā)器就已經(jīng)被做了標(biāo)志,而且解釋器102將把處理控制過程轉(zhuǎn)向編譯器106。反之,全局編譯變量值保持為0,如果全局編譯變量值為0,則解釋器102解釋執(zhí)行完方法n,并且在步驟310解釋執(zhí)行下一個(gè)被調(diào)用的方法n+1。然而,在步驟306,如果由于編譯變量的值為1而確定采樣觸發(fā)器已經(jīng)被做了標(biāo)志,則在步驟307,解釋器102就把處理控制轉(zhuǎn)向編譯器106。方法的動(dòng)態(tài)編譯根據(jù)一實(shí)施例,系統(tǒng)100是一套單處理線程系統(tǒng),即系統(tǒng)100中的組件在其沒有獲得處理控制時(shí)就不會(huì)執(zhí)行任何動(dòng)作。因此,如前面描述,編譯器106在其沒有收到解釋器102的處理控制時(shí)也不會(huì)執(zhí)行任何動(dòng)作。當(dāng)編譯器106接收到處理控制時(shí),它就在把處理控制返回解釋器102之前執(zhí)行本文所述的一些操作。參看圖4,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例中所示出的編譯器106操作流程演示框圖。當(dāng)編譯器106在操作時(shí),即在獲得處理控制的時(shí)候,在步驟402,所述編譯器就檢查曾被上述動(dòng)態(tài)輸出監(jiān)視器110所設(shè)置的全局動(dòng)態(tài)輸出變量的值。于是,根據(jù)一實(shí)施例,在步驟404,編譯器106通過檢查被JVM101設(shè)置的全局介質(zhì)變量的值來(lái)確定正被顯示的輸出是否為動(dòng)態(tài)輸出。例如,假若全局動(dòng)態(tài)輸出變量被賦值為0,編譯器106就會(huì)確定動(dòng)態(tài)輸出當(dāng)前沒有進(jìn)行,而在步驟406,如同編譯器106執(zhí)行正常操作時(shí)所做的那樣,繼續(xù)給執(zhí)行日志104中的每個(gè)方法都標(biāo)識(shí)為編譯。根據(jù)一實(shí)施例,當(dāng)方法被再次調(diào)用時(shí),對(duì)執(zhí)行日志104中的方法進(jìn)行標(biāo)識(shí)會(huì)導(dǎo)致采樣觸發(fā)器被標(biāo)志。在一個(gè)實(shí)施例中,這是通過把代表變量聲明的一條或多條指令插入到正被調(diào)用的方法的實(shí)例之中來(lái)實(shí)現(xiàn)的。當(dāng)方法下一次被JVM101調(diào)用時(shí),所述變量聲明就會(huì)引起特定變量的值發(fā)生改變。例如,在一實(shí)施例中,假如方法n被標(biāo)識(shí)為編譯,編譯器106就會(huì)發(fā)出變量聲明指令,以在方法n下次被調(diào)用時(shí)將全局編譯變量的值設(shè)置為1。于是,當(dāng)解釋器102在執(zhí)行方法n時(shí),根據(jù)圖3描述的處理過程,由于全局編譯變量的值已經(jīng)設(shè)置為1(見圖3的步驟306),所以解釋器102就確定采樣觸發(fā)器已經(jīng)被標(biāo)志。作為響應(yīng),解釋器102就將處理控制傳送給編譯器106。這也使編譯器開始編譯方法n。然而,如果動(dòng)態(tài)輸出正在進(jìn)行,編譯器106就將不會(huì)對(duì)執(zhí)行日志104中的任何方法做標(biāo)識(shí),以使得在這些方法執(zhí)行期間,處理控制不傳送回編譯器106。請(qǐng)往回看步驟404,如果由于全局動(dòng)態(tài)變量指示器已經(jīng)被設(shè)置為1,編譯器106確定動(dòng)態(tài)輸出正在進(jìn)行,則編譯器106會(huì)跳過步驟406而直接處理步驟408。因此,當(dāng)確定動(dòng)態(tài)輸出正在進(jìn)行時(shí),編譯器106就不會(huì)對(duì)執(zhí)行日志104中的任何方法做標(biāo)識(shí),這意味著當(dāng)這些方法被調(diào)用時(shí),全局編譯變量的值不會(huì)被設(shè)置為1。當(dāng)解釋器102處理這些方法時(shí),它就將確定該編譯觸發(fā)器沒有被標(biāo)志。在步驟408,編譯器106通過把方法n的字節(jié)碼指令翻譯成系統(tǒng)100的一個(gè)或多個(gè)處理器可以本機(jī)執(zhí)行的原碼來(lái)編譯方法n。另外,除了編譯當(dāng)前的方法n外,編譯器106還可以恢復(fù)對(duì)以前方法的編譯。例如,根據(jù)一實(shí)施例,JVM101把編譯允許出現(xiàn)的時(shí)間單位限制為5毫秒。假設(shè)最長(zhǎng)的編譯時(shí)間是5毫秒。如果編譯器106以前在編譯方法n-1且在5毫秒內(nèi)沒有完成該項(xiàng)編譯,編譯器106就會(huì)給方法n-1的編譯過程做出標(biāo)記,并將處理控制返回解釋器102。然而,當(dāng)編譯器106再次獲得處理控制時(shí),它就可以在其編譯掛起點(diǎn)上恢復(fù)方法n-1的編譯。根據(jù)一實(shí)施例,編譯部分編譯完成的方法的優(yōu)先級(jí)高于那些還沒有開始編譯的方法。因此,即便編譯器在執(zhí)行方法n期間獲得了處理線程的控制,方法n-1也要首先進(jìn)行編譯,而編譯器106將方法n排在下一個(gè)待編譯的隊(duì)列位置。另外,如果方法n-1已經(jīng)被全部編譯完成,則編譯器106使得現(xiàn)以原碼的形式出現(xiàn)的方法n-1在該方法下次被JVM101調(diào)用時(shí)執(zhí)行,并繼續(xù)編譯新方法或者那些已被部分編譯的方法。在步驟410,編譯器106將全局編譯變量復(fù)位為0。編譯器106給全局編譯變量復(fù)位是為了確保解釋器102只有根據(jù)采樣機(jī)制的要求或由于某些方法n已經(jīng)被標(biāo)識(shí)為編譯時(shí),才把控制傳送給編譯器106。因此,由于全局編譯變量被復(fù)位為0,解釋器102在下一個(gè)方法n+1執(zhí)行之前不再傳送處理控制給編譯器106,除非(1)采樣觸發(fā)器已被標(biāo)志,或(2)方法n+1已被編譯器106標(biāo)識(shí)為編譯,從而使全局編譯變量再次被賦值為1。此外,根據(jù)一實(shí)施例,當(dāng)編譯時(shí)間達(dá)到了JVM101所設(shè)置的最大時(shí)間限制時(shí),編譯器106就把全局編譯變量復(fù)位為0。例如,編譯可以被限制為最長(zhǎng)時(shí)間為5毫秒。因此,如果自從獲得了處理控制而使時(shí)間過了5毫秒,編譯器106就將執(zhí)行步驟410,將編譯變量復(fù)位為0,并且,在步驟412把處理控制返回到解釋器102。貫穿圖2-4所描述的處理過程,在JVM101和系統(tǒng)100的任何應(yīng)用程序150的操作期間是連續(xù)運(yùn)行的。利用全局動(dòng)態(tài)輸出指示器,根據(jù)被應(yīng)用程序150所正在處理的動(dòng)態(tài)輸出的數(shù)量,使編譯被動(dòng)態(tài)地禁止。這樣一種處理過程的結(jié)果進(jìn)一步在圖5和圖6中示出。參看圖5A,示出了根據(jù)實(shí)施例所示出的在采樣機(jī)制工作期間的處理線程流程圖。圖5顯示的是采樣機(jī)制操作期間遵循處理時(shí)間線的處理線程500A。根據(jù)實(shí)施例,采樣機(jī)制被配置為以設(shè)定的間隔如30毫秒(ms)來(lái)觸發(fā)方法的編譯。因此,每30毫秒,解釋器102就將處理線程500A的控制傳送給編譯器106。然而,采樣機(jī)制還要被配置來(lái)限制編譯量以節(jié)省系統(tǒng)資源。因此,在一實(shí)施例中,編譯的時(shí)間限制為5毫秒。以這樣的方式,當(dāng)?shù)?0毫秒時(shí)控制傳送給編譯器106,編譯執(zhí)行到第35毫秒為止。在這一點(diǎn),編譯被掛起,而線程500A的控制就被返回到解釋器102。圖5B是根據(jù)一實(shí)施例所示出的在采樣機(jī)制和熱方法的動(dòng)態(tài)編譯同時(shí)工作時(shí)的處理線程流程圖。在圖5B中,處理線程500B是熱方法編譯時(shí)的處理線程。類似于線程500A,編譯根據(jù)采樣機(jī)制的方式,在30毫秒和35毫秒之間發(fā)生。然而,與線程500A不同的是,編譯在35毫秒到60毫秒之間并不被掛起,這是因?yàn)檫@段時(shí)間編譯器106可以觸發(fā)熱方法的編譯。例如,在線程500B上,A部分和B部分表示方法在執(zhí)行日志104中被標(biāo)識(shí)為編譯。此外,根據(jù)一實(shí)施例,由于沒有給熱方法的動(dòng)態(tài)編譯設(shè)置時(shí)間,所以,在執(zhí)行日志中有標(biāo)識(shí)的方法的編譯會(huì)在線程500B中占用很長(zhǎng)時(shí)間單位。如A,B,C,和D等部分所占用在60毫秒到90毫秒之間時(shí)間單位的一大部分。由于大量時(shí)間消耗在編譯線程500B方法上,因此,更多系統(tǒng)資源用在了編譯上并可影響到動(dòng)態(tài)輸出特性。由于沒有足夠的系統(tǒng)資源用于動(dòng)態(tài)輸出,用戶就可能察覺到動(dòng)態(tài)輸出過程的暫?;蜷g斷。然而,上面描述的減少動(dòng)態(tài)編譯期間可察覺暫停的方法,可以讓編譯器106有選擇地在執(zhí)行日志104標(biāo)識(shí)方法。例如,若編譯器106不在執(zhí)行日志104中標(biāo)識(shí)任何方法,則由于處理控制從來(lái)不能如上所述地傳送給編譯器106,從而使編譯在35毫秒到60毫秒之間不會(huì)發(fā)生。反而卻非常類似于500A,編譯被限制在了30毫秒到35毫秒之間的采樣機(jī)制。用此方式,本發(fā)明允許對(duì)在以處理線程500A和處理線程500B為特征的情形之間進(jìn)行控制。根據(jù)動(dòng)態(tài)輸出是否正在進(jìn)行的情形,編譯器106就可動(dòng)態(tài)地控制方法的編譯,以便于減少可察覺的暫停。硬件概況圖6示出本發(fā)明一個(gè)實(shí)施例在其中可執(zhí)行的計(jì)算機(jī)系統(tǒng)600的框圖。計(jì)算機(jī)系統(tǒng)600包括用于信息交換的總線602,以及由總線602連接的用于處理信息的一個(gè)或多個(gè)處理器604。計(jì)算機(jī)系統(tǒng)600還包括主存儲(chǔ)器606,諸如隨機(jī)訪問存儲(chǔ)器(RAM)和其他動(dòng)態(tài)存儲(chǔ)裝置,它們由總線602連接用于存儲(chǔ)信息和將被處理器604執(zhí)行的指令。主存儲(chǔ)器606還可以用于存儲(chǔ)處理器604指令執(zhí)行期間的臨時(shí)變量和其它中間信息。計(jì)算機(jī)系統(tǒng)600還可以包括只讀存儲(chǔ)器(ROM)608或其它靜態(tài)存儲(chǔ)裝置,它們由總線602連接用于存儲(chǔ)靜態(tài)信息和被處理器604執(zhí)行的指令。外圍存儲(chǔ)裝置610,如磁盤或光盤,也被提供并連接在總線602以用于存儲(chǔ)信息和指令。計(jì)算機(jī)系統(tǒng)600可經(jīng)由總線602連接到用于將信息顯示給計(jì)算機(jī)用戶的顯示器612。包括字母數(shù)字和其他鍵的輸入裝置614連接到總線602,以用于將信息和命令選擇傳輸?shù)教幚砥?04。另一種用戶輸入裝置是諸如鼠標(biāo)、跟蹤球或光標(biāo)方向鍵的光標(biāo)控制器616,其用于將方向信息和命令選擇傳輸?shù)教幚砥?04,并用于控制在顯示器612上的光標(biāo)移動(dòng)。該輸入裝置通常具有在第一軸(例如x)和第二軸(例如y)這兩個(gè)軸上的兩個(gè)自由度,這就允許所述裝置在一個(gè)平面內(nèi)指定位置。在計(jì)算機(jī)系統(tǒng)600中,總線602可以是允許信息、信號(hào)、數(shù)據(jù)等在各種組件之間交換的任何機(jī)制和/或介質(zhì)。例如,總線602可以是一組攜帶電信號(hào)的導(dǎo)線。總線602也可以是在一個(gè)或更多的組件之間傳送無(wú)線信號(hào)的無(wú)線介質(zhì)(例如空氣)。總線602還可以是連接一個(gè)或多個(gè)組件的網(wǎng)絡(luò)連接。使信息、信號(hào)、數(shù)據(jù)等能夠在各種組件之間交換的任何機(jī)制和/或介質(zhì)都可以用作總線602??偩€602還可以是這些機(jī)構(gòu)/介質(zhì)的組合。例如,處理器604可以和存儲(chǔ)裝置610進(jìn)行無(wú)線通信。在這種情況下,從處理器604和存儲(chǔ)裝置610的立場(chǎng)來(lái)看,總線602將會(huì)是諸如空氣的無(wú)線介質(zhì)。再者,處理器604可以和ROM608進(jìn)行電容性地通信。進(jìn)一步來(lái)說(shuō),處理器604可以經(jīng)由網(wǎng)絡(luò)連接和主存儲(chǔ)器606進(jìn)行通信。在這種情況下,總線602將會(huì)是網(wǎng)絡(luò)連接。再進(jìn)一步說(shuō),處理器604可以經(jīng)由一組導(dǎo)線和顯示器612進(jìn)行通信。在這個(gè)例子中,總線602將會(huì)是這一組導(dǎo)線。因此,取決于所述各種組件如何互相通信,總線602就可以采取不同的形式。如圖6中所顯示的總線602在功能上代表能夠使信息、信號(hào)、數(shù)據(jù)等在各種組件之間交換的全部機(jī)構(gòu)和/或所有介質(zhì)。本發(fā)明涉及用于執(zhí)行本文所述技術(shù)的計(jì)算機(jī)系統(tǒng)600的使用。根據(jù)本發(fā)明的一個(gè)實(shí)施例,通過計(jì)算機(jī)系統(tǒng)600來(lái)執(zhí)行這些技術(shù),以響應(yīng)于執(zhí)行含在主存儲(chǔ)器606中的一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列處理器604。這種指令可以從諸如存儲(chǔ)裝置610的另一個(gè)機(jī)器可讀的介質(zhì)讀入主存儲(chǔ)器606。執(zhí)行含在主存儲(chǔ)器606中的指令序列以使得處理器604執(zhí)行本文描述的處理步驟。在其它實(shí)施例中,可以用硬連線電路代替軟件指令或?qū)⒂策B線電路與軟件指令相結(jié)合以實(shí)施本發(fā)明。因此,本發(fā)明的實(shí)施例并不限于硬件電路和軟件的任何具體組合。本文使用的術(shù)語(yǔ)“機(jī)器可讀介質(zhì)”指的是參與提供使機(jī)器以具體方式運(yùn)轉(zhuǎn)的數(shù)據(jù)的任何介質(zhì)。在使用計(jì)算機(jī)系統(tǒng)600而實(shí)施的一個(gè)實(shí)施例中,例如,各種機(jī)器可讀的介質(zhì)參與將指令提供給處理器604以用于執(zhí)行。這種介質(zhì)可以采用多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。舉例來(lái)說(shuō),非易失性介質(zhì)包括諸如存儲(chǔ)裝置610的光盤或磁盤。易失性介質(zhì)包括諸如主存儲(chǔ)器606的動(dòng)態(tài)存儲(chǔ)器。傳輸介質(zhì)包括同軸線纜、銅線和光纖,還有其它構(gòu)成總線602的導(dǎo)線。傳輸介質(zhì)也可以采用聲波或光波的形式,諸如在無(wú)線電波和紅外數(shù)據(jù)通信中生成的那些波。機(jī)器可讀介質(zhì)的通常形式包括例如,軟盤、移動(dòng)盤、硬盤、磁帶或其他磁性介質(zhì)、CD-ROM、DVD或任何其他光存儲(chǔ)介質(zhì)、穿孔卡、紙帶、任何其他具有孔狀式樣的物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、任何其他存儲(chǔ)芯片或盒式磁帶、下文中描述的載波,或計(jì)算機(jī)能從中讀取的任何其他介質(zhì)。各種形式的機(jī)器可讀介質(zhì)可參與將一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列傳送到理器604來(lái)執(zhí)行。例如,指令可最初承載在遠(yuǎn)程計(jì)算機(jī)的磁盤上。該遠(yuǎn)程計(jì)算機(jī)能夠?qū)⑺鲋噶钛b載進(jìn)其動(dòng)態(tài)存儲(chǔ)器并使用調(diào)制解調(diào)器通過電話線發(fā)送這些指令。計(jì)算機(jī)系統(tǒng)600的本地調(diào)制解調(diào)器能夠接收電話線上的數(shù)據(jù)并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換為紅外信號(hào)。紅外探測(cè)器能夠接收紅外信號(hào)中攜帶的數(shù)據(jù)并且適當(dāng)?shù)碾娐纺軌驅(qū)?shù)據(jù)放到總線602上??偩€602將數(shù)據(jù)傳送到主存儲(chǔ)器606,處理器604從主存貯器606中取得數(shù)據(jù)并執(zhí)行指令。由主存儲(chǔ)器606所接收的指令可以在處理器604執(zhí)行之前或之后,可選地存儲(chǔ)在存儲(chǔ)裝置610上。計(jì)算機(jī)系統(tǒng)600還包括連接到總線602的通信接口618。連接到與本地網(wǎng)622相連的網(wǎng)絡(luò)鏈路620的通信接口618提供雙路數(shù)據(jù)通信。例如,通信接口618可以是綜合服務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡或調(diào)制解調(diào)器,用于提供到相應(yīng)類型的電話線的數(shù)據(jù)通信連接。作為另一個(gè)實(shí)例,通信接口618可以是局域網(wǎng)(LAN)卡,用于提供到兼容的LAN的數(shù)據(jù)通信連接。也可以實(shí)現(xiàn)無(wú)線鏈路。在任何這樣的實(shí)施中,通信接口618都發(fā)送和接收帶有表示各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電信號(hào)、電磁信號(hào)或光信號(hào)。傳統(tǒng)上,網(wǎng)絡(luò)鏈路620通過一個(gè)或多個(gè)網(wǎng)絡(luò)向其他數(shù)據(jù)裝置提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路620可以通過本地網(wǎng)622提供到主機(jī)624或到由互聯(lián)網(wǎng)服務(wù)商(ISP)626所操作的數(shù)據(jù)設(shè)備的連接。ISP626又通過現(xiàn)在通常稱作“互聯(lián)網(wǎng)”628的全球分組數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)622和互聯(lián)網(wǎng)628都使用攜帶數(shù)字?jǐn)?shù)據(jù)流的電信號(hào)、電磁信號(hào)或光信號(hào)。將數(shù)字?jǐn)?shù)據(jù)傳送到計(jì)算機(jī)系統(tǒng)600和從計(jì)算機(jī)系統(tǒng)600傳送數(shù)字?jǐn)?shù)據(jù)的信號(hào),即,通過各種網(wǎng)絡(luò)的信號(hào)、在網(wǎng)路鏈路620上的信號(hào)和通過通信接口618的信號(hào),是傳輸信息的載波的示例性形式。計(jì)算機(jī)系統(tǒng)600能夠通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路620和通信接口618發(fā)送消息和接收數(shù)據(jù)(包括程序代碼)。在互聯(lián)網(wǎng)實(shí)例中,服務(wù)器630可通過互聯(lián)網(wǎng)628、ISP626、本地網(wǎng)622和通信接口618傳輸被請(qǐng)求的應(yīng)用程序代碼。當(dāng)代碼被接收到時(shí),所接收的代碼就可以由處理器604執(zhí)行并存儲(chǔ)在存儲(chǔ)裝置610或其他非易失性存儲(chǔ)裝置中以用于以后執(zhí)行。這樣,計(jì)算機(jī)系統(tǒng)600可獲得載波形式的應(yīng)用程序代碼。在這點(diǎn)上,應(yīng)該注意到,盡管已經(jīng)參考具體實(shí)施例描述了本發(fā)明,但是不應(yīng)解釋為本發(fā)明受到這樣的限制。在不脫離本發(fā)明精神的情況下,得益于本說(shuō)明書的本領(lǐng)域普通技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種修改。因此,本發(fā)明不應(yīng)被用于示出本發(fā)明的具體實(shí)施例所限制,而僅由公布的權(quán)利要求及其等同物所限定。權(quán)利要求1.一種機(jī)器執(zhí)行方法,包括確定動(dòng)態(tài)輸出是否正在被呈現(xiàn)給用戶;以及響應(yīng)于確定動(dòng)態(tài)輸出正被呈現(xiàn)給用戶,使一組或多組指令不被編譯,從而使所述一組或多組指令被解釋執(zhí)行。2.根據(jù)權(quán)利要求1所述的機(jī)器執(zhí)行方法,其中的確定包括接收表明正在被呈現(xiàn)給用戶的輸出的一個(gè)或多個(gè)指示;以及至少部分基于所述一個(gè)或多個(gè)指示,確定所述正在被呈現(xiàn)的輸出是否為動(dòng)態(tài)輸出。3.根據(jù)權(quán)利要求2所述的機(jī)器執(zhí)行方法,其中,確定所述輸出是否為動(dòng)態(tài)輸出包括確定所述一個(gè)或多個(gè)指示正在被接收的頻度。4.根據(jù)權(quán)利要求1所述的機(jī)器執(zhí)行方法,其中,動(dòng)態(tài)輸出是指包括運(yùn)動(dòng)視頻和音頻那一組中的一個(gè)。5.根據(jù)權(quán)利要求1所述的機(jī)器執(zhí)行方法,其中,使一組或多組指令不被編譯包括使計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯,其中,標(biāo)識(shí)所述一組或多組指令使得所述計(jì)算機(jī)系統(tǒng)下一次處理這些指令時(shí)對(duì)其進(jìn)行編譯。6.根據(jù)權(quán)利要求5所述的機(jī)器執(zhí)行方法,其中,編譯使得所述一組或多組指令從第一種格式轉(zhuǎn)換為第二種格式,其中,所述第二種格式被用于本機(jī)執(zhí)行所述一組或多組指令。7.根據(jù)權(quán)利要求5所述的機(jī)器執(zhí)行方法,其中,所述一組或多組指令是列在執(zhí)行日志中最近被執(zhí)行的指令組,以及其中,使所述計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯包括使所述計(jì)算機(jī)系統(tǒng)停止標(biāo)識(shí)在所述執(zhí)行日志中的任一指令組。8.一種機(jī)器可讀介質(zhì),包括一組或多組指令,當(dāng)其被一個(gè)或多個(gè)處理器執(zhí)行時(shí),使所述一個(gè)或多個(gè)處理器執(zhí)行如下操作確定動(dòng)態(tài)輸出是否正在對(duì)用戶進(jìn)行;以及響應(yīng)于確定動(dòng)態(tài)輸出正在對(duì)用戶進(jìn)行,使一組或多組指令不被編譯,從而使所述一組或多組指令被解釋執(zhí)行。9.根據(jù)權(quán)利要求8所述的機(jī)器可讀介質(zhì),其中的確定包括接收表明正在對(duì)用戶進(jìn)行的輸出的一個(gè)或多個(gè)指示;以及至少部分基于所述一個(gè)或多個(gè)指示,確定所述正在進(jìn)行的輸出是否為動(dòng)態(tài)輸出。10.根據(jù)權(quán)利要求9所述的機(jī)器可讀介質(zhì),其中,確定輸出是否為動(dòng)態(tài)輸出包括確定所述一個(gè)或多個(gè)指示正在被接收的頻度。11.根據(jù)權(quán)利要求8所述的機(jī)器可讀介質(zhì),其中,使一組或多組指令不被編譯包括使計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯,其中,標(biāo)識(shí)所述一組或多組指令使得所述計(jì)算機(jī)系統(tǒng)在下一次處理這些指令時(shí)對(duì)其進(jìn)行編譯。12.根據(jù)權(quán)利要求11所述的機(jī)器可讀介質(zhì),其中,編譯導(dǎo)致所述一組或多組指令從第一種格式轉(zhuǎn)換為第二種格式,其中,所述第二種格式被用于本機(jī)執(zhí)行所述一組或多組指令。13.根據(jù)權(quán)利要求11所述的機(jī)器可讀介質(zhì),其中,所述一組或多組指令是列在執(zhí)行日志中最近被執(zhí)行的指令組,以及其中,使所述計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯包括使所述計(jì)算機(jī)系統(tǒng)停止標(biāo)識(shí)在所述執(zhí)行日志中的任一指令組。14.一種裝置,包括永久存儲(chǔ)器;一個(gè)或多個(gè)處理器;和一組指令,當(dāng)其被一個(gè)或多個(gè)處理器執(zhí)行時(shí),使所述一個(gè)或多個(gè)處理器執(zhí)行如下操作確定動(dòng)態(tài)輸出是否正在被呈現(xiàn)給用戶;以及響應(yīng)于確定動(dòng)態(tài)輸出正在被呈現(xiàn)給用戶,使一組或多組指令不被編譯,從而使所述一組或多組指令被解釋執(zhí)行。15.根據(jù)權(quán)利要求14所述的裝置,其中的確定包括接收表明正在被呈現(xiàn)給用戶的輸出的一個(gè)或多個(gè)指示;以及至少部分基于所述一個(gè)或多個(gè)指示,確定所述正在被呈現(xiàn)的輸出是否為動(dòng)態(tài)輸出。16.根據(jù)權(quán)利要求15所述的裝置,其中,確定輸出是否為動(dòng)態(tài)輸出包括確定所述一個(gè)或多個(gè)指示正在被接收的頻度。17.根據(jù)權(quán)利要求14所述的裝置,其中,動(dòng)態(tài)輸出是包括了運(yùn)動(dòng)視頻和音頻那一組中的一個(gè)。18.根據(jù)權(quán)利要求14所述的裝置,其中,使一組或多組指令不被編譯包括使計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯,其中,標(biāo)識(shí)所述一組或多組指令使得所述計(jì)算機(jī)系統(tǒng)在下一次處理這些指令時(shí)對(duì)其進(jìn)行編譯。19.根據(jù)權(quán)利要求18所述的裝置,其中,編譯使得所述一組或多組指令從第一種格式轉(zhuǎn)換為第二種格式,其中,所述第二種格式被用于本機(jī)執(zhí)行所述一組或多組指令。20.根據(jù)權(quán)利要求18所述的裝置,其中,所述一組或多組指令是列在執(zhí)行日志中最近被執(zhí)行的指令組,以及其中,使所述計(jì)算機(jī)系統(tǒng)停止將一組或多組指令標(biāo)識(shí)為編譯包括使所述計(jì)算機(jī)系統(tǒng)停止標(biāo)識(shí)在所述執(zhí)行日志中的任一指令組。全文摘要本發(fā)明公開了一種用于減少動(dòng)態(tài)編譯期間的動(dòng)態(tài)暫停的方法。運(yùn)行在系統(tǒng)上的應(yīng)用程序檢測(cè)對(duì)用戶進(jìn)行的動(dòng)態(tài)輸出。動(dòng)態(tài)輸出表示了應(yīng)用程序運(yùn)行時(shí)視頻或音頻數(shù)據(jù)的變化。當(dāng)應(yīng)用程序檢測(cè)到這樣的輸出,就會(huì)通知監(jiān)視動(dòng)態(tài)輸出的頻度的系統(tǒng)。如果動(dòng)態(tài)輸出的頻度超過了閾值,該系統(tǒng)就通知系統(tǒng)的編譯器掛起編譯。通常,當(dāng)系統(tǒng)的解釋器接受指令而把處理控制傳送給編譯器時(shí),編譯才進(jìn)行。編譯進(jìn)行的一種方式就是目前正在由解釋器處理的方法已被標(biāo)識(shí)為編譯。因此,為了掛起編譯,編譯器就停止把方法標(biāo)識(shí)為編譯,以使得解釋器就不會(huì)收到把處理控制傳送給編譯器的指令。文檔編號(hào)G06F9/45GK101046754SQ20071008954公開日2007年10月3日申請(qǐng)日期2007年3月29日優(yōu)先權(quán)日2006年3月30日發(fā)明者洛伊·K·拉姆,奧列格·A·普利斯申請(qǐng)人:太陽(yáng)微系統(tǒng)有限公司