新四季網

暫停期間進行字節代碼優化的方法和裝置的製作方法

2023-04-30 14:46:26 2

專利名稱:暫停期間進行字節代碼優化的方法和裝置的製作方法
技術領域:
本發明一般涉及優化軟體應用程式執行的方法和裝置。更具體來說,本發明涉及在總體電腦程式執行的暫停期間為優化計算機系統資源的使用而執行編譯或其它活動的方法和裝置。
計算機系統經常通過計算機系統網絡(例如區域網、內連網和網際網路)連接起來以便能夠共享諸如軟體應用程式之類的資源。一般來說,軟體應用程式或電腦程式可能要以不同的格式傳遞給不同的計算機系統,因為每種計算機系統一般都要求軟體應用程式有特定的格式。另外,也可以將電腦程式以與機器無關的格式(即按字節代碼)傳遞給計算機系統,以便使一種格式的電腦程式能被許多不同種計算機系統使用。
如果電腦程式是以與機器無關的格式傳遞的,則可以直接解釋該程序,或者,也可以將程序翻譯成與機器有關的代碼,即「機器代碼」。直接解釋的程序比翻譯成機器代碼的程序佔用更少的計算機系統空間。然而在多數情況下,直接解釋的程序比翻譯成機器代碼的程序的執行速度慢。因此,決定直接解釋電腦程式還是將電腦程式翻譯成機器代碼,經常是根據存儲空間與執行速度之間的相對重要性。
一種編譯的法是,當在實際正在執行的程序內部的子程序(method)被初始調用執行時,編譯該子程序。這種方法通常被稱為「運行時」編譯或者動態編譯。動態編譯的一個問題時,程序相關的編譯開銷會變得過度。就是說,如果在幾乎同一個時間必須編譯的子程序的數量較大,則程序編譯相關的開銷程度之高,對總體程序執行會產生不利的影響。一般來說將系統資源過多地用於編譯會導致程序執行的低效率、低速度。此外編譯程序在程序實際執行期間編譯子程序所花費的時間會導致產生用戶可見的程序執行的暫停。例如,如果用戶在程序的編譯開銷很高時向程序輸入一條命令,則系統對該用戶輸入的響應可能會延遲。這種響應延遲是令用戶煩惱的。因此人們期望有某種機制能改善動態編譯子程序的外在效率。
為了實現本發明的以上目的和其它目的,本文介紹用於在電腦程式執行的空閒期間動態地編譯子程序的方法和裝置。所介紹的方法特別適用於既執行解釋字節代碼(interpreted byte code)又執行編譯字節代碼(compiled byte code)的計算機系統。根據本發明的一個方面,確定處理電腦程式中的空閒時段或低開銷時段。然後在所識別的空閒期間,對已經識別出的要進行編譯的一個或多個子程序進行動態編譯。在有些實施例中,把要動態編譯的子程序在一個或多個列表中註明。對該列表進行優先級處理以首先便利最高優先級子程序的編譯。在一個實施例中,有一對編譯列表,第一個編譯列表是一個在處理電腦程式之前創建的資料庫列表,另一個是在處理電腦程式期間創建的執行列表。
在一個實施例中,如果在編譯子程序期間接到一個中斷,則允許編譯在預定的時段內繼續執行。如果在該預定的時段內編譯沒有完成,則放棄編譯。
根據本發明的另一個方面,在處理電腦程式中的低工作量期間動態編譯字節編碼的子程序的計算機系統,包含一種確定低工作量的機構。該系統進一步包括一種確定在低工作量期間內編譯的子程序的機構。安排一個編譯程序在低工作量期間內啟動所確定的子程序的編譯。在一個實施例中,該系統還包括一個中斷處理器以處理在編譯所確定子程序期間收到的中斷信號,還包括一個中止機構以在必要時使該子程序的編譯中止。
本發明的這些優點和其它優點,表現在以下的詳細說明和各附圖中。
以下說明結合附圖來闡述本發明。附圖簡述

