專利名稱:執(zhí)行設(shè)備和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于執(zhí)行計算機程序的執(zhí)行設(shè)備。
背景技術(shù):
關(guān)于執(zhí)行計算機程序的設(shè)備,存在如下設(shè)備,該設(shè)備在未加載程序的情況下,從安裝有該設(shè)備正試圖執(zhí)行的功能的外部源(external source)加載程序并執(zhí)行該程序。
該設(shè)備的一個例子是裝備有Java虛擬機即JavaVM(JavaVirtual Machine)(Java是Sun Microsystems Inc.在美國和其它國家的商標或注冊商標)的設(shè)備。當裝備有JavaVM的設(shè)備執(zhí)行Java應(yīng)用程序時,其能夠從存在于該設(shè)備內(nèi)或該設(shè)備外的類庫(class library)來加載所需的Java類(類加載)。與類加載有關(guān)的JavaVM組件被稱為類加載器(Class Loader)。通過類路徑(classpath)設(shè)定以及類加載器本身的動作來決定類加載器從哪里加載類。
在未指定將要使用的類加載器的情況下,使用內(nèi)置在JavaVM中的系統(tǒng)類加載器(SystemClassLoader)。系統(tǒng)類加載器根據(jù)類路徑設(shè)定來加載類。類路徑列舉一個或多個路徑、或者加載類的位置。系統(tǒng)類加載器按照優(yōu)先級遞減順序通過路徑列舉序列執(zhí)行類搜索。還可以指定將要使用的類加載器,在這種情況下,根據(jù)所指定的類加載器的定義來搜索和加載類。
當類加載器加載類時,首先進行檢查以確定將要加載的類存在于JavaVM內(nèi)還是存在于與JavaVM一同提供的庫內(nèi)(Java系統(tǒng))。如果該類存在于Java系統(tǒng)內(nèi),則從Java系統(tǒng)加載該類。換句話說,即使已知所需的類與應(yīng)用程序一起位于外部,也優(yōu)先從Java系統(tǒng)內(nèi)進行加載。這樣做的首要原因是Java系統(tǒng)內(nèi)的類確保提供Java功能,由此維持Java功能的互用性(interoperability)。第二個原因是Java系統(tǒng)內(nèi)的類是考慮到Java系統(tǒng)內(nèi)的類安全性的可靠的類(solid class)。
美國6260078號專利和美國6701335號專利中引述了關(guān)于類加載的相關(guān)技術(shù)。
在將與應(yīng)用程序一起提供的類庫存儲在Java系統(tǒng)內(nèi)之后,應(yīng)用程序從Java系統(tǒng)內(nèi)的類庫加載類。因此,不需要將類庫與應(yīng)用程序綁定。然而,如果與應(yīng)用程序綁定的類庫的版本不同于位于Java系統(tǒng)內(nèi)的類庫的版本,則出現(xiàn)下類問題。
保證與應(yīng)用程序綁定的類庫與應(yīng)用程序一起工作。然而,由于不保證位于Java系統(tǒng)內(nèi)的類庫與應(yīng)用程序一起工作這一事實,而試圖使用位于Java系統(tǒng)內(nèi)的、版本與同應(yīng)用程序綁定的類庫不同的類庫可能導致出錯。例如,當將與舊類庫綁定的老的應(yīng)用程序(legacy application)安裝到包含新類庫的新Java系統(tǒng)中時,可能出現(xiàn)這樣的情況。在這種情況下,改變老的應(yīng)用程序使得可以避免該錯誤是件麻煩的事情。從安全性觀點來看,總是使用與應(yīng)用程序綁定的類的方法也是不可取的。
日本特開2002-014817號公報公開了一種使用計算機網(wǎng)絡(luò)來分發(fā)程序文件的文件分發(fā)系統(tǒng)。該文件分發(fā)系統(tǒng)將加載到服務(wù)器的文件系統(tǒng)中的程序模塊的版本與安裝在客戶端的文件系統(tǒng)上的程序模塊的版本進行比較。僅在加載到服務(wù)器的文件系統(tǒng)中的程序模塊的版本比安裝在客戶端的文件系統(tǒng)上的程序模塊的版本新的情況下,才下載加載到服務(wù)器的文件系統(tǒng)中的程序模塊。
發(fā)明內(nèi)容
本發(fā)明的目的是確保程序的穩(wěn)定運行。
本發(fā)明的另一目的是避免延長類加載時間。
根據(jù)本發(fā)明,提供一種執(zhí)行計算機程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行計算機程序;以及加載單元,用于加載當正在執(zhí)行該計算機程序時所請求的類,其中,該加載單元加載與正在執(zhí)行的該計算機程序相對應(yīng)的類。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及搜索單元,用于搜索該應(yīng)用程序所請求的類,其中,該搜索單元以應(yīng)用程序庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行搜索。
根據(jù)本發(fā)明,提供一種執(zhí)行計算機程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行計算機程序;以及搜索單元,用于搜索該計算機程序所請求的類,其中,該搜索單元以導入庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行搜索。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及加載單元,用于加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫版本不同于系統(tǒng)程序庫版本的情況下,該加載單元從該應(yīng)用程序庫加載該類。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及加載單元,用于加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫內(nèi)的該類的版本不同于系統(tǒng)程序庫內(nèi)的該類的版本的情況下,該加載單元從該應(yīng)用程序庫加載該類。
根據(jù)本發(fā)明,提供一種執(zhí)行計算機程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行計算機程序;以及加載當正在執(zhí)行該計算機程序時所請求的類,其中,加載與正在執(zhí)行的該計算機程序相對應(yīng)的類。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及搜索該應(yīng)用程序所請求的類,其中,以應(yīng)用程序庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行該搜索。
根據(jù)本發(fā)明,提供一種執(zhí)行計算機程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行計算機程序;以及搜索該計算機程序所請求的類,其中,該搜索將優(yōu)先權(quán)給予導入庫而不是系統(tǒng)程序庫。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫版本不同于系統(tǒng)程序庫版本的情況下,從該應(yīng)用程序庫加載該類。
根據(jù)本發(fā)明,提供一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫內(nèi)的該類的版本不同于系統(tǒng)程序庫內(nèi)的該類的版本的情況下,從該應(yīng)用程序庫加載該類。
通過以下(參考附圖)對典型實施例的說明,本發(fā)明的其它特點將是顯而易見的。
圖1是示出根據(jù)本發(fā)明實施例的Java程序執(zhí)行系統(tǒng)的構(gòu)成的框圖;圖2是說明根據(jù)本發(fā)明實施例的JavaVM執(zhí)行設(shè)備的硬件構(gòu)成的框圖;圖3是用于解釋關(guān)于根據(jù)本發(fā)明實施例的JavaVM執(zhí)行設(shè)備的應(yīng)用程序執(zhí)行序列的流程圖;圖4是用于解釋根據(jù)第一實施例在步驟S306中執(zhí)行的類加載序列(第一類加載序列)的流程圖;
圖5A和5B是用于解釋根據(jù)第二實施例在圖3的步驟S306中執(zhí)行的類加載序列(第二類加載序列)的流程圖;圖6是用于解釋根據(jù)第三實施例在圖3的步驟S306中執(zhí)行的類加載序列(第三類加載序列)的流程圖;圖7A和7B是用于解釋根據(jù)第四實施例在圖3的步驟S306中執(zhí)行的類加載序列(第四類加載序列)的流程圖;圖8是用于解釋根據(jù)本發(fā)明第五實施例在圖3的步驟S306中執(zhí)行的類加載序列(第五類加載序列)的流程圖;圖9示出根據(jù)第五實施例的庫信息表的例子的圖;圖10A和10B是用于解釋根據(jù)本發(fā)明第六實施例在圖3的步驟S306中執(zhí)行的類加載序列(第六類加載序列)的流程圖;圖11示出根據(jù)第六實施例的庫信息表的例子的圖。
具體實施例方式
將參考附圖詳細說明本發(fā)明的優(yōu)選實施例。對權(quán)利要求書的范圍來說,這些實施例不限制本發(fā)明,實施例中所描述的特征的全部組合對于本發(fā)明的解決方案也不是必需的。
圖1是示出根據(jù)本發(fā)明實施例的Java程序執(zhí)行系統(tǒng)的構(gòu)成的框圖。
在圖1中,JavaVM 101包括解釋程序102和類加載器103。解釋程序102解釋并執(zhí)行Java字節(jié)代碼。系統(tǒng)程序庫(systemlibrary)104是與JavaVM 101一起提供的系統(tǒng)程序庫(系統(tǒng)程序庫)。所加載的類105是被加載到存儲器中并使其可執(zhí)行的類。
應(yīng)用程序106是用Java語言寫的應(yīng)用程序。應(yīng)用程序類107是應(yīng)用程序106運行的主類(main class)。應(yīng)用程序庫108是與應(yīng)用程序106一起提供的類庫或應(yīng)用程序庫。導入庫(importlibrary)109是指當保持在應(yīng)用程序106的外部時在應(yīng)用程序106的部分運行中使用的類庫。附圖標記110表示JavaVM執(zhí)行設(shè)備。
在圖1中,應(yīng)用程序106包括應(yīng)用程序類107和應(yīng)用程序庫108。JavaVM執(zhí)行設(shè)備110包括JavaVM 101、系統(tǒng)程序庫104和所加載的類105??稍试SJavaVM 101和應(yīng)用程序106共存于同一設(shè)備即JavaVM執(zhí)行設(shè)備110內(nèi)。還可允許如下形式將應(yīng)用程序106安裝在外部設(shè)備中,并通過JavaVM 101使用網(wǎng)絡(luò)單元加載和執(zhí)行應(yīng)用程序106。
圖2是說明根據(jù)本實施例的JavaVM執(zhí)行設(shè)備110的硬件構(gòu)成的框圖。
在該圖中,附圖標記201表示控制整個設(shè)備的中央處理單元即CPU。ROM 202以機器可讀的格式存儲由CPU 201執(zhí)行的各種類型的程序或數(shù)據(jù)。RAM 203用作CPU 201臨時保存各種類型數(shù)據(jù)的工作區(qū)。計時器204根據(jù)CPU 201的指令測量各種類型的時間間隔。顯示單元205用于顯示用戶界面,并且可具有例如LCD、等離子體屏幕或其它顯示面板。鍵盤206具有全范圍的操作鍵以及鼠標和其它指示裝置,并且用于通過用戶操作輸入執(zhí)行應(yīng)用程序的指示、以及所有其它命令或數(shù)據(jù)。閃速ROM 207提供對所有類型的設(shè)定數(shù)據(jù)或文件的非易失性存儲。附圖標記208表示用于通過網(wǎng)絡(luò)連接到外部設(shè)備的網(wǎng)絡(luò)接口。硬盤驅(qū)動器(HD)209存儲操作系統(tǒng)、所有類型的應(yīng)用程序、或其它預(yù)安裝的軟件,并且還保存所有類型的設(shè)定數(shù)據(jù)文件。
在該情況下,解釋程序102和類加載器103以程序形式存儲在例如ROM 202中,并由CPU 201讀出并執(zhí)行它們。還可允許將解釋程序102和類加載器103存儲在硬盤驅(qū)動器209上。系統(tǒng)程序庫104被加載到閃速ROM 207或硬盤驅(qū)動器209中。將所加載的類105加載到RAM 203中。如果應(yīng)用程序106和導入庫109位于如JavaVM執(zhí)行設(shè)備110的同一設(shè)備內(nèi),則可以將它們加載到閃速ROM 207或硬盤驅(qū)動器209中。如果應(yīng)用程序106和導入庫109位于其它外部設(shè)備內(nèi),則它們位于適合該外部設(shè)備的存儲介質(zhì)內(nèi)。
根據(jù)以上所述,在大多數(shù)情況下,構(gòu)成運行主體的硬件是控制該設(shè)備的CPU 201,因此,除異常情況下以外,不詳細說明每一情況下的該運行主體。
以下是使用圖3中的流程圖對應(yīng)用程序106中的執(zhí)行序列的說明。
圖3是用于解釋關(guān)于根據(jù)本實施例的JavaVM執(zhí)行設(shè)備110的應(yīng)用程序執(zhí)行序列的流程圖。
在步驟S301,類加載器103從應(yīng)用程序類107加載將作為應(yīng)用程序106的主類的類,即最初調(diào)用的類。將如此加載的類加載到RAM 203中作為所加載的類105之一。在步驟S302,由解釋程序102讀出、解釋并執(zhí)行作為所加載的類105之一的主類,其中解釋程序102執(zhí)行解釋和執(zhí)行處理直到應(yīng)用程序106終止為止。因此,在步驟S303持續(xù)監(jiān)控應(yīng)用程序106以判斷應(yīng)用程序106是否已經(jīng)終止。
如果在步驟S303中應(yīng)用程序106終止,則執(zhí)行序列結(jié)束。如果應(yīng)用程序106沒有終止,則處理進入步驟S304,在步驟S304,解釋程序102判斷是否已將執(zhí)行下一個字節(jié)代碼塊所需的類加載到所加載的類105中。如果已加載該類,則處理進入步驟S302,返回到應(yīng)用程序106的解釋和執(zhí)行步驟。
另一方面,如果在步驟S304中未加載所需的類,則處理進入步驟S305,在步驟S305,解釋程序102請求類加載器103加載所需的類。一旦接受該請求,類加載器103就在步驟S306中加載所請求的類。當完成該類的加載時,處理返回到解釋和執(zhí)行步驟S302。
以下是對在圖3的步驟S306中執(zhí)行的類加載處理的各實施例的說明。
第一實施例圖4是用于解釋根據(jù)第一實施例在步驟S306中執(zhí)行的類加載序列(第一類加載序列)的流程圖。
在步驟S401中,類加載器103判斷解釋程序102所請求的類是否滿足預(yù)定的條件。具體而言,第一判斷方法包括檢查類名稱是否滿足以下條件(注意,Java中的類名稱采用通過句點連結(jié)的一個或多個文本字符串的形式)。
第一判斷方法1.所請求的類的類名稱與已存儲在RAM 203或其它存儲介質(zhì)中的一個或多個文本字符串完全匹配;2.所請求的類的類名稱的頭與已存儲的一個或多個文本字符串相匹配;3.所請求的類的類名稱的一部分包含已存儲的一個或多個文本字符串。
從前述的1~3中選擇解釋程序102所請求的類要滿足的預(yù)定條件,即與所請求的類的類名稱相比較的一個或多個文本字符串,作為關(guān)于JavaVM執(zhí)行設(shè)備110運行的期望條件。這些條件示出希望從應(yīng)用程序庫108加載的類的名稱要滿足的條件。因此,以下步驟將試圖從應(yīng)用程序庫108加載滿足任一條件的類。將應(yīng)用程序庫108與應(yīng)用程序106綁定,并且典型地已完成了運行評價。換句話說,保證穩(wěn)定運行。即使是存在于應(yīng)用程序庫108內(nèi)的類,在給定情況下可能使用已在系統(tǒng)程序庫內(nèi)更新的類比較好,而在另一情況下可能使用在應(yīng)用程序庫內(nèi)保證穩(wěn)定運行的類比較好。因此,可以僅對指定的類賦予從應(yīng)用程序類107進行加載的優(yōu)先權(quán)。
可以利用上述三個條件中的任何一個;例如,可允許將給定類與條件1組合,將另一類與條件2組合。
第二判斷方法包括檢查包名稱是否滿足以下條件。Java中的包名稱是指類名稱中最后句點前的部分。例如,如果類名稱是“com.xxx.project1.module1.type1.class1”,那么包名稱就是“com.xxx.project1.module1.type1”。然而對類來說不是絕對需要具有包名稱,在將名稱賦予類的情況下,為了避免類名稱沖突,或者換句話說,為了保護名稱空間(namespace),而附上包名稱?;谶@種一致思想賦予包名稱便于識別類的創(chuàng)建者(企業(yè))或類的種類第二判斷方法1.包名稱與已存儲在RAM 203或其它存儲介質(zhì)中的一個或多個文本字符串完全匹配;2.包名稱的頭與已存儲的一個或多個文本字符串相匹配;3.包名稱的一部分包含已存儲的一個或多個文本字符串。
從前述條件1~3中選擇解釋程序102所請求的類要滿足的預(yù)定條件,即與所請求的類的包名稱相比較的一個或多個文本字符串,作為關(guān)于JavaVM執(zhí)行設(shè)備110運行的期望條件。這些條件示出希望從應(yīng)用程序庫108加載的類的包名稱所要滿足的條件。因此,以下步驟試圖從應(yīng)用程序庫108加載滿足任一條件的類。將應(yīng)用程序庫108與應(yīng)用程序106綁定,并且典型地已完成了運行評價。換句話說,保證穩(wěn)定運行。即使是存在于應(yīng)用程序庫108內(nèi)的類,在給定情況下可能使用已在系統(tǒng)程序庫內(nèi)更新的類比較好,而在另一情況下可能使用在應(yīng)用程序庫內(nèi)保證穩(wěn)定運行的類比較好。
在選擇情況下,當出于安全目的不希望從應(yīng)用程序庫108加載類或包時,必須注意。例如,在Java中,以“java”或“javax”開始的包是由系統(tǒng)提供的庫,這形成了系統(tǒng)安全的基礎(chǔ)。因為從應(yīng)用程序庫108加載這種包構(gòu)成了安全違反,所以禁止從應(yīng)用程序庫108加載這種包。即使設(shè)定了前述條件,也使這樣的類或包無效。特別地,防止試圖向RAM 203設(shè)定這樣的包,即不顯示該設(shè)定序列。
通過這種方式,可以將優(yōu)先權(quán)賦予從應(yīng)用程序庫108僅加載選擇的授權(quán)包。可以利用三個條件中的任何一個;例如,可允許將給定包與條件1組合,將另一包與條件2組合。還可以使用類名稱條件和包名稱條件的混合。
如果由此在步驟S401中判斷出所請求的類滿足預(yù)定條件,則處理進入步驟S402,在步驟S402,類加載器103進行檢查以判斷該類是否存在于應(yīng)用程序庫108內(nèi)。如果該類存在于應(yīng)用程序庫108內(nèi),則處理進入步驟S403,在步驟S403,類加載器103從應(yīng)用程序庫108加載該類。
另一方面,如果在步驟S402中該類不存在于應(yīng)用程序庫108內(nèi),則處理進入步驟S404,在步驟S404,類加載器103進行檢查以判斷該類是否存在于導入庫109內(nèi)。如果判斷出該類存在于導入庫109內(nèi),則處理進入步驟S405,在步驟S405,從導入庫109加載該類。
如果在步驟S404判斷出該類不存在于導入庫109內(nèi),或者在步驟S401中判斷出所請求的類不滿足預(yù)定條件,則處理進入步驟S406,在步驟S406,類加載器103根據(jù)類路徑優(yōu)先序列搜索該類。在步驟S407中對最終是否發(fā)現(xiàn)該類做出判斷,如果最終發(fā)現(xiàn)了該類,則處理進入步驟S408,在步驟S408,類加載器103從發(fā)現(xiàn)該類的路徑加載該類,并且處理終止。另一方面,如果在步驟S407中最終未發(fā)現(xiàn)該類,則處理進入步驟S409,在步驟S409,類加載器103生成表示未能發(fā)現(xiàn)該類的異常,并且處理終止。
步驟S406~S409中的處理通常使從系統(tǒng)程序庫104加載優(yōu)先于從應(yīng)用程序庫108或?qū)霂?09加載。
根據(jù)第一類加載序列,關(guān)于第一實施例,如果類存在于應(yīng)用程序庫108或?qū)霂?09內(nèi),則從應(yīng)用程序庫108或?qū)霂?09加載該類,無論該類存在于哪一個庫中,都無需搜索系統(tǒng)程序庫104。因此,由于可以將優(yōu)先權(quán)賦予假定已確認了其運行的類并且可以使用該類,因而可表現(xiàn)為穩(wěn)定運行。
第二實施例以下是根據(jù)第二實施例使用圖5A和5B中的流程圖對第二類加載序列的說明。
圖5A和5B是用于解釋根據(jù)第二實施例在圖3的步驟S306中執(zhí)行的類加載序列(第二類加載序列)的流程圖。按照圖3,根據(jù)第二實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程與根據(jù)第一實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程類似。
在步驟S501中,類加載器103判斷解釋程序102所請求的類是否滿足預(yù)定的條件。省略對該判斷處理的說明,因為該處理與圖4的步驟S401中所示的處理相同。
如果在步驟S501中判斷出所請求的類滿足預(yù)定條件,則處理進入步驟S502,在步驟S502,類加載器103進行檢查以判斷該類是否存在于應(yīng)用程序庫108內(nèi)。如果該類存在于應(yīng)用程序庫108內(nèi),則處理進入步驟S503,在步驟S503,類加載器103從應(yīng)用程序庫108獲得版本信息。接著,在步驟S504(圖5B)中,類加載器103進行檢查以判斷該類是否存在于系統(tǒng)程序庫104內(nèi)。如果該類存在,則處理進入步驟S505,在步驟S505,類加載器103從系統(tǒng)程序庫104獲得版本信息。然后處理進入步驟S506,在步驟S506,類加載器103進行檢查以判斷在步驟S503從應(yīng)用程序庫108獲得的版本信息與在步驟S505從系統(tǒng)程序庫104獲得的版本信息是否相同。如果在此判斷出各版本相互不同,則處理進入步驟S507,在步驟S507,類加載器103從應(yīng)用程序庫108加載該類。另一方面,如果在步驟S506判斷出各版本相同,則處理進入步驟S514,在步驟S514,類加載器103從系統(tǒng)程序庫104加載該類。
如果在步驟S504中所請求的類不存在于系統(tǒng)程序庫104中,則處理進入步驟S507,在步驟S507,從應(yīng)用程序庫108加載該類。
如果在步驟S502中該類不存在于應(yīng)用程序庫108中,則處理進入步驟S508,在步驟S508,類加載器103進行檢查以判斷該類是否存在于導入庫109內(nèi)。如果判斷出該類存在于導入庫109內(nèi),則處理進入步驟S509,在步驟S509,獲得導入庫109的版本,然后,處理進入步驟S504。在這樣的情況下,在步驟S504中,類加載器103進行檢查以判斷所請求的類是否存在于系統(tǒng)程序庫104內(nèi)。如果該類存在,則處理進入步驟S505,在步驟S505,類加載器103獲得系統(tǒng)程序庫104版本信息。然后處理進入步驟S506,在步驟S506,類加載器103進行檢查以判斷在步驟S509中從導入庫109獲得的版本信息與在步驟S505中從系統(tǒng)程序庫104獲得的版本信息是否相同。如果在此判斷出各版本相互不同,則處理進入步驟S507,在步驟S507,類加載器103從導入庫109加載該類。另一方面,如果在步驟S506中判斷出各版本相同,則處理進入步驟S514,在步驟S514,類加載器103從系統(tǒng)程序庫104加載該類。
如果在步驟S508中判斷出該類不存在于導入庫109內(nèi),或者在步驟S501中判斷出所請求的類不滿足預(yù)定條件,則處理進入步驟S510,在步驟S510,類加載器103根據(jù)類路徑優(yōu)先序列搜索該類(圖5B)。在步驟S511中對最終是否發(fā)現(xiàn)該類做出判斷,如果最終發(fā)現(xiàn)了該類,則處理進入步驟S512,在步驟S512,類加載器103從發(fā)現(xiàn)該類的路徑加載該類。另一方面,如果最終未發(fā)現(xiàn)該類,則處理進入步驟S513,在步驟S513,類加載器103生成表示未能發(fā)現(xiàn)該類的異常,與圖4的步驟S406~S409類似。
可允許對系統(tǒng)程序庫104、應(yīng)用程序庫108和導入庫109分別分配其各自的版本信息。然而,可由多個庫文件構(gòu)成各庫;在這樣的情況下,可允許獲得關(guān)于包含正被搜索的類的庫文件的版本信息。
典型地,在Java環(huán)境中,使用jar文件格式作為庫。除了類文件以外,jar文件可以包含存儲多種庫信息的清單文件(manifestfile)。如果將版本信息寫入該清單文件,則可以使用這樣所寫的版本信息作為庫的版本信息。
盡管該說明使用庫的版本信息,但是如果已基于每個類分配了版本信息并可以獲得該版本信息,則可允許基于每個類來改變和加載庫;還可以將每個類的版本信息寫入清單文件。
根據(jù)第二類加載序列,關(guān)于第二實施例,比較加載類的庫的版本,并且如果版本相同,則從系統(tǒng)程序庫104加載該類,從而可以減少加載類所需的時間。當應(yīng)用程序庫108在JavaVM執(zhí)行設(shè)備110的外部時,第二類加載序列尤其有效。
即使當應(yīng)用程序庫108位于JavaVM執(zhí)行設(shè)備110內(nèi)時,第二類加載序列也可以加速類的加載或執(zhí)行。
第一個原因是由于系統(tǒng)程序庫104在系統(tǒng)內(nèi)被共享而具有高度重要性,因此系統(tǒng)程序庫104可以位于與應(yīng)用程序庫108相比具有更快的存取速度的存儲介質(zhì)內(nèi)。
第二個原因是為了提高CPU 201部分的執(zhí)行速度,可以在執(zhí)行前,將具有高度重要性的系統(tǒng)程序庫104轉(zhuǎn)換成優(yōu)化的中間代碼,或者轉(zhuǎn)換成可以由CPU 201直接執(zhí)行的本機代碼。
第三實施例以下是根據(jù)第三實施例使用圖6中的流程圖對第三類加載序列的說明。
圖6是說明根據(jù)第三實施例在圖3的步驟S306中執(zhí)行的類加載序列(第三類加載序列)的流程圖。按照圖3,根據(jù)第三實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程與根據(jù)第一實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程類似。
在步驟S601中,類加載器103判斷正在執(zhí)行的應(yīng)用程序是否將類加載的優(yōu)先權(quán)賦予類路徑搜索。為了進行該判斷,假定基于每個應(yīng)用程序?qū)⒈硎臼欠駥?yōu)先權(quán)賦予類路徑搜索的標志存儲在RAM 203中(未示出)。
如果在步驟S601中判斷出未將優(yōu)先權(quán)賦予類路徑搜索,則處理進入步驟S401,在步驟S401,類加載器103判斷解釋程序102所請求的類是否滿足預(yù)定的條件。如果在步驟S401中所請求的類不滿足該預(yù)定條件,或者如果在步驟S601中判斷出已將優(yōu)先權(quán)賦予類路徑搜索,則處理進入步驟S406,在步驟S406,類加載器103根據(jù)類路徑優(yōu)先序列搜索該類。省略對步驟S401中判斷為“是”以后的處理、以及對步驟S406以后的處理的說明,因為它們與圖4的步驟S402~S405和步驟S407~S409所示的處理相同。
關(guān)于第三實施例,第三類加載序列將優(yōu)先權(quán)賦予給定應(yīng)用程序的類路徑搜索,從而允許其它應(yīng)用程序從應(yīng)用程序庫108加載類。例如,考慮將新版本的類作為系統(tǒng)程序庫104的一部分提供的情況。在這種情況下,應(yīng)用程序?qū)⑹褂么嬖谟谙到y(tǒng)程序庫104內(nèi)的該版本的類。然而,可以設(shè)定其它應(yīng)用程序以使用存在于應(yīng)用程序庫108內(nèi)的以前版本的類。由此可以運行JavaVM執(zhí)行設(shè)備110。
作為另一例子,考慮從應(yīng)用程序庫108加載類的應(yīng)用程序??梢韵氲皆诼┒葱扪a(bug fix)之后,可能將新版本的類安裝到系統(tǒng)程序庫104中,并且可能改變?yōu)閺南到y(tǒng)程序庫104加載該類。盡管既不能容易地改變應(yīng)用程序106也不能容易地改變其中所綁定的應(yīng)用程序庫108,但是考慮到JavaVM執(zhí)行設(shè)備110內(nèi)軟件的可替換性,則很可能出現(xiàn)這種情況。在這種情況下,如果在進行包含系統(tǒng)程序庫104的軟件的替換的同時改變表示是否將優(yōu)先權(quán)賦予類路徑搜索的應(yīng)用程序106的標志,則可以根據(jù)用戶的意圖改變運行。
第四實施例以下是使用圖7A和7B中的流程圖對第四類加載序列的說明。
圖7A和7B是用于解釋根據(jù)第四實施例在圖3的步驟S306中執(zhí)行的類加載序列(第四類加載序列)的流程圖。從圖7A和7B可明顯看到,第四類加載序列形成了圖5B的第二類加載序列的步驟S506與步驟S507之間的步驟S707、以及在步驟S707中判斷為“是”之后的步驟S716。省略對第四類加載序列與第二類加載序列相同的處理的說明。按照圖3,根據(jù)第四實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程與根據(jù)第一實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程類似。
在步驟S506,類加載器103進行檢查以判斷在步驟S503從應(yīng)用程序庫108獲得的版本信息與在步驟S505從系統(tǒng)程序庫104獲得的版本信息是否相同。如果在此判斷出各版本相互不同,則處理進入步驟S707(圖7B),在步驟S707,類加載器103進行檢查以判斷是否從新版本庫加載。為了進行該判斷,在RAM 203中存在表示是否從新版本庫加載的標志(未示出)。一種情況可允許該標志存在于JavaVM執(zhí)行設(shè)備110內(nèi),也可允許該標志基于每個應(yīng)用程序或每個庫而存在。如果在步驟S707判斷出不會發(fā)生從新版本庫的加載,則處理進入步驟S507,在步驟S507,類加載器103從應(yīng)用程序庫108或從導入庫109加載該類。另一方面,如果在步驟S707判斷出會發(fā)生加載,則處理進入步驟S716,在步驟S716,從新版本的庫加載該類。
如果在步驟S506中判斷出各版本相同,則處理進入步驟S514,在步驟S514,類加載器103從系統(tǒng)程序庫104加載該類。
第五實施例以下是使用圖8中的流程圖對第五類加載序列的說明。
圖8是用于解釋根據(jù)第五實施例在圖3的步驟S306中執(zhí)行的類加載序列(第五類加載序列)的流程圖。按照圖3,根據(jù)第五實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程與根據(jù)第一實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程類似。
當解釋程序102請求類加載器103加載類時開始該處理,于是,在步驟S801,類加載器103獲得關(guān)于在當前時間正在執(zhí)行的應(yīng)用程序106的信息。為了判斷應(yīng)用程序上下文(applicationcontext),即正在執(zhí)行哪個應(yīng)用程序,處理追蹤關(guān)于正由CPU 201執(zhí)行的線程的調(diào)用棧。對從哪個應(yīng)用程序加載存儲在該棧中的且正被調(diào)用的方法類進行判斷。在步驟S802,類加載器103根據(jù)類路徑搜索所請求的類所在的庫。在步驟S803,對是否發(fā)現(xiàn)包含該類的庫進行判斷,如果發(fā)現(xiàn)了該庫,則處理進入步驟S804,在步驟S804,存儲所發(fā)現(xiàn)的庫的路徑。接著,在步驟S805,獲得該庫的版本。在步驟S806,類加載器103根據(jù)在步驟S801獲得的應(yīng)用程序信息和在步驟S804和S805獲得的庫信息和版本信息來判斷是否應(yīng)該從該庫加載該類。如果判斷出不從該庫加載該類,則處理返回到步驟S802。
根據(jù)圖9中的庫表901進行步驟S806中的判斷。該表被存儲在RAM 203、閃速ROM 207、或硬盤驅(qū)動器209中。
圖9示出根據(jù)第五實施例的庫信息表的例子的圖。
其中存儲有庫、版本、以及加載該類的優(yōu)先庫的位置。
通過使用該庫信息表901,可以根據(jù)應(yīng)用程序106信息、庫信息、以及如果必要的話甚至還有版本信息來確定加載該類的庫的位置。
例如,當正在執(zhí)行應(yīng)用程序AAA時,接受加載類YYY的請求。假定類YYY包含在庫aaa.jar內(nèi)。在這種情況下,參照庫信息表901顯示出與“應(yīng)用程序=AAA”和“庫=aaa.jar”相對應(yīng)的用于類加載的優(yōu)先庫的位置是應(yīng)用程序庫。
如果在步驟S802的搜索中所發(fā)現(xiàn)的庫是系統(tǒng)程序庫104,則該庫與由庫信息表901指示的應(yīng)用程序庫不匹配。因此,在步驟S806,類加載器103判斷出不應(yīng)該從系統(tǒng)程序庫104加載該類,返回到步驟S802,并從由類路徑表示的下一個搜索位置開始搜索該類。
如果通過第二搜索發(fā)現(xiàn)的庫是應(yīng)用程序庫108,則該庫與由庫信息表901指示的應(yīng)用程序庫匹配。因此,在步驟S806,類加載器103判斷出應(yīng)該從應(yīng)用程序庫108加載該類,并進入步驟S807,在步驟S807,類加載器103從該庫加載該類。
作為另一例子,當正在執(zhí)行應(yīng)用程序BBB時,生成加載類YYY的請求。按照前述例子,假定類YYY包含在庫aaa.jar內(nèi)。假定在圖8的步驟S802中在系統(tǒng)程序庫104內(nèi)發(fā)現(xiàn)類YYY。在這樣的情況下,庫信息表901中用于類加載的優(yōu)先庫的位置為系統(tǒng)程序庫,在步驟S806中,類加載器103判斷出應(yīng)該從系統(tǒng)程序庫104加載該類,并且處理進入步驟S807。
可允許存在于庫信息表901中的關(guān)于用于類加載的優(yōu)先庫的位置的信息示出應(yīng)該進行加載的位置。因此,例如,可允許呈現(xiàn)應(yīng)用程序庫或系統(tǒng)程序庫等位置類別,還可允許存儲直接指向庫的真實庫路徑。根據(jù)該例子,在判斷是否應(yīng)該加載類時,不使用在步驟S805中獲得的版本信息。原因是與圖9的庫信息表901中的應(yīng)用程序AAA、庫aaa.jar相對應(yīng)的版本字段是空的。
下面的例子是使用版本信息的說明。
當正在執(zhí)行應(yīng)用程序CCC時,生成加載類YYY的請求。按照前述例子,類YYY包含在庫aaa.jar內(nèi)。假定在步驟S804中發(fā)現(xiàn)的庫為系統(tǒng)程序庫104。在步驟S805,獲得系統(tǒng)程序庫104的版本。在這樣的情況下,在步驟S806,類加載器103獲得庫信息表910中的與“應(yīng)用程序=CCC”、“庫=aaa.jar”和“用于類加載的優(yōu)先庫的位置=系統(tǒng)程序庫”相對應(yīng)的版本信息。
在圖9中,與“應(yīng)用程序=CCC”和“庫=aaa.jar”相對應(yīng)的系統(tǒng)程序庫版本信息為“2.0以上”。
因此,在步驟S806,對在步驟S805中獲得的版本信息是否滿足該版本信息條件進行判斷。如果滿足該條件,則做出應(yīng)該從該庫加載該類的判斷。
在步驟S802根據(jù)類路徑進行搜索,其間,如果在步驟S803中最終沒有滿足步驟S806中的條件的庫,則處理進入步驟S808,在步驟S808,類加載器103檢查是否已發(fā)現(xiàn)包含所請求的類的庫,或換句話說,檢查是否存在在步驟S804中存儲的庫。盡管發(fā)現(xiàn)在此存儲的庫包含該類,但是該庫是由于步驟S806中的條件判斷而被拒絕的庫。然而,如果已發(fā)現(xiàn)了庫,那么該庫包含所請求的類,由此處理進入步驟S807,在步驟S807加載該類。另一方面,如果在步驟S808未發(fā)現(xiàn)庫,則處理進入步驟S809,在步驟S809,類加載器103使得顯示大意為未能發(fā)現(xiàn)該類的異常,并且終止處理。
除上述實施例以外,可以想到存在多個發(fā)現(xiàn)的庫的各種實施例。在這種情況下,可以想到可應(yīng)用如第一到第四類加載序列中所述的多種庫選擇方法,這些方法可以包括但不局限于以下方法1.將優(yōu)先權(quán)賦予首先發(fā)現(xiàn)的庫;2.將優(yōu)先權(quán)賦予應(yīng)用程序庫108;或3.將優(yōu)先權(quán)賦予新的庫版本。
當根據(jù)圖8流程圖的步驟S802中的類路徑進行庫搜索時,可以想到關(guān)于在此的搜索方法可以有多種變化。在這樣的情況下,可以想到可應(yīng)用如第一到第四類加載序列中所述的多種庫選擇方法,這些方法可以包括但不局限于以下方法1.將優(yōu)先權(quán)賦予首先發(fā)現(xiàn)的庫;2.將優(yōu)先權(quán)賦予應(yīng)用程序庫108;或3.將優(yōu)先權(quán)賦予新的庫版本。
第六實施例以下是使用圖10A和10B中的流程圖對第六類加載序列的說明。
圖10A和10B是說明根據(jù)第六實施例在圖3的步驟S306中執(zhí)行的類加載序列(第六類加載序列)的流程圖。按照圖3,根據(jù)第六實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程與根據(jù)第一實施例的JavaVM執(zhí)行設(shè)備110的構(gòu)成和應(yīng)用程序執(zhí)行序列的基本流程類似。
在步驟S1001,按照圖8的步驟S801,類加載器103獲得關(guān)于在當前時間正執(zhí)行的應(yīng)用程序106的信息。在步驟S1002,類加載器103根據(jù)類路徑搜索所請求的類。因此,在步驟S1003對是否發(fā)現(xiàn)包含該類的庫進行判斷。如果發(fā)現(xiàn)了包含該類的庫,則處理進入步驟S1004,在步驟S1004獲得庫名稱。然后處理進入步驟S1005,在步驟S1005,類加載器檢查是否存在下一個優(yōu)先庫。通過參照圖11中的庫信息表1101進行該判斷,庫信息表1101是庫信息表901的改寫。
圖11示出根據(jù)第六實施例的庫信息表的例子的圖。
以下是對圖9所示的庫信息表901與圖11所示的表1101之間的不同的說明。在圖9的表901中,存在僅關(guān)于加載類的優(yōu)先庫的一個位置的信息。另一方面,在圖11中,存在包含從第一優(yōu)先庫到第三優(yōu)先庫的一列優(yōu)先庫信息。盡管圖11中的列表示出到第三優(yōu)先庫,但是優(yōu)先庫的數(shù)量不局限于此。
在步驟S1005,類加載器103基于在步驟S1001中獲得的應(yīng)用程序信息和在步驟S1004中獲得的庫名稱來參照庫信息表1101,并檢查是否存在下一個優(yōu)先庫的位置。當執(zhí)行該步驟時,類加載器103自然檢查是否存在第一優(yōu)先庫的位置。該檢查方法與使用庫信息表901所述的方法類似。
如果在步驟S1005中存在優(yōu)先庫的位置,則處理進入步驟S1006,在步驟S1006,獲得優(yōu)先庫的位置。在步驟S1007,類加載器103檢查在該庫位置處是否實際存在具有在步驟S1004中獲得的庫名稱的庫。如果該庫實際存在于該位置,則處理進入步驟S1008,在步驟S1008,類加載器103檢查所請求的類是否存在于該庫內(nèi)。如果該類存在于該庫內(nèi),則處理進入步驟S1009(圖10B),在步驟S1009,類加載器103將該庫存儲在RAM 203中或其它位置,進入步驟S1010,在步驟S1010,類加載器103獲得庫版本。在步驟S1011,類加載器103檢查該版本是否符合庫信息表1101的版本條件。該檢查方法與使用庫信息表901所述的方法相同。如果該版本符合該版本條件,則處理進入步驟S1012,在步驟S1012,類加載器103從該庫加載該類。
另一方面,如果在步驟S1007中實際不存在該庫,或者如果在步驟S1008中該類不存在于該庫內(nèi),或者如果在步驟S1011中該版本不符合該版本條件,則處理返回步驟S1005,在步驟S1005,搜索下一個優(yōu)先庫的位置。利用在此所述的循環(huán)處理如此進行對優(yōu)先庫的搜索,該循環(huán)處理從第一優(yōu)先庫開始并依次進行。
如果在步驟S1005中不存在下一個優(yōu)先庫,則處理進入步驟S1013(圖10B),在步驟S1013,類加載器103檢查是否存在在步驟S1009中存儲的庫。在此所存儲的庫是已知包含所請求的類的庫。如果在步驟S1013中存在所存儲的庫,則處理進入步驟S1012,在步驟S1012,從該庫加載該類。另一方面,如果在步驟S1013中不存在所存儲的庫,或者在步驟S1003中未能發(fā)現(xiàn)包含該類的庫,則處理進入步驟S1014(圖10B),在步驟S1014,類加載器103生成表示未能發(fā)現(xiàn)該類的異常。
盡管說明了根據(jù)各實施例的類加載序列,但是可以基于每個應(yīng)用程序改變類加載序列。可以使存在于JavaVM 101內(nèi)的類加載器103識別在給定時間正在執(zhí)行的應(yīng)用程序,并替換類加載序列。為了判斷應(yīng)用程序上下文,即正在執(zhí)行哪個應(yīng)用程序,處理追蹤關(guān)于正由CPU 201執(zhí)行的線程的調(diào)用棧。對從哪個應(yīng)用程序加載存儲在該棧中的且正被調(diào)用的方法類進行判斷。
盡管附圖中未示出,但是本領(lǐng)域的技術(shù)人員應(yīng)該明白,還可以通過給各應(yīng)用程序安裝類加載器或應(yīng)用程序類加載器,基于每個應(yīng)用程序改變類加載序列。在這樣的情況下,應(yīng)用程序類加載器間的差異標識各應(yīng)用程序。
根據(jù)本實施例,在本說明中使用Java編程語言、以及使用Java編程語言的程序和類作為例子。然而,本領(lǐng)域的技術(shù)人員應(yīng)該理解,本發(fā)明的本質(zhì)通常適用于面向?qū)ο蟮某绦驁?zhí)行設(shè)備,而不是專用于Java系統(tǒng)。
其它實施例盡管已說明了本發(fā)明的實施例,但是可允許將本發(fā)明應(yīng)用于由多個裝置構(gòu)成的系統(tǒng),并且還可將本發(fā)明應(yīng)用于由單個裝置構(gòu)成的設(shè)備。
本發(fā)明還可這樣來實現(xiàn)直接或遠程向系統(tǒng)或設(shè)備提供實現(xiàn)這些實施例的功能的軟件程序,通過系統(tǒng)或設(shè)備內(nèi)的計算機讀出并執(zhí)行所提供的程序。在這種情況下,只要具有程序的功能,格式無需是程序格式。
為了利用計算機實現(xiàn)本發(fā)明的功能處理,本身安裝在該計算機中的程序代碼也可以實現(xiàn)本發(fā)明。換句話說,本發(fā)明的權(quán)利要求還包括本身實現(xiàn)本發(fā)明的功能處理的計算機程序。在這種情況下,只要具有程序的功能,該程序的格式可以是目標代碼、由解釋程序執(zhí)行的程序、向操作系統(tǒng)提供的腳本數(shù)據(jù)或其它格式。
可使用各種記錄介質(zhì)來提供該程序。例子包括但不局限于硬盤驅(qū)動器、光盤、磁光盤、MO、CD-ROM、CD-R、CD-RW、磁帶、非易失性存儲卡、ROM、或DVD,其中DVD包括但不局限于DVD-ROM或DVD-R。
作為另一種程序提供方法,還可以這樣來提供程序使用客戶計算機上的瀏覽器連接到因特網(wǎng)上的網(wǎng)頁,從該網(wǎng)頁將該程序下載到硬盤驅(qū)動器或其它記錄介質(zhì)。在這種情況下,可允許所下載的是本發(fā)明的計算機程序本身,或者是包含自動安裝功能的壓縮文件。還可以通過將構(gòu)成本發(fā)明的程序的程序代碼分成多個文件,并從不同的網(wǎng)頁分別下載各文件來實現(xiàn)。換句話說,本發(fā)明的權(quán)利要求也包括允許多個用戶下載實現(xiàn)本發(fā)明的功能處理的程序文件的萬維網(wǎng)(World Wide Web)服務(wù)器。
還可以對本發(fā)明的程序進行加密,將該程序存儲在CD-ROM或其它記錄介質(zhì)上,并將該程序分發(fā)給用戶。在這種情況下,允許滿足預(yù)定條件的用戶通過因特網(wǎng)從網(wǎng)頁下載解密該加密的密鑰信息,并以可執(zhí)行格式將加密程序安裝在計算機上。
還可以通過使計算機執(zhí)行所讀出的程序,以實現(xiàn)實施例功能的格式以外的格式來實現(xiàn)。例如,使運行在計算機上的操作系統(tǒng)或其它軟件進行全部或部分實際處理,該處理也可以實現(xiàn)實施例的功能。
還可允許將從記錄介質(zhì)讀出的程序?qū)懭氲桨惭b在計算機內(nèi)的功能擴展板、或與計算機連接的功能擴展單元中所內(nèi)置的存儲器中。在這種情況下,內(nèi)置在功能擴展板或功能擴展單元中的CPU或其它硬件根據(jù)程序指令進行全部或部分實際處理,該處理實現(xiàn)實施例的功能。
盡管參考典型實施例說明了本發(fā)明,但應(yīng)當理解,本發(fā)明不局限于所公開的典型實施例。以下權(quán)利要求書的范圍符合最寬的解釋,以包含所有這類修改和等同結(jié)構(gòu)和功能。
權(quán)利要求
1.一種執(zhí)行計算機程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行計算機程序;以及加載單元,用于加載當正在執(zhí)行該計算機程序時所請求的類,其中,所述加載單元加載與正在執(zhí)行的該計算機程序相對應(yīng)的類。
2.根據(jù)權(quán)利要求1所述的執(zhí)行設(shè)備,其特征在于,所述加載單元從與正在執(zhí)行的該計算機程序相對應(yīng)的位置加載所述執(zhí)行單元所請求的類。
3.根據(jù)權(quán)利要求1所述的執(zhí)行設(shè)備,其特征在于,所述加載單元從與正在執(zhí)行的該計算機程序相對應(yīng)的庫加載該類。
4.根據(jù)權(quán)利要求1所述的執(zhí)行設(shè)備,其特征在于,所述加載單元具有用于存儲與該計算機程序相對應(yīng)的庫的存儲單元,并且所述加載單元從存儲在該存儲單元中的與正在執(zhí)行的該計算機程序相對應(yīng)的庫加載該類。
5.一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及搜索單元,用于搜索該應(yīng)用程序所請求的類,其中,所述搜索單元以應(yīng)用程序庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行搜索。
6.根據(jù)權(quán)利要求5所述的執(zhí)行設(shè)備,其特征在于,在請求該類的應(yīng)用程序滿足給定條件的情況下,所述搜索單元以應(yīng)用程序庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行搜索。
7.根據(jù)權(quán)利要求6所述的執(zhí)行設(shè)備,其特征在于,在請求該類的應(yīng)用程序不滿足給定條件的情況下,所述搜索單元搜索類路徑中設(shè)定的庫。
8.一種執(zhí)行計算機程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行計算機程序;以及搜索單元,用于搜索該計算機程序所請求的類,其中,所述搜索單元以導入庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行搜索。
9.一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及加載單元,用于加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫版本不同于系統(tǒng)程序庫版本的情況下,所述加載單元從該應(yīng)用程序庫加載該類。
10.根據(jù)權(quán)利要求9所述的執(zhí)行設(shè)備,其特征在于,在應(yīng)用程序庫版本和系統(tǒng)程序庫版本相同的情況下,所述加載單元從該系統(tǒng)程序庫加載該類。
11.一種執(zhí)行應(yīng)用程序的執(zhí)行設(shè)備,該執(zhí)行設(shè)備包括執(zhí)行單元,用于執(zhí)行應(yīng)用程序;以及加載單元,用于加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫內(nèi)的該類的版本不同于系統(tǒng)程序庫內(nèi)的該類的版本的情況下,所述加載單元從該應(yīng)用程序庫加載該類。
12.根據(jù)權(quán)利要求11所述的執(zhí)行設(shè)備,其特征在于,在應(yīng)用程序庫版本和系統(tǒng)程序庫版本相同的情況下,所述加載單元從該系統(tǒng)程序庫加載該類。
13.一種執(zhí)行計算機程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行計算機程序;以及加載當正在執(zhí)行該計算機程序時所請求的類,其中,加載與正在執(zhí)行的該計算機程序相對應(yīng)的類。
14.根據(jù)權(quán)利要求13所述的執(zhí)行方法,其特征在于,從與正在執(zhí)行的該計算機程序相對應(yīng)的庫加載該類。
15.一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及搜索該應(yīng)用程序所請求的類,其中,以應(yīng)用程序庫優(yōu)先而不是以系統(tǒng)程序庫優(yōu)先進行該搜索。
16.一種執(zhí)行計算機程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行計算機程序;以及搜索該計算機程序所請求的類,其中,該搜索將優(yōu)先權(quán)給予導入庫而不是系統(tǒng)程序庫。
17.一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫版本不同于系統(tǒng)程序庫版本的情況下,從該應(yīng)用程序庫加載該類。
18.根據(jù)權(quán)利要求17所述的執(zhí)行方法,其特征在于,在應(yīng)用程序庫版本和系統(tǒng)程序庫版本相同的情況下,從該系統(tǒng)程序庫加載該類。
19.一種執(zhí)行應(yīng)用程序的執(zhí)行方法,該執(zhí)行方法包括以下步驟執(zhí)行應(yīng)用程序;以及加載當正在執(zhí)行該應(yīng)用程序時所請求的類,其中,在應(yīng)用程序庫內(nèi)的該類的版本不同于系統(tǒng)程序庫內(nèi)的該類的版本的情況下,從該應(yīng)用程序庫加載該類。
20.根據(jù)權(quán)利要求19所述的執(zhí)行方法,其特征在于,在應(yīng)用程序庫版本和系統(tǒng)程序庫版本相同的情況下,從該系統(tǒng)程序庫加載該類。
全文摘要
一種執(zhí)行計算機程序的執(zhí)行設(shè)備和方法,該執(zhí)行設(shè)備執(zhí)行計算機程序,并加載當正在執(zhí)行該計算機程序時所請求的類。所加載的類是響應(yīng)于正在執(zhí)行的計算機程序的類。
文檔編號G06F9/46GK101017436SQ200710002818
公開日2007年8月15日 申請日期2007年2月1日 優(yōu)先權(quán)日2006年2月1日
發(fā)明者大井浩一 申請人:佳能株式會社