圖1是表示根據本發明的一個實施例動態地編譯代碼的一個計算機系統的示意框圖。
圖2是表示按照本發明的一個實施例,執行一個具有能在暫停期間編譯代碼的能力的程序的相關步驟的過程流圖。
圖3是表示按照本發明的一個實施例,對子程序執行編譯的相關步驟(即圖2的步驟216)的過程流圖。
圖4是表示按照本發明的一個實施例,確定最高優先級子程序的相關步驟(即圖3的步驟302)的過程流圖。
圖5是表示一個適於實現本發明的、典型的通用計算機系統。
圖6是表示一個適於實現本發明的虛擬機的示意圖。
如上所述,在程序實際執行期間動態編譯與字節編碼的程序相關的子程序,會導致程序執行效率的低下。導致這種低效的原因是,編譯程序對可用計算機系統資源的使用過度,或者說編譯開銷過度。編譯程序在程序實際執行期間動態編譯子程序所花費的時間會導致程序執行的延遲。如果用戶能感覺到這種延遲,則這種延遲就被視為是不可接受的,特別是當延遲時間相對較長(例如大於200毫秒)時。
提高這種程序性能的一個途徑是允許混合地既解釋字節代碼又動態編譯字節代碼。在這種系統內,依然必須決定何時編譯某子程序是有效率的。本發明描述的方法和裝置能在編譯開銷相對較高時推遲動態編譯子程序。更具體來說,如果判定編譯開銷太高,就將至少某些子程序的動態編譯推遲,直到總體程序處理中出現工作量相對較低的時段。
通過將擬定要編譯的字節編碼子程序中至少某些子程序的動態編譯推遲,計算機資源能夠得到更有效的利用。當處理期間電腦程式實質上處於不活動狀態時,例如當電腦程式因等待用戶輸入而空閒時,程序執行相關的總體資源使用開銷一般相對較低。在這些低工作量的時段內,就可以把可用的系統資源用於執行對那些以前確定要編譯的子程序的編譯。在電腦程式的計算開銷較低時進行編譯,使得總體計算機系統資源的使用效率高,並且一般不會引起用戶可察覺的延遲。
以下首先結合圖1,說明根據本發明的一個實施例動態地編譯字節代碼的一個計算機系統。字節代碼44作為輸入被提供給運行時計算機系統146。字節代碼44一般被組織為電腦程式,它一般被安排成可分析的片斷,例如子程序(method)或例程。在一個實施例中,字節代碼144被一個虛擬機內部的編譯時環境提供到同一虛擬機內部的一個運行時環境,例如計算機系統146。本文以後將結合圖6詳細討論本發明賴以實現的一個合適的虛擬機。
當字節代碼144被提供給計算機系統146時,字節代碼144被解釋程序148處理。另外,字節代碼144也可以被編譯程序150編譯,生成編譯字節代碼152。應當明白,字節代碼144一般可幾乎同時被輸入到解釋程序148和編譯程序150去處理。
每當一個子程序被調用,如果該子程序未編譯,就用解釋程序144解釋該子程序相關的字節代碼144。在一個實施例中,保持一個子程序被解釋的次數的量度,這種量度包括在各個被解釋子程序中含有的一個計數器(即調用計數器),每解釋一次子程序,計數器就遞增一次。
當子程序被解釋的次數超過某個閾值-即界限值時,就用編譯程序150編譯該子程序。重複解釋某個包含在頻繁執行的代碼158中的子程序,效率是不不高的,因為解釋字節代碼154的執行速度一般比編譯代碼更慢,或者說效率更低。編譯頻繁執行的代碼158能使包含在頻繁執行的代碼158中的子程序的執行效率更高,這是因為編譯該子程序而節省的時間有可能彌補該編譯過程帶來的編譯開銷。
在運行期間,要對用編譯程序150編譯字節代碼144相關的編譯開銷進行監測,以保證編譯開銷不超過某個預定的最大可接受的水平。編譯開銷經常用編譯要求的處理器時間佔執行要求的處理器時間的百分比來表示。預定最大開銷水平的範圍變動很大,它取決於具體需要以及特定系統的特性。例如,對於期望具有高執行效能的虛擬機來說,預定最大開銷水平的範圍可以是總體系統資源的約10%~30%。當編譯字節代碼144相關的編譯開銷超過預定最大開銷水平時,就將這些在編譯開銷較低時本當編譯的子程序放置到一個執行列表(execution list)或隊列中。這種執行列表實際上是一個等待在編譯開銷較低時被處理的子程序列表,就是說,執行列表中的子程序可以在編譯開銷較低時被編譯。具體來說,對執行列表處理的時機是,編譯開銷以及計算機系統146相關的總體計算開銷都處於低水平時。
當字節代碼等待著在總體程序執行中的空閒期間(例如在處理字節代碼時出現的空閒期間)被編譯時,對該程序進行監測,判斷何時發生暫停。下面結合圖2,說明按照本發明的一個實施例,執行一個能在暫停期間編譯代碼的程序或應用軟體的過程。程序的執行開始於步驟210,在步驟212,判斷程序的執行是否到達某個空閒時段。
空閒時段一般是指程序處理中的暫停(例如供思考的暫停(think pause)),在此期間程序基本處於不活動的狀態。程序可能正在等待著某種行為,例如來自相關作業系統的定時器信號;程序也可能為了繼續執行而正在等待著用戶的輸入。一般來說,當程序等待用戶的動作時,發生一個供思考的暫停。應當明白,空閒時段的時間範圍變動很大。例如,空閒時段的時間的變化範圍可在數毫秒至半秒鐘。當程序等待用戶的輸入而發生暫停時,空閒時段時間一般更長,例如數以秒計、數以分計、數以天計或更長的時間。
一般來說,用一個閾值來識別「有用的」暫停。例如,如果實際暫停時間延續了預定的數毫秒,則系統識別該暫停是有用的暫停,暫停可能還會延續更長時間。如果暫停有可能延續,就可以允許繼續編譯,以利用暫停的時間。因此,在步驟212判斷程序的執行是否到達某個空閒時段,涉及判斷某個低工作量的時段是否達到某個閾值,例如約100毫秒或半秒鐘。
一般來說,空閒時段或相對低工作量時段的發生,可以通過監測與程序執行相關的中央處理單元(CPU)使用情況來識別。另一種方法是,通過監測與總體計算機系統相關的各線程(thread)的狀態,確定是否存在空閒時段。
如果監測CPU使用來識別相對低工作量的時段,監測CPU使用實際上是要判斷CPU使用何時降到某個使用閾值以下。使用閾值即「低工作量閾值」的範圍變動很大。例如可以這樣設定使用閾值,使得在幾乎只有低開銷的活動(例如設定光標周期性地閃動)在運行時,程序就可以被視為空閒。在一個實施例中,當程序處理期間CPU使用降到約佔總體系統資源20%的使用閾值以下時,則總體程序處理被視為處於低工作量的時段。在這些時候,有約80%的系統資源可供使用。
監測線程的狀態可能涉及分析某個線程調度器(thread shceduler),這一點本領域的熟練人員都知道。當線程調度器指示,所有線程都堵塞,即幾乎沒有一個線程處於「可運行的」狀態時,其含義是程序不再消費CPU時間。CPU時間一般要等到某個信號到來時才被消費,因為此時某個線程會被解鎖。當CPU時間不被消費時,程序一般處於空閒時段。
如果在步驟212判定程序執行不處於空閒時段,則過程流返回到步驟210,程序繼續執行。反之,如果在步驟212判定有空閒時段,則在步驟214判斷是否有待執行的任務,例如編譯任務。就是說,判斷是否有預定在空閒時段執行的任務。這些任務一般包括各種各樣的任務,例如編譯和收垃圾(garbage collection)。這種任務可以按在系統中的相對重要程度而被賦予優先級。在所述實施例中,以待執行編譯來說明這些任務。
獲得待執行編譯的來源一般有兩種資料庫列表和執行列表,它們是待編譯的「候選」子程序的列表。創建資料庫列表的一種裝置要涉及一種監測編譯子程序(compiled methods)的系統,例如一種當資料庫被直接插入時創建資料庫列表的裝置。在這種系統中,資料庫列表實際上是子程序的「工作集合」或「候選集合」,這些子程序在以前的程序執行期間被編譯過,並被視為是有可能要在以後的程序執行中編譯的子程序。也可以用其它機制來創建資料庫列表或向資料庫列表添加子程序。應當明白,在有些實施例中,資料庫列表中可以包含其它任務,例如執行收垃圾任務。
如上所述,執行列表是在當前程序執行期間創建的一個子程序隊列或子程序的候選集合。執行列表可以包含或確定那些被壓制不讓編譯的子程序,不編譯這些子程序的原因是,以前認為編譯開銷太高,所以不能編譯這些子程序。執行列表也能確定哪些子程序是被一個獨立的掃除機過程(sweeper process)定期添加到該列表中的。掃除機過程檢查解釋子程序(interpreted methods)相關的調用計數器,即記錄子程序被解釋的次數的計數器。一般來說,每調用一次子程序,子程序的調用計數器就遞增。掃除機定期檢查調用計數器,判斷最近未被調用的子程序的調用計數器是否處於一個當前看來子程序視為適合編譯的水平。閾值是指子程序被考慮編譯之前對子程序的調用必須要達到的次數,因為在程序執行期間閾值可能發生變化,所以那些其調用計數器超過當前閾值的子程序就可能被掃除機添加到執行列表中。也可以用其它機制來創建執行列表或向執行列表添加子程序。在有些實施例中,執行列表中可以被關聯到一個總的工作列表,後者除含有待執行編譯任務外,還包括其它任務,例如執行收垃圾任務。
如果在步驟214通過檢查執行列表和資料庫列表判定沒有待執行的任務,則過程流返回到步驟210,程序在此繼續執行。反之,如果在步驟214判定有待執行編譯任務,則在步驟216,執行編譯任務。下文將結合圖3說明執行待執行編譯任務的相關步驟。待執行編譯任務完成後,過程流返回到步驟210,程序在此繼續執行。
如上所述,在所述實施例中,編譯子程序的時機是,當預期編譯該子程序、調用該編譯子程序有可能比解釋該子程序的效率更高時。為了避免過度的編譯開銷,這種編譯可能會被推遲到總體程序執行期間出現空閒時段。圖3是表示按照本發明的一個實施例,執行推遲的子程序編譯(即圖2的步驟216)的相關步驟的過程流圖。該執行編譯的過程開始於步驟302,確定最高優先級的候選子程序。在一個實施例中,最高優先級的子程序是執行列表中的、或者是由執行列表確認的調用次數最多的子程序。另外,最高優先級的子程序也可以是執行列表中預期編譯時間最短的子程序。下文將結合圖4詳細討論最高優先級的子程序的確定。
在步驟302確定了最高優先級子程序後,在步驟304判斷該最高優先級子程序是否已經編譯過。最高優先級子程序可能由於各種原因已經編譯過。例如,在該子程序被置於執行列表後,在總體程序執行期間,當編譯開銷較低時該子程序被調用並編譯。因此,該子程序已經編譯過,並且可能尚未從執行列表中刪除,不即時刪除的原因是反覆更新執行列表的代價很高。從資料庫列表中獲得的最高優先級子程序也可能是編譯過的子程序。就是說,假設同一個子程序既出現在執行列表中又出現在資料庫列表中,例如如果已經用執行列表編譯過該子程序,而資料庫列表因為代價太高而沒有更新,那麼,該子程序被確定是資料庫列表中的最高優先級子程序時,該子程序可以是已經編譯了的。
如果在步驟394判定該最高優先級子程序已經編譯過,則將該子程序清除出相應的列表,即執行列表或資料庫列表,然後過程流返回到步驟302,去確定新的最高優先級子程序。反之,如果判定該最高優先級子程序沒有編譯過,則在步驟306開始編譯該最高優先級子程序。就是說,對該最高優先級子程序的編譯被啟動。
在編譯最高優先級子程序期間,可能收到中斷信號。一般來說,中斷信號包括但不限於定時器信號和用戶輸入,例如鍵盤輸入。在步驟308,判斷是否收到中斷信號。本領域的熟練人員明白,當收到中斷信號時,對最高優先級子程序的編譯可以自動停止,以便進行必要的中斷處理。
如果收到中斷,則在步驟314,允許對最高優先級子程序的編譯繼續預定的一段時間。在一個實施例中,該預定的一段時間實際上是收到一個要將至少一個線程設置到可執行狀態的信號後,用於編譯的一個「生存時間」。收到中斷信號後允許編譯繼續一段時間,如果編譯接近完成,就使編譯有可能完成。
儘管該預定時間段的範圍變動很大,預定時間段一般只有數毫秒,即「X」毫秒。最好採用範圍在10~200毫秒的較短時間段,因為據觀察,對用戶輸入的響應延遲200ms以上就能被用戶察覺,經常因此使用戶煩惱。時間段根據信號的來源或者處於可運行狀態中的線程的優先級的不同可以有所不同,信號或線程的優先級越高,時間段應越短。
在步驟314允許編譯繼續預定時間段後,在步驟316判斷在預定時間段內編譯是否成功地完成。如果編譯已經完成,則過程流轉移到圖2的步驟210,總體程序執行繼續。應當明白,一旦編譯完成,剛剛編譯的子程序將被清除出該子程序被取自的執行列表或資料庫列表如果在預定時間段內編譯沒有完成,則過程流從步驟316轉移到步驟318,編譯中止。編譯未被允許完成,原因是如果允許編譯完成,就會導致總體程序執行的顯著延遲,更具體來說,就會導致中斷處理的顯著延遲。編譯中止時,發生「清算」,即釋放試圖編譯時佔用的系統資源,這一點本領域的熟練人員明白。編譯中止後,過程流轉移到圖2的步驟210,總體程序執行繼續。
回到步驟308,如果編譯最高優先級子程序期間沒有收到中斷信號,在步驟310繼續編譯。在步驟312判斷編譯是否完成。如果判定編譯已經完成,就從適當的列表中刪除該最高優先級子程序,過程流返回到步驟302去確定新的最高優先級子程序。反之,如果在步驟312判定編譯沒有完成,則至步驟308,允許編譯繼續,直到編譯完成或是因收到中斷信號而中止。
一般來說,執行列表和資料庫列表中子程序被編譯的「次序」是由多種不同因素決定的。各列表中子程序被分配以優先權值,表示同一列表中子程序之間的相對優先關係。優先權值一般可以在總體程序執行期間的任何時候分配,在程序執行的自始至終可以進一步更新。例如,每當向列表添加一個子程序時,就可以對列表中的各優先權值進行計算和更新(即重新評估)。也可以在各空閒時段的開始重新評估優先權值,以保證在選擇子程序進行編譯時,執行列表和資料庫列表中的子程序的優先權最新。
子程序的優先權值可以根據多種因素的任意組合進行計算,這些因素其中包括子程序的調用次數、子程序在列表中的位置、子程序的估計編譯時間以及總體程序執行期間當前空閒時段的長度。另外,在一個實施例中,子程序的優先權值實際上是隨機分配的。
列表中調用次數最多的子程序可能具有最高級編譯優先權,因為它實際上是最頻繁被調用的解釋子程序。子程序在列表中的位置也可能影響分配給該子程序的優先權值,因為最晚添加到列表中的子程序經常可能很快就需要使用。列表中期望編譯時間最短的子程序可能具有最高級編譯優先權,因為編譯一個期望編譯時間較短的子程序一般比期望編譯時間較長的子程序更可能在一個空閒時段內完成。一般來說,子程序的編譯時間可以用子程序的長度來估計,例如,相對短的子程序一般來說編譯時間相對較短。
當前空閒時段的長度也可能影響子程序的優先權值。例如,如果當前空閒時段已經相對較長,則該空閒時段延續更長時間的可能性通常就會增大。造成空閒時段時間長的原因,是用戶長時間地離開總體程序執行正在進行的計算機。因此,據觀察,如果判定當前空閒時段已經相對的長,那麼該空閒時段將延續更長時間的可能性一般相當高。因此,當預計空閒時段會持續相當長時間時,預期編譯時間較長的子程序可以具有較高的編譯優先權,因為預期編譯時間較短的子程序一般完全有機會可以在以後較短的空閒時段內編譯。
如上所述,子程序的優先權值有許多不同的決定因素。換言之可以用一個優先權函數來確定優先權值。這種優先權函數的形式一般可能差別很大。例如一種優先權函數將子程序的調用次數除以子程序的預期編譯時間,得出子程序的優先權值。另外,一種優先權函數是,對於較短預期編譯時間的子程序,取其調用次數;對於較長預期編譯時間的子程序,取其調用次數除以某個常數。
下面結合圖4,說明表示按照本發明的一個實施例,確定最高優先級子程序的相關步驟(即圖3的步驟302)。最高優先級子程序的確定開始於步驟402,該步驟判斷程序相關的執行列表是否有子程序一般來說,執行列表中的子程序比資料庫列表中的子程序的編譯優先權更高。執行列表中的子程序是程序執行期間被確定的子程序,因為這些子程序被反覆調用,所以要求編譯,以更高效地執行而克服相關的編譯開銷。另外,資料庫列表中的子程序可能是潛在會反覆調用的子程序,因此編譯這些子程序可能是有益的。換言之,執行列表反映子程序的當前的、或實際的利用,而資料庫列表實質上反映子程序的長遠的利用。因此,一般先選擇執行列表中的子程序進行編譯,然後選擇資料庫列表中的子程序,因為編譯執行列表中的子程序更可能使使用這些子程序的程序的總體執行的效率更高。
如果在步驟402判定執行列表中有子程序,就在步驟404,選擇執行列表中最高優先級子程序用於編譯。一旦從執行列表中選出該子程序,則確定最高優先級子程序的過程完成。反之,如果在步驟402判定執行列表中沒有子程序,就選擇資料庫列表中最高優先級子程序用於編譯。一旦從資料庫列表中選出該子程序,則確定最高優先級子程序的過程完成。
本發明一般可以在任何適當的計算機系統上實現。具體來說,在總體程序執行中空閒時段內可以用任何適當的虛擬機對排隊的子程序進行編譯。下文將結合圖6描述這種虛擬機。圖5表示一個適於實現本發明的、典型的通用計算機系統。計算機系統530包括任意數量的處理器532(也稱中央處理單元或CPU),處理器與內存設備相連,內存設備包括基本存儲器534(一般是只讀存儲器即ROM)和基本存儲器536(一般是隨機存取存儲器即RAM)。
計算機系統530,更具體來說,CPU532,可以被安排去支持一個虛擬機,這一點本領域的熟練人員都知道。下文討論圖6時將描述一例計算機系統530支持的虛擬機。本領域眾所周知,ROM的作用是向CPU532單向傳輸數據和指令,而RAM一般則用於雙向傳輸數據和指令。CPU532一般可以包括任意數量的處理器,兩個基本存儲器534和536都可以包括任何計算機可讀的合適的介質。二級存儲器538一般是大容量存儲器,它也雙向地連接CPU532,提供額外的存儲器量。大容量存儲器538是一種計算機可讀的介質,可用於存儲包括計算機代碼、數據等的程序。一般來說,大容量存儲器538是一種諸如硬碟或磁帶的存儲介質,速度一般比基本存儲器534、536慢。大容量存儲器538的形式可以是磁帶機、紙帶機或其它已知設備。應當明白,大容量存儲器538中存儲器的數據,在適當的情況下可以採用與RAM536相同的方式而充當虛擬內存。諸如CD-ROM的特殊基本存儲器534也可以單向地向CPU532傳遞數據。
CPU532也連接一個或輸入/輸出設備540。輸入/輸出設備540包括但不限於視頻監視器、軌跡球、滑鼠、鍵盤、麥克風、觸控螢幕、穿卡機、磁帶機、紙帶機、書寫板、記錄筆、聲音或手書識別器或其它已知的輸入設備,當然也包括其它計算機。最後,CPU532最好用圖中512簡單表示的網絡連接,連接到計算機網絡或通信網絡,例如區域網、內連網或網際網路。有了這種網絡連接,就可以考慮在執行以上所述方法步驟的過程中用CPU532從網絡接收信息,或者向網絡輸出信息。這種信息經常表現為要由CPU532執行的指令序列,例如以在載波中體現的計算機數據信號的形式,既可以從網絡接收,也可以向網絡輸出。計算機軟體和硬體的熟練人員都知道上述設備和材料。
如上所述,計算機系統530上可以運行一個虛擬機。圖6是表示一個由圖5的通用計算機系統支持的虛擬機的示意圖。當電腦程式(例如用JavaTM程序設計語言編寫的電腦程式)執行時,原始碼610被提供給編譯時環境605內的編譯程序620,Java是由美國加州Palo Alto的Sun Microsystems公司開發的一種程序設計語言。編譯程序620將原始碼610翻譯成字節代碼630。一般來說,原始碼610是在軟體開發人創建原始碼610的時候被翻譯成字節代碼630的。
字節代碼630一般可以被複製、下載、或通過網絡(例如圖10的網絡1012)以其它方式分發、或者在圖10基本存儲器534之類的存儲器上存儲。在所述實施例中,字節代碼630是獨立於平臺的。就是說,字節代碼630可以在運行適當的虛擬機640的幾乎任何計算機系統上執行。例如,在JavaTM環境中,字節代碼630可以在運行JavaTM虛擬機的計算機系統上執行。
字節代碼630被提供給包含虛擬機640的運行時環境635。運行時環境635一般可用圖10的CPU532之類的處理器執行。虛擬機640包括編譯程序642、解釋程序644和運行時系統646。字節代碼630一般既可以提供給編譯程序642,也可以提供給解釋程序644。
如果將字節代碼640提供給編譯程序642,如上所述,字節代碼630中含有的子程序被翻譯成機器指令。另一方面,如果將字節代碼640提供給解釋程序644,則字節代碼630被讀入解釋程序644,一次一個字節代碼。解釋程序644然後一邊讀入各字節代碼一邊執行由各字節代碼定義的操作。一般來說,解釋程序644幾乎是連續地處理字節代碼630並執行字節代碼630相關的操作。
當作業系統660調用一個子程序時,如果判定調用的子程序是個被解釋的子程序,運行時系統646就可以從解釋程序644獲得該子程序。另一方面,如果判定調用的子程序是個編譯子程序,運行時系統646就啟動編譯程序646。編譯程序646然後根據字節代碼630輸出機器指令,並執行這些機器語言指令。一般來說,當虛擬機640停止時,機器語言指令就被丟棄。
儘管本文只描述了本發明的幾個實施例,應當明白,在不偏離本發明本質或範圍的前提下,本發明可以以許多其它方式實施。舉例來說,在空閒時段執行編譯涉及的諸步驟可以調換順序,也可以增、減。一般來說,在不偏離本發明本質或範圍的前提下,本發明的諸多方法所涉及的諸步驟均可以調換順序,也可以增、減。
本文所描述的用於編譯的一個最高優先級子程序,是從執行列表和資料庫列表中的幾乎所有子程序中選出來的。檢索執行列表或資料庫列表或二者中的所有子程序,以找到最高編譯優先級子程序這種方法,在執行列表中項目很多時,其代價是很高的。因此,在一個實施例中,對執行列表的一個子集而不是執行列表全體進行檢索,確定用於編譯的一個最高優先級子程序。例如,檢索執行列表中的前「N」個候選子程序,從這前「N」個候選子程序中確定最高優先級子程序。
如上所述,至少部分地通過使用調用計數器來確定子程序編譯優先級。調用計數器一般是隨子程序每次被訪問而遞增的計數器。應當明白,在有些實施例中,調用計數器可以隨時間推移而衰減。例如,如果某子程序在程序執行的開始部分被反覆調用並預定進行編譯,但是在以後沒有再被調用,那麼調用計數器就會衰減,以降低該子程序的編譯優先級。一旦某子程序的調用計數器已經衰減,例如指數級地衰減,就不再值得編譯該子程序。因此可以定期將這類子程序從執行列表中刪除。
與此類似,在進行編譯期間,要判斷某個預期要編譯的子程序此前已經編譯過。可以將已經編譯過的子程序從執行列表或資料庫列表中適當的列表中刪除,或者同時從這兩種列表中刪除。一般來說,在執行列表和資料庫列表中檢查編譯過的子程序,其相關的開銷是相當大的。然而,例如可以在空閒時段的開始,定期地清除編譯過的子程序。這一點並不偏離本發明的實質或範圍。
儘管本文將執行列表描述成是一種含有要編譯的解釋子程序的列表或隊列,但是執行列表也可以包含要被推遲到有空閒時段時重新編譯的編譯子程序。例如,在一個有兩級編譯程序的系統中,一旦某子程序被編譯後,如果該子程序反覆被調用,就希望更高效地重新編譯該子程序。在這種系統中,預定要重新編譯或第二級編譯的子程序,可以與預定要編譯的解釋子程序放在同一個執行列表內。然而,預定要重新編譯的子程序,也可以放在單獨的執行列表內。
在一個實施例中,執行列表一般是只有延遲任務或者既有延遲任務又有待編譯任務的工作列表。可以為這類任務分配優先級。應當明白,當工作列表中的任務正在運行時,如果收到中斷信號,可以允許該任務完成,例如,假設該任務涉及收垃圾,如果將收垃圾的過程掛起以及「放棄」收垃圾過程,代價可能會很高,如果代價不是太大就完成該過程。因此可以允許收垃圾過程完成。收到中斷信號時,一般也可以將任務掛起。因此,本文的例子應視為是解釋性的而不是限制性的,本發明也不局限於本文的所述的細節,可以在權利要求的範圍內作出改進。
權利要求
1.一種在處理電腦程式中的空閒時段動態地編譯子程序的計算機實現的方法,該計算機實現的方法包括確定空閒時段;在空閒時段內確定一個從多個子程序中選擇的第一個子程序,該多個子程序包含在電腦程式中,其中電腦程式被安排既執行解釋的程序代碼又執行編譯的程序代碼;啟動編譯第一個子程序,其中,對編譯第一個子程序的啟動在空閒時段內發生。
2.權利要求1所述的計算機實現的方法,其中,多個子程序被登記在一個與電腦程式相關的第一列表中,第一個子程序是第一列表相關的一個最高優先級的子程序。
3.權利要求1所述的計算機實現的方法,其中,從多個子程序中選擇的第一個子程序集合與一個第一列表關聯,從多個子程序中選擇的第二個子程序集合與一個第二列表關聯,第一列表是在處理電腦程式期間創建的,第二列表是在處理電腦程式之前創建的,其中確定第一個子程序包括從第一列表選擇作為最高優先級的子程序的第一個子程序。
4.權利要求1所述的計算機實現的方法,其中,從多個子程序中選擇的一個第一個子程序集合與第一列表關聯,從多個子程序中選擇的一個第二個子程序集合與第二列表關聯,第一列表是在處理電腦程式期間創建的,第二列表是在處理電腦程式之前創建的,其中確定第一個子程序包括從第二列表選擇作為最高優先級的子程序的第一個子程序。
5.以上權利要求中任一個權利要求所述的計算機實現的方法,進一步包括在對第一個子程序的編譯啟動之後判斷電腦程式是否收到一個中斷信號;當判定收到一個中斷信號時,對第一個子程序的編譯繼續一個預定的時間段;預定時間段過後,判斷對第一個子程序的編譯是否完成;如果判定預定時間段過後第一個子程序的編譯沒有完成,對第一個子程序的編譯中止。
6.一種在總體處理電腦程式中的低工作量時段動態地編譯子程序的計算機實現的方法,該計算機實現的方法包括確定低工作量時段;在低工作量時段內確定一個從多個子程序中選擇的第一個子程序,該多個子程序包括在電腦程式中;判斷第一個子程序是否編譯過,其中判斷是在該低工作量時段內進行的;如果判定第一個子程序沒有編譯過,在該低工作量時段啟動編譯第一個子程序。
7.權利要求6所述的計算機實現的方法,進一步包括如果判定第一個子程序被編譯過,在該低工作量時段內確定一個從多個子程序中選擇的第二個子程序;判斷第二個子程序是否編譯過,其中判斷第二個子程序是否編譯過是在該低工作量時段內進行的;如果判定第二個子程序沒有編譯過,在該低工作量時段啟動編譯第二個子程序。
8.權利要求6和7中的其中之一所述的計算機實現的方法,進一步包括為多個子程序中每個子程序確定一個優先權值,其中,第一個子程序是根據第一個子程序的優先權值確定的。
9.權利要求8所述的計算機實現的方法,其中,為多個子程序中的每個子程序確定優先權值包括在低工作量時段內處理與多個子程序中每個子程序相關的調用計數器。
10.權利要求8所述的計算機實現的方法,其中,為多個子程序中每個子程序確定優先權值包括在低工作量時段內估計多個子程序中每個子程序的編譯時間。
11.權利要求6所述的計算機實現的方法,其中,從多個子程序中選擇的第一個子程序集合與一個第一列表關聯,從多個子程序中選擇的第二個子程序集合與一個第二列表關聯,第一列表是在處理電腦程式期間創建的,第二列表是在處理電腦程式之前創建的,其中確定第一個子程序包括從第一列表選擇作為最高優先級的子程序的第一個子程序。
12.權利要求6~11中任一個權利要求所述的計算機實現的方法,進一步包括在對第一個子程序的編譯啟動之後判斷電腦程式是否收到一個中斷信號;當判定收到一個中斷信號時,對第一個子程序的編譯繼續一個預定的時間段;預定時間段過後,判斷對第一個子程序的編譯是否完成;如果判定預定時間段過後第一個子程序的編譯沒有完成,對第一個子程序的編譯中止。
13.權利要求12所述的計算機實現的方法,進一步包括如果判定未收到一個中斷信號,完成對第一個子程序的編譯;在低工作量時段內確定一個從多個子程序中選擇的第二個子程序;在低工作量時段內判斷第二個子程序是否編譯過;如果判定第二個子程序沒有編譯過,在該低工作量時段內啟動對第二個子程序的編譯。
14.一種在處理電腦程式中的空閒時段動態地處理延遲任務的計算機實現的方法,該計算機實現的方法包括確定在處理電腦程式中的空閒時段;在處理電腦程式的空閒時段內確定一個從多個任務中選擇的第一個任務,該多個任務包括在電腦程式中,其中電腦程式被安排既執行解釋的程序代碼又執行編譯的程序代碼;啟動第一個任務,其中,對編譯第一個任務的啟動在空閒時段內發生。
15.權利要求14所述的計算機實現的方法,進一步包括在接到中斷信號時完成該第一個任務。
16.權利要求14所述的計算機實現的方法,進一步包括在接到中斷信號時掛起該第一個任務。
17.一種在處理電腦程式中的低工作量時段動態地編譯字節編碼子程序的計算機系統,該計算機系統包括一個用於確定低工作量時段的機構;一個用於在低工作量時段內確定一個從多個子程序中選擇的第一個子程序的機構;一個用於低工作量時段內啟動對第一個子程序編譯的機構。
18.權利要求17所述的計算機系統,進一步包括一個被安排去引用多個子程序的第一個集合的第一列表,其中第一列表與電腦程式關聯,第一個子程序是第一列表關聯的最高優先級子程序;一個被安排去引用多個子程序的第二個集合的第二列表,其中第二列表是在處理電腦程式之前創建的,第一列表是在處理電腦程式期間創建的。
19.權利要求17所述的計算機系統,進一步包括一個被安排在第一個子程序的編譯期間接收中斷信號的中斷處理器,該中斷處理器與編譯程序通訊,其中該編譯程序被進一步安排去根據中斷處理器的信號繼續對第一個子程序編譯一個預定的時間段;一個中止機構,該中止機構與編譯程序通訊,其中該中止機構被安排去中止對第一個子程序的編譯。
20.權利要求17~19中任一個權利要求所述的計算機系統,進一步包括一個診斷機構,該診斷機構被安排去確定第一個子程序何時被編譯。
21.一種包含電腦程式代碼設備的計算機可讀的介質,其中的電腦程式代碼設備被安排去在處理電腦程式中的空閒時段動態地編譯子程序,該計算機可讀的介質包括確定空閒時段的電腦程式代碼設備;在空閒時段內確定一個從多個子程序中選出的第一個子程序的電腦程式代碼設備,其中多個子程序包括在電腦程式中;在空閒時段內啟動對第一個子程序編譯的電腦程式代碼設備。
22.根據權利要求21的計算機可讀的介質,其中,電腦程式代碼設備在載波中實現。
全文摘要
本文介紹用於在電腦程式執行的空閒期間動態地編譯與子程序有關的字節代碼的方法和裝置。所介紹的方法特別適用於既執行解釋字節代碼又執行編譯字節代碼的計算機系統。在有些實施例中,把要動態編譯的子程序在一個或多個列表中註明。為各列表分配優先級,使優先級最高的子程序最先編譯。在一個實施例中,有一對編譯列表,第一個編譯列表是一個在處理電腦程式之前創建的,另一個是在處理電腦程式期間創建的。
文檔編號G06F9/445GK1234552SQ9811829
公開日1999年11月10日 申請日期1998年10月6日 優先權日1997年10月6日
發明者U·赫爾茨勒, L·巴克 申請人:昇陽電腦有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