專利名稱:程序生成裝置的制作方法
本申請是基于在日本提出的申請?zhí)枮镹o.2000-43499的申請的,并且該申請的內(nèi)容在這里引用來作為參考。
本發(fā)明涉及從以對象指向語言描述的源程序生成執(zhí)行程序并執(zhí)行該程序的技術(shù)。
原來,已知有各種在內(nèi)部機器(作為便攜電話、STB(機頂盒)、電視等使用的計算機)或個人計算機(下面稱為PC)中執(zhí)行那里生成的執(zhí)行程序的程序執(zhí)行系統(tǒng),這些執(zhí)行程序通過編譯用戶程序設計語言描述的源程序并進行鏈接等來生成。
下面說明已有的程序執(zhí)行系統(tǒng),該系統(tǒng)用于根據(jù)以對象指向語言即Java(Java是SunMicrosystem公司的商標)描述的源程序使內(nèi)部機器動作。
上述已有程序執(zhí)行系統(tǒng)由程序生成裝置和內(nèi)部機器即終端裝置構(gòu)成。
程序生成裝置編譯并鏈接1個用戶類源程序和對于上述源程序使用的每個終端裝置上不同的基礎庫內(nèi)的程序,在每個終端裝置上,生成不同的輕量用戶類文件。這里,基礎庫對每種終端裝置準備不同的程序,各個基礎庫作為文件群含有依賴于終端裝置、與終端裝置固有的硬件控制直接相關(guān)的程序,如控制在顯示單元上的顯示或數(shù)據(jù)通信等的程序。
把每個終端裝置上生成的輕量用戶類文件存儲在對應的終端裝置內(nèi),各終端裝置按照輕量用戶類文件動作。
下面更詳細地說明上述已有程序執(zhí)行系統(tǒng),其假設硬件結(jié)構(gòu)的一部分不同的兩種終端裝置A和終端裝置B、從同一用戶類的源程序分別生成輕量用戶類文件、在對應的終端裝置上執(zhí)行生成的各個輕量用戶類文件。
對于終端裝置A和B,分別在
圖1和2中表示成為生成進行同樣的處理的基礎類文件的基礎的用Java描述的源程序的一個例子。對于終端裝置A和B,在圖3中表示出成為生成共同使用的用戶類文件的基礎的用Java描述的源程序的一個例子。這些圖中,僅表示出字段的定義,省略了關(guān)于該方法中的具體使用這些字段的描述。
如圖1所示,類Built in classX使用實例字段privateX1、privateX2、privateX3和實例字段fieldX1、fieldX2。實例字段privateX1、privateX2、privateX3中由于使用限定語private定義,所以禁止來自包含在其它類內(nèi)的方法的訪問。實例字段fieldX1、fieldX2容許來自其它類的訪問。
類Built_in_classY使用實例字段privateY1、privateY2和實例字段fieldY1、fieldY2、fieldY3。實例字段privateY1、privateY2中由于使用限定語private定義,所以禁止來自包含在其它類內(nèi)的方法的訪問。實例字段fieldY1、fieldY2、fieldY3容許來自其它類的訪問。
如圖2所示,與上述相同,類Built in classX使用禁止來自包含在其它類內(nèi)的方法的訪問的privateX1和容許來自其它類的訪問的實例字段fieldX1、fieldX2。類Built_in_classY使用禁止來自包含在其它類內(nèi)的方法的訪問的privateY1、privateY2、privateY3和容許來自其它類的訪問的實例字段fieldY1、fieldY2、fieldY3。
這些源程序中,類Built_in_classX由Built_in_classY承接,Built_in_classY由類User_ class承接。
對于終端裝置A和B,編譯類Built_in_classX和Built_in_classY,把它們分別構(gòu)成一個基礎類文件。
如這些所示,不論是終端裝置A或是終端裝置B,都使用具有相同功能的同一名稱的類Built_in_classX和Built_in_classY。其中,使用的實例字段是容許來自其它類的訪問的,使用表示相同內(nèi)容、相同名稱的字段,例如fieldX1、fieldX2、fieldY1、fieldY2、fieldY3。
對于禁止來自其它類的訪問的字段,使用表示不同個數(shù)的不同內(nèi)容的字段,例如終端裝置A的privateX1、privateX2、privateX3和終端裝置B的privateX1。
終端A的privateX1和終端裝置B的privateX1名稱相同,但表示不同的內(nèi)容。對于終端裝置A的privateY1、privateY2和終端裝置B的privateY1、privateY2也同樣,雖然名稱相同,卻表示不同內(nèi)容。
這些使用限定語private定義的對終端裝置A的實例字段privateX1、privateX2、privateX3、privateY1、privateY2和對終端裝置B的實例字段privateX1、privateY1、privateY2、privateY3用于進行對應于終端裝置A、終端裝置B的每一個的硬件的控制,這是依賴于終端裝置的基礎類的設計,下面把這些叫作類設計依賴文件。
對于這些以外的終端裝置A、終端裝置B,共同的實例字段fieldX1、fieldX2、fieldY1、fieldY2、fieldY3用于對終端裝置A、終端裝置B進行共同控制,這是不依賴于終端裝置的基礎類設計的,下面把它們叫作類設計非依賴文件。
編譯類User_class并將其構(gòu)成一個用戶類文件。如圖3所示,類User_class使用實例字段fieldU1、fieldU2。
上述程序生成裝置在每個類上對上述類Built_in_classX、Built_in_ classY和類User_class的每一個使用的實例字段分配一個號碼,生成如圖4~7所示的實例字段偏置表。
圖4和圖5表示基礎類文件的實例字段偏置表,圖6和圖7表示用戶類文件的實例字段偏置表,圖4和圖6分別表示終端裝置A的基礎類文件、用戶類文件的實例字段偏置表,圖5和圖7分別表示終端裝置B的基礎類文件、用戶類文件的實例字段偏置表。
如圖4和圖5所示,類Built_in_classY的實例字段偏置表中對于承接類Built_in_classX的實例字段分配與類Built_in_classX相同的偏置號。具體說,終端裝置A對于fieldX1、fieldX2、privateX1、privateX2、privateX3分配與類Built_in_classX相同的偏置號。終端裝置B對于fieldX1、fieldX2、privateX1分配與類Built_in_classX相同的偏置號。
如圖6和圖7所示,類User_class的實例字段偏置表中對于承接類Built_in_classY的實例字段分配與類Built_in_classY相同的偏置號。具體說,終端裝置A對于fieldX1、fieldX2、privateX1、privateX2、privateX3、fieldY1、fieldY2、fieldY3、privateY1、privateY2分配與類Built_in_classY相同的偏置號。對于終端裝置B同樣如此。
圖6和圖7所示的類User_class的實例字段偏置表中,對于實例字段fieldU1、fieldU2,終端裝置A分配偏置號[11]和[12],終端裝置B分配偏置號[10]和[11]。
接著,上述程序生成裝置根據(jù)這些表進行在類文件中的命令中作為操作數(shù)使用的實例字段的偏置號化,消除常數(shù)存儲庫內(nèi)的識別信息。這樣,從同樣一個用戶類源程序在每個終端裝置上生成不同輕量用戶類文件。
這樣,已有的程序執(zhí)行系統(tǒng)中存在的問題是盡管是同一用戶類源程序,也必須進行終端裝置(換句話說,輕量基礎類文件)的種類數(shù)目的鏈接。
為解決上述問題,本發(fā)明作為一種按對象指向語言描述的源程序生成執(zhí)行程序的程序生成裝置,其目的是提供在對于多種不同終端裝置的每一個具有不同基礎類、生成各終端裝置用的執(zhí)行程序的程序生成裝置中,在編譯鏈接公用程序時,不需要和每一個終端裝置鏈接的程序生成裝置、程序生成方法、記錄程序生成程序的記錄媒體、虛擬機器、程序執(zhí)行方法、記錄程序執(zhí)行程序的記錄媒體、記錄由所述程序生成裝置生成的程序的記錄媒體。
為達到上述目的,按照本發(fā)明的程序生成裝置,對每個終端裝置定義不同的依賴變量并對每個終端裝置定義公用的非依賴變量,把具有承接關(guān)系的多個類定義的多個類文件鏈接到每個終端裝置而分別生成輕量類文件,包括存儲裝置,存儲具有承接關(guān)系的多個類分別定義的多個類文件、對各個類定義由變量名分別識別的依賴變量和非依賴變量,各個類文件包括每個變量的變量名;號生成裝置,在鏈接每一個終端裝置時,對所述存儲裝置上存儲的各個類文件定義的變量的每一個生成偏置號,以便使多個終端裝置中付加相同變量名的非依賴變量由相同的號構(gòu)成;輕量類文件生成裝置,對所述存儲裝置上存儲的各個類文件,對每個變量把相應的變量名置換為所述號生成裝置生成的偏置號,生成輕量類文件。
根據(jù)這樣的結(jié)構(gòu),由于鏈接每一個終端裝置時,在不同終端裝置中用相同的變量名識別的非依賴變量具有相同的號,對于在所述存儲裝置中存儲的各類文件上定義的每個變量生成不同的偏置號、生成置換所生成的偏置號的輕量類文件,通過使用所述輕量類文件,編譯鏈接公用程序時,不需要和每一個終端裝置鏈接。
這里,按照本發(fā)明的程序生成裝置,所述號生成裝置對于依賴變量和非依賴變量根據(jù)不同的號體系對每個變量生成偏置號。
根據(jù)這樣的結(jié)構(gòu),由于對于依賴變量和非依賴變量由不同的號體系生成偏置號,實際上,不同終端裝置中用相同的變量名識別的非依賴變量可具有相同的號。
這里,按照本發(fā)明的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
根據(jù)這樣的結(jié)構(gòu),在虛擬機器中,能使用輕量類文件含有的、對每一類計數(shù)的非依賴變量計數(shù)和依賴變量計數(shù)生成實例。
這里,按照本發(fā)明的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,對于所述第二類,所述號生成裝置根據(jù)不同的號體系對于僅對第二類定義的依賴變量和承接第一類的依賴變量生成每一變量的偏置號。
根據(jù)這樣的結(jié)構(gòu),由于在所述第二類中,對于僅在第二類中定義的依賴變量和從第一類承接來的依賴變量由不同的號體系生成偏置號,可確實區(qū)分開僅在第二類中定義的依賴變量和從第一類承接來的依賴變量。
這里,按照本發(fā)明的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
根據(jù)這樣的結(jié)構(gòu),在虛擬機器中,能使用輕量類文件含有的、對每一類計數(shù)的非依賴變量計數(shù)和依賴變量計數(shù)生成實例。
這里,按照本發(fā)明的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,對于所述第二類,所述號生成裝置根據(jù)一種號體系對于僅對第二類定義的依賴變量和承接第一類的依賴變量生成每一變量的偏置號。
由于在所述第二類中,對于僅在第二類中定義的依賴變量和從第一類承接來的依賴變量由1個號體系生成偏置號,所述號生成裝置使用的號體系少,管理容易。
這里,按照本發(fā)明的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
根據(jù)這樣的結(jié)構(gòu),在虛擬機器中,能使用輕量類文件含有的、對每一類計數(shù)的非依賴變量計數(shù)和依賴變量計數(shù)生成實例。
這里,按照本發(fā)明的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,所述號生成裝置對于全部依賴變量和非依賴變量根據(jù)一種號體系生成偏置號,這里,對于所述第二類,對于僅對第二類定義的變量和承接第一類的變量隔開一定間隔生成每一變量的偏置號。
根據(jù)這樣的結(jié)構(gòu),對于全部依賴變量和非依賴變量由一個號體系生成偏置號,這里,由于在所述第二類中,對于僅在第二類中定義的依賴變量和從第一類承接來的依賴變量隔開一定間隔來生成偏置號,所以偏置號的管理容易。
這里,按照本發(fā)明的程序生成裝置,所述輕量類文件生成裝置還對每一類計算表示相應類上包括的非依賴變量的數(shù)目的非依賴變量計數(shù),把計算出的非依賴變量計數(shù)和作為固定值的依賴變量計數(shù)相加得到的計數(shù)追加到輕量類文件上。
根據(jù)這樣的結(jié)構(gòu),在虛擬機器中,能使用輕量類文件含有的、對每一類計數(shù)的非依賴變量計數(shù)和依賴變量計數(shù)生成實例。
這里,本發(fā)明的一種按照程序生成裝置生成的輕量類文件動作的虛擬機器,包括存儲裝置,存儲權(quán)利要求1的程序生成裝置生成的輕量類文件;實例生成裝置,讀出所述輕量類文件,根據(jù)讀出的輕量類文件內(nèi)的每一個變量的偏置號生成實例;執(zhí)行裝置,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。
根據(jù)這樣的結(jié)構(gòu),由于根據(jù)所述程序生成裝置生成的輕量類文件內(nèi)的每一個變量的偏置號生成實例,所以編譯鏈接公用程序時,就不要各終端裝置的連接,從而能夠在各終端裝置執(zhí)行這樣生成的程序。
這里,本發(fā)明的一種按照程序生成裝置生成的輕量類文件動作的虛擬機器,包括存儲裝置,存儲權(quán)利要求3的程序生成裝置生成的輕量類文件;實例生成裝置,讀出所述輕量類文件,根據(jù)對讀出的輕量類文件包括的每一類的計算出的非依賴變量計數(shù)和依賴變量計數(shù),在存儲器上分別確保第一區(qū)域和第二區(qū)域,把指向所述第一區(qū)域的指針存儲在所述第二區(qū)域中,從而生成實例;執(zhí)行裝置,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。權(quán)利要求11也可以。
根據(jù)這樣的結(jié)構(gòu),由于根據(jù)包含在所述輕量類文件中的第一表和第二表,在存儲器上分別確保第一區(qū)域和第二區(qū)域、把對第一區(qū)域的指針存儲在所述第二區(qū)域中,由此來生成實例,因此可確實生成實例。
本發(fā)明的這些和其它目的、優(yōu)點和特征從下面的結(jié)合附圖的描述中變得更明顯,這些附示出本發(fā)明的特定實施例。
附圖中圖1表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置A中成為生成進行處理的基礎類文件的基礎的以Java描述的源程序的一個例子;圖2表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置B中成為生成進行處理的基礎類文件的基礎的用Java描述的源程序的一個例子;圖3表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置A和B中成為生成共同用戶類文件的基礎的用Java描述的源程序的一個例子;圖4表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置A中對基礎類文件的實例字段偏置表;圖5表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置B中基礎類文件的實例字段偏置表;圖6表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置A中用戶類文件的實例字段偏置表;圖7表示在已有的程序執(zhí)行系統(tǒng)中,在終端裝置B中用戶類文件的實例字段偏置表;圖8表示程序執(zhí)行系統(tǒng)1的結(jié)構(gòu)框圖;圖9表示程序生成裝置10從基礎類源程序511生成輕量基礎類文件541的動作;圖10表示程序生成裝置10從用戶類源程序512生成輕量用戶類文件542的動作;圖11表示對應于基礎類Built_in_classX和基礎類Built_in_classY生成的類設計非依賴字段偏置表;圖12(a)表示在終端裝置A中,對應于基礎類Built_in_classX和基礎類Built_in_classY生成的類設計依賴字段偏置表;(b)表示在終端裝置B中,對應于基礎類Built_in_classX和基礎類Built_in_classY生成的類設計依賴字段偏置表;圖13表示用戶類User_class的類設計非依賴字段偏置表;圖14表示在終端裝置A中生成的用戶類User_class的實例;圖15表示在終端裝置B中生成的用戶類User_class的實例;圖16(a)表示變換前的Java的用戶類的類文件的例子;(b)表示變換后的Java的用戶類的類文件的例子;圖17表示成為編譯后生成基礎類文件的基礎的Java程序的例子;圖18表示變換后的getfield命令的操作數(shù)結(jié)構(gòu);圖19(a)表示終端裝置A的變換前的基礎Built_in_classY;(b)表示終端裝置B的變換前的基礎類Built_in_classY;圖20表示基礎類的類ID對照表的例子;圖21表示用戶類的類ID對照表的例子;圖22表示終端裝置A和B共同的輕量基礎類文件的類設計非依賴字段計數(shù)表的例子;圖23表示終端裝置A和B共同的輕量用戶類文件的類設計非依賴字段計數(shù)表的例子;圖24(a)表示終端裝置A的輕量基礎類文件的類設計依賴字段計數(shù)表的例子;(b)表示終端裝置B的輕量基礎類文件的類設計依賴字段計數(shù)表的例子;圖25表示基出類文件的鏈接處理的順序的流程圖;圖26表示偏置表生成處理的具體流程圖;圖27表示命令變換的具體流程圖;圖28表示用戶類文件的鏈接處理的順序的流程圖;圖29表示偏置表生成處理的具體流程圖30表示命令變換的具體流程圖;圖31表示終端裝置20的命令執(zhí)行處理的順序的流程圖,接著是圖32;圖32表示終端裝置20的命令執(zhí)行處理的順序的流程圖,接自圖31;圖33表示成為編譯后生成類文件的基礎的Java程序的例子;圖34(a)表示在程序執(zhí)行系統(tǒng)1中,對應于圖33所示的Java程序生成的實例;(b)表示在其它程序執(zhí)行系統(tǒng)1中,對應于圖33所示的Java程序生成的實例;圖35表示成為編譯后生成類文件的基礎的Java程序的例子;圖36(a)表示對應于圖35所示的Java程序生成的變換后的getfield命令的操作數(shù),對應于類A;(b)表示對應于圖35所示的Java程序生成的變換后的getfield命令的操作數(shù),對應于類B;圖37表示在程序執(zhí)行系統(tǒng)2中,對應于基礎類生成的類設計非依賴字段偏置表;圖38(a)表示在終端裝置A中對應于基礎類生成的類設計依賴字段偏置表;(b)表示在終端裝置B中對應于基礎類生成的類設計依賴字段偏置表;圖39表示對應于圖3所示的用戶類User_class生成的類設計非依賴字段偏置表;圖40(a)表示在終端裝置A中生成的用戶類User_class的實例;(b)表示在終端裝置B中生成的用戶類User_class的實例;圖41表示終端裝置A和B的輕量基礎類文件內(nèi)的類設計非依賴字段計數(shù)表的例子;圖42(a)表示終端裝置A的輕量基礎類文件內(nèi)的類設計依賴字段計數(shù)表的例子;(b)表示終端裝置B的輕量基礎類文件內(nèi)的類設計依賴字段計數(shù)表的例子;圖43表示終端裝置A和B的輕量用戶類文件內(nèi)的類設計非依賴字段計數(shù)表的例子;圖44(a)表示變換前的終端裝置A的基礎類Bui1t_in_classY的類文件的例子;(b)表示變換后的終端裝置A的基礎類Built_in_classY的類文件的例子;圖45(a)表示變換前的用戶類的類文件的例子;(b)表示變換后的用戶類的類文件的例子;圖46表示在對基礎類文件的操作中,程序執(zhí)行系統(tǒng)2的偏置表生成部13的偏置表的生成處理的具體流程圖;圖47表示在對基礎類文件的操作中,程序執(zhí)行系統(tǒng)2的命令變換部14的命令變換的具體流程圖;圖48表示在對用戶類文件的操作中,程序執(zhí)行系統(tǒng)2的偏置表生成部13的偏置表的生成處理的具體流程圖;圖49表示在對用戶類文件的操作中,程序執(zhí)行系統(tǒng)2的命令變換部14的命令變換的具體流程圖;圖50表示終端裝置20的命令執(zhí)行處理的順序的流程圖,接著是圖51;圖51表示終端裝置20的命令執(zhí)行處理的順序的流程圖,接自圖50;圖52表示基礎類Built_in_classX和基礎類Built_in_classY的類設計非依賴字段偏置表;圖53(a)表示終端裝置A的實例字段偏置表;(b)表示終端裝置B的實例字段偏置表;圖54表示對應于圖3所示的用戶類User_class生成的實例字段偏置表;圖55(a)表示在終端裝置A生成的用戶類User_class的實例;(b)表示在終端裝置B生成的用戶類User_class的實例;說明作為本發(fā)明的實施例的程序執(zhí)行系統(tǒng)。
1.第一實施例說明作為本發(fā)明的第一實施例的程序執(zhí)行系統(tǒng)1。
1.1程序執(zhí)行系統(tǒng)1的結(jié)構(gòu)使用說明圖8所示的結(jié)構(gòu)的框圖來說明程序執(zhí)行系統(tǒng)1的結(jié)構(gòu)。
如圖8所示,程序執(zhí)行系統(tǒng)1由程序生成裝置10和作為內(nèi)部機器的終端裝置(輕便虛擬機器)20構(gòu)成。程序生成裝置10包括編譯部11、靜態(tài)鏈接部12和圖中未示出的存儲部,終端裝置20包括命令執(zhí)行部21和圖中未示出的存儲部。
程序生成裝置10和終端裝置20都是包括微處理器、RAM、ROM等的計算機系統(tǒng),RAM和ROM上存儲計算機程序,所述微處理器按照所述計算機程序動作,從而程序生成裝置10和終端裝置20實現(xiàn)其功能。
編譯部11和靜態(tài)鏈接部12都包括在一個程序生成裝置10內(nèi),也可以分別包括在各自不同的裝置中。此時,可構(gòu)成包含生成輕量用戶類文件56的程序生成部的一個裝置。
(1)源程序51源程序51存儲在程序生成裝置10內(nèi)的存儲部中。源程序51是用戶使用Java描述的程序,包括多個類。源程序51包括與基礎類相關(guān)的程序和與用戶類相關(guān)的程序。
(2)基礎類定義文件55基礎類定義文件55預先存儲在程序生成裝置10內(nèi)的存儲部中?;A類定義文件55表示包括在終端裝置預先存儲的輕量基礎類庫58中的類、方法、字段的定義?;A類定義文件55不包括類設計依賴字段的名稱、類型、個數(shù)等信息。
(3)編譯部11編譯部11從存儲部讀出源程序51、編譯源程序51、生成對應于源程序51上包括的各個類的類文件52、....、53。類文件52、....、53包括與基礎類相關(guān)的文件和與用戶類相關(guān)的文件。編譯部11把生成的類文件52、....、53寫入存儲部。
(4)靜態(tài)鏈接部12靜態(tài)鏈接部12從存儲部讀出類文件52、....、53和基礎類定義文件55,必要時使用基礎類定義文件55,解決類文件52、....、53中的常數(shù)存儲庫(constantpool)內(nèi)的識別信息,通過這樣解決除去不要的識別信息,生成輕量類文件54,....,把生成的輕量類文件54,....寫入存儲部。
輕量類文件54,....包括輕量基礎類文件和輕量用戶類文件。輕量基礎類文件是與終端裝置20固有的硬件結(jié)構(gòu)、控制相關(guān)的輕量類文件,而輕量用戶類文件是作為用戶類文件的輕量類文件。
靜態(tài)鏈接部12由偏置表生成部13和命令變換部14以及鏈接部15構(gòu)成。
偏置表生成部13對在類文件中使用的實例字段分配偏置號。偏置表生成部13包括非依賴表生成部131和依賴表生成部132。非依賴表生成部131生成與不依賴于終端裝置的硬件(換句話說是基礎類)的設計的類設計非依賴字段相對的類設計非依賴字段偏置表。依賴表生成部132生成與依賴于終端裝置的硬件(換句話說是基礎類)的設計的類設計依賴字段相對的類設計依賴字段偏置表。偏置表生成部13生成計數(shù)表,并把所生成的計數(shù)表追加寫入輕量類文件中。
命令變換部14把類文件中指示實例字段的常數(shù)存儲庫內(nèi)的偏置置換為被分配的偏置號。
鏈接部15進行其它鏈接處理。
(5)輕量用戶類文件56、輕量基礎類文件57在執(zhí)行輕量用戶類文件56之前,輕量基礎類文件作為輕量基礎類文件57先存儲在終端裝置20中。輕量用戶類文件作為輕量用戶類文件56,經(jīng)作為流通對象的預定傳輸路徑下載而讀入并存儲在終端裝置20中。
輕量基礎類庫58預先容納有所述多個輕量基礎類文件,作為文件群。這樣,讀入的輕量用戶類文件56和用輕量用戶類文件56指定的輕量基礎類庫58中的輕量基礎類文件57全部鏈接起來,換言之,解決了識別信息。
(6)命令執(zhí)行部21、實例生成部22命令執(zhí)行部21調(diào)出輕量用戶類文件56中的命令,必要時調(diào)出并執(zhí)行輕量基礎類文件57。實例生成部22隨著命令的執(zhí)行生成實例。
1.2程序生成裝置10的動作用圖9和圖10說明程序生成裝置10生成輕量基礎類文件和輕量用戶類文件的動作。
(1)輕量基礎類文件的生成動作程序生成裝置10從基礎類的源程序511生成輕量基礎類文件541的動作如圖9所示。
編譯部11編譯基礎類的源程序511、生成基出類文件521、...522。接著靜態(tài)鏈接部12的非依賴表生成部131從基礎類文件521、...522生成如圖11所示的類設計非依賴字段偏置表,依賴表生成部132從基礎類文件521、...522生成如圖12所示的類設計依賴字段偏置表。然后,命令變換部14根據(jù)這些表把常數(shù)存儲庫內(nèi)的偏置置換成所述各個表生成時分配來的偏置號。這里,常數(shù)存儲庫內(nèi)的所述偏置指示由getfield命令、putfield命令等預定命令的操作數(shù)構(gòu)成的實例字段。接著鏈接部15進行這些以外的鏈接處理。
偏置表生成部13從基礎類文件521、...522收集表示類、方法、字段等的定義的信息,將它們存儲在基礎類定義文件55中。如前面所述,基礎類定義文件55不包括類設計字段的名稱、類型、個數(shù)等的信息,基礎類定義文件55對于全部種類的終端生成的內(nèi)容相同。
(2)輕量用戶類文件的生成動作接著,程序生成裝置10從用戶類的源程序512生成輕量用戶類文件542的動作如圖10所示。
所述輕量基礎類文件生成后,編譯部11編譯用戶類的源程序512、生成用戶類文件531、...532。接著靜態(tài)鏈接部12的非依賴表生成部131從用戶類文件531、...532和生成的所述基礎類定義文件55生成如圖13所示的類設計非依賴字段偏置表。然后,命令變換部14根據(jù)這些表把常數(shù)存儲庫內(nèi)的偏置置換成表生成時分配來的偏置號。這里,常數(shù)存儲庫內(nèi)的所述偏置指示由預定命令的操作數(shù)構(gòu)成的實例字段。接著鏈接部15進行這些以外的鏈接處理。
(3)總結(jié)該程序執(zhí)行系統(tǒng)1中,基礎類定義文件55是單一含義確定的文件,對應終端裝置20的輕量基礎類文件的結(jié)構(gòu)也相同。靜態(tài)鏈接部12使用基出類定義文件55從用戶類文件向基礎類文件進行鏈接處理。通過使用指針等,輕量用戶類文件的實例字段偏置表,換言之,類設計非依賴字段偏置表中,由于不包括有關(guān)類設計依賴字段的信息,所以靜態(tài)鏈接部12對于多個不同的終端裝置,從同一個用戶類的源程序512生成同一個輕量用戶類文件542。
1.3字段偏置表這里,使用圖11到圖13具體說明輕量基礎類文件的類設計非依賴字段偏置表和類設計依賴字段偏置表以及輕量用戶類文件的類設計非依賴字段偏置表。
這些字段偏置表由程序生成裝置10生成,配備有包括多個字段偏置號和實例字段構(gòu)成的組的區(qū)域。
命令變換部14在把這些字段偏置表變換成getfield命令、putfield命令時使用這些字段偏置表。靜態(tài)鏈接部12處理結(jié)束時,放棄這些字段偏置表。
與所述的已有程序執(zhí)行系統(tǒng)相同,假設使構(gòu)成硬件結(jié)構(gòu)的一部分的兩個終端裝置A、終端裝置B執(zhí)行從相同的用戶類的源程序生成的輕量用戶類文件。程序生成裝置10在存儲部存儲如圖1到圖3所示的Java程序。
(1)對基礎類的類設計非依賴字段偏置表圖11分別表示與如圖1和圖2所示的基礎類Built_in_classX和基礎類Built_in_classY對應生成的類設計非依賴字段偏置表。
靜態(tài)鏈接部12的非依賴表生成部131對于基礎類Built_in_classX和基礎類Built_in_classY的每一個生成類設計非依賴字段偏置表。
如圖11的基礎類Built_in_classX的類設計非依賴字段偏置表所示,非依賴表生成部131對于類設計非依賴字段fieldX1、fieldX2按定義順序分配字段偏置號[2]、[3]。把null存儲在非依賴表生成部131在對應于偏置號[1]的確保區(qū)域中。實例字段為null的區(qū)域表示終端裝置生成實例時向?qū)陬愒O計依賴字段偏置表的區(qū)域存儲指針的實例區(qū)域。
如圖11的基礎類Built_in_classY的類設計非依賴字段偏置表所示,非依賴表生成部131對于從承接基礎類Built_in_classX的類設計非依賴字段fieldX1、fieldX2分配與基礎類Built_in_classX相同的偏置號[2]、[3],對于在基礎類Built_in_classY上新定義的類設計非依賴字段fieldY1、fieldY2、fieldY3按定義順序分配偏置號[5]、[6]、[7]。把null存儲在非依賴表生成部131在對應于偏置號[1]、[4]的確保區(qū)域中。這里對應偏置號[1]確保的區(qū)域?qū)诮K端裝置的實例生成時存儲指向與基礎類Built_in_classX相同的類設計依賴字段偏置表的指針的實例領(lǐng)域。對應偏置號[4]確保的區(qū)域?qū)谠诮K端裝置的實例生成時存儲指向?qū)诨A類Built_in_classY上定義的類設計依賴字段的類設計依賴字段偏置表的區(qū)域的指針的實例領(lǐng)域。實例字段的null表示它們。
(2)對基礎類的類設計依賴字段偏置表圖12表示與基礎類Built_in_classX和基礎類Built_in_classY對應生成的類設計依賴字段偏置表。
所述類設計非依賴字段偏置表對于終端裝置A、終端裝置B是相同的,但是由于使用的類設計依賴字段在終端裝置A、終端裝置B中不同,類設計依賴字段偏置表在終端裝置A、終端裝置B中不同。實際上,對于終端裝置A,依賴表生成部132在每一個基礎類上生成如圖12(a)所示的類涉及依賴字段偏置表,對于終端裝置B,在每一個基礎類上生成如圖12(b)所示的類涉及依賴字段偏置表。
如上所述,生成圖9所示的輕量基礎類文件541時,生成對應于上述的基礎類Built_in_classX和基礎類Built_in_classY的類設計非依賴字段偏置表、類設計依賴字段偏置表。
(3)對用戶類的類設計非依賴字段偏置表在生成圖10所示的輕量用戶類文件542時,生成對應于圖13所示的用戶類User_class的類設計非依賴字段偏置表,并且,隨著終端裝置A的執(zhí)行,生成圖14和圖15所示的實例。
圖13表示對應圖3所示的用戶類User_class生成的類設計非依賴字段偏置表,圖14和15分別表示在終端裝置A和終端裝置B生成的用戶類User_class的實例。
靜態(tài)鏈接部12的非依賴表生成部131對于用戶類User_classX生成類設計非依賴字段偏置表。
如圖13所示,非依賴表生成部131由用戶類User_class的類設計非依賴字段偏置表向從基礎類Built_in_classY承接來的類設計非依賴字段fieldX1、fieldX2、fieldY1、fieldY2、fieldY3分配與基礎類Built_in_classY相同的偏置號[2]、[3]、[5]、[6]、[7]。對新定義的類設計非依賴字段fieldU1、fieldU2定義并順序分配偏置號[8]、[9]。分別把null存儲在非依賴表生成部131在對應于偏置號[1]、[4]確保的區(qū)域中。對應于偏置號[1]、[4]的確保區(qū)域中,在終端裝置的實例生成時,存儲指向?qū)诤突A類Built_in_classX、Built_in_classY相同的類設計依賴字段偏置表的區(qū)域的指針。實例字段的null表示這些。
1.4被生成的實例終端裝置20的實例生成部22生成圖14和15所示的實例。
終端裝置A的實例生成部22首先在存儲器上確保對應于圖13所示的類設計非依賴字段偏置表的區(qū)域701。后面說明其細節(jié)。接著,對應于圖12(a)所示的類設計依賴字段偏置表確保區(qū)域702、703。之后,在對應于類設計非依賴字段偏置表的區(qū)域701中的實例字段null的2個指針區(qū)域中分別按順序存儲指向基礎類Built_in_classX的類設計依賴字段偏置表對應的區(qū)域702的指針和指向基礎類Built_in_classY的類設計依賴字段偏置表對應的區(qū)域703的指針。實例生成部22就這樣生成實例。
同樣,終端裝置B的實例生成部22首先在存儲器上對應于圖13所示的類設計非依賴字段偏置表確保區(qū)域711,接著,對應于圖12(b)所示的類設計依賴字段偏置表確保區(qū)域712、713。之后,在對應于類設計非依賴字段偏置表的區(qū)域711中的實例字段null的2個指針區(qū)域中分別按順序存儲指向基礎類Built_in_classX的類設計依賴字段偏置表對應的區(qū)域712的指針和指向基礎類Built_in_classY的類設計依賴字段偏置表對應的區(qū)域713的指針。實例生成部22就這樣生成實例。
由于終端裝置A和終端裝置B生成圖14和15所示的實例,例如對于終端裝置A和終端裝置B,同樣將用戶類User_class的fieldU1作為第8個變量在對應于實例的區(qū)域中進行存取。
由于終端裝置20用程序執(zhí)行系統(tǒng)像上述那樣生成實例,靜態(tài)鏈接部12的命令變換部14變換對應于圖16所示的類設計非依賴字段的getfield命令和putfield命令的操作數(shù)。
具體說,如圖16(a)所示,通常的Java的用戶類類文件中,由putfield命令的操作數(shù)構(gòu)成的<User_class.fieldU1>和由getfield命令的操作數(shù)構(gòu)成的<User_class.fieldU2>表示常數(shù)存儲庫內(nèi)的偏置。命令變換部14根據(jù)上述的實例字段偏置表在實例區(qū)域中把偏置變換成特定實例字段的偏置號。[new命令]的操作數(shù)構(gòu)成的<User_class>也同樣進行預定的號變化。結(jié)果,得到圖16(b)所示的類文件。如該圖所示,把類文件中的putfield命令和getfield命令的操作數(shù)變換為[8]和[9]。
命令變換部14還變換對應于接著示出的類設計依賴字段的getfield命令和puttield命令的操作數(shù)。
圖17表示作為編譯后生成基礎類文件的基礎的Java程序的例子。在圖17中,僅表示出字段的定義,省略了有關(guān)字段的具體使用的描述。圖18對應于圖17所示的實例字段,表示所述變換后的getfield命令的操作數(shù)。putfiield命令的操作數(shù)同樣如此。
如圖17所示,類A把fieldA1、fieldA2、fieldA3定義為類設計非依賴字段,把fieldA4定義為類設計依賴字段。如圖18所示,命令變換部14分別把以對應于fieldA1、fieldA2、fieldA3的getfield命令的操作數(shù)表示常數(shù)存儲庫內(nèi)的偏置的<A.fieldA1>、<A.fieldA2>、<A.fieldA3>變換為實例區(qū)域中特定實例字段的偏置號[1]、[2]、[3]。另一方面,對于以對應于fieldA4的getfield命令的操作數(shù)表示常數(shù)存儲庫內(nèi)的偏置的<A.fieldA4>,把[getfield<A.fieldA4>]變換為使用前綴dependent的[dependent getfield 11]。這里,getfield命令的第一個操作數(shù)表示類設計非依賴字段的偏置號。第二個操作數(shù)表示類設計依賴字段的偏置號。
具體說,在如圖19(a)所示的終端裝置A的基礎類Built_in_classY的類文件中,putfield命令的操作數(shù)構(gòu)成的<Built_in_classY.fieldU1>和getfield命令的操作數(shù)構(gòu)成的<Built_in_classY.pivateY1>表示常數(shù)存儲庫內(nèi)的偏置。命令變換部14根據(jù)上述實例字段偏置表在實例區(qū)域中把偏置變換為特定實例字段的偏置號。[new命令]的操作數(shù)構(gòu)成的<Built_in_classY>同樣進行預定號的變換。結(jié)果,得到如圖19(b)所示的類文件。
1.5類ID對應表類ID對應表是對應并存儲類名稱和類ID的數(shù)據(jù)表。
類ID(類識別符)對于輕量類文件是識別各個類的號。類ID不允許重復。
對于基礎類分配從1開始直到7FFF的連續(xù)號。對于用戶類,分配從8001開始直到FFFF的連續(xù)號。
類ID對應表由命令變換部在new命令變換時使用。靜態(tài)鏈接部12處理結(jié)束時放棄該表。
圖20和圖21表示類ID對應表的一個例子。圖20表示的基礎類ID對應表對應并存儲基礎類的類名稱和類ID。圖21表示的用戶類ID對應表對應并存儲用戶類的類名稱和類ID。
1.6字段計數(shù)表字段計數(shù)表中有類設計非依賴字段計數(shù)表和類設計依賴字段計數(shù)表。
(1)類設計非依賴字段計數(shù)表類設計非依賴字段計數(shù)表是對應并存儲類ID和非依賴字段計數(shù)以及超級類ID的數(shù)據(jù)表。
類ID如上述說明。
非依賴字段計數(shù)表示由對應的類ID識別的類內(nèi)的非依賴字段的數(shù)目。
超級類ID表示由對應的類ID識別的類的超級類的類ID。
圖22和圖23表示出類設計非依賴字段計數(shù)表的一個例子。
圖22所示的類設計非依賴字段計數(shù)表相對于終端裝置A和終端裝置B共同的輕量基礎類文件。
圖23所示的類設計非依賴字段計數(shù)表相對于終端裝置A和終端裝置B共同的輕量用戶類文件。
(2)類設計依賴字段計數(shù)表類設計依賴字段計數(shù)表是對應并存儲類ID、非依賴字段偏置、依賴字段計數(shù)和超級類ID的數(shù)據(jù)表。
類ID如上述說明。
非依賴字段偏置表示由對應的類ID識別的類的非依賴字段的偏置號。
依賴字段計數(shù)表示由對應的類ID識別的類內(nèi)的依賴字段的數(shù)目。
超級類ID表示由對應的類ID識別的類的超級類的類ID。
圖24(a)、(b)表示出類設計依賴字段計數(shù)表的一個例子。
圖24(a)的類設計依賴字段計數(shù)表相對于終端裝置A的輕量基出類文件。
圖24(b)的類設計依賴字段計數(shù)表相對于終端裝置B的輕量基礎類文件。
1.7程序執(zhí)行系統(tǒng)1的動作通過在程序生成裝置10和終端裝置20上進行圖25到圖30的流程圖所示的控制來實現(xiàn)程序執(zhí)行系統(tǒng)1的動作。
(1)基礎類文件的鏈接動作使用圖25到圖27所示的流程圖說明對基礎類文件的鏈接處理。
靜態(tài)鏈接部12讀入由使用者指定的基礎類文件(步驟S101)、判斷在已經(jīng)讀入的類文件中是否使用了還沒有讀入的類文件,在把還沒有讀入的類文件用于已經(jīng)讀入的類文件中時(在步驟S102為“是”),讀入所述還沒有讀入的類文件(步驟S103),返回到步驟S102,直到判斷出已經(jīng)讀入的類文件中沒有使用還沒有讀入的類文件(在步驟S102為“否”)時,在步驟S103重復讀入基礎類文件。
判斷出沒有把還沒有讀入的類文件用于已經(jīng)讀入的類文件中時(在步驟S102為“否”),偏置表生成部13進行偏置表生成處理(步驟S104a);命令變換部14進行命令變換處理(步驟S110a);鏈接部15進行其他的鏈接處理(步驟S112);靜態(tài)鏈接部12把輕量基礎類文件寫入存儲部(步驟S113)、把基礎類定義文件寫入存儲部(步驟S114)。
這樣,結(jié)束對基礎類文件的處理,生成輕量基礎類文件和基礎類定義文件。
(偏置表生成部13的動作)接著使用圖26所示的流程圖詳細說明步驟S104a的偏置表生成處理。
偏置表生成部13把讀入的類中的還沒有生成實例字段偏置表的類設置為對象(步驟S104),設置的類的超級類不存在或存在時,判斷超級類中是否生成實例字段偏置表。
設置的類的超級類不存在或存在時,判定超級類中生成實例字段偏置表時(步驟105中為“是”),向作為對象的類添加從[1]開始的連續(xù)號的類ID(步驟S107a)、把對象類的類名稱和類ID添加寫入到圖20所示的基礎類ID對應表(步驟S107b),取出依賴字段的一個指針存儲用區(qū)域和對象類的非依賴字段,添加到如圖11所示的超級類的類設計非依賴字段偏置表,把所述類設計非依賴字段偏置表輸出到命令變換部14。這里,對象類的超級類不存在時,從對象類的非依賴字段生成類設計非依賴字段偏置表(步驟S107c)。接著,如圖22所示,向非依賴字段計數(shù)表添加寫入對象類的類ID、非依賴字段計數(shù)、超級類ID。這里,以步驟S107c生成的類設計非依賴字段偏置表為基礎,包括指針區(qū)域和承接下來的非依賴字段數(shù),數(shù)出非依賴字段的數(shù)目,計算出非依賴字段計數(shù)(步驟S107d)。
接著,偏置表生成部13僅取出對象類的依賴字段,生成如圖12所示的類設計依賴字段偏置表,把生成的類設計依賴字段偏置表輸出到命令變換部14(步驟S108a),向圖24所示的依賴字段計數(shù)表添加寫入對象類的類ID、非依賴字段偏置、依賴字段計數(shù)、超級類ID。這里,以所述生成的類設計依賴字段偏置表為基礎,通過僅數(shù)出對象類的依賴字段的數(shù)目來計算出依賴字段計數(shù)。對象類沒有超級類時,寫入
作為超級類ID(步驟S108b)。
接著,偏置表生成部13判斷是否存在沒有生成實例字段偏置表的類,存在時(步驟S109為“是”),返回步驟S104反復處理。不存在時(步驟S109為“否”),偏置表生成部13結(jié)束處理。
設置的類不存在超級類或存在超級類時,在沒有判定出超級類上生成實例字段偏置表時(步驟105中為“否”),偏置表生成部13把超級類作為對象(步驟S106),接著返回步驟S105。
(命令變換部14的動作)接著,使用圖27所示的流程圖詳細說明步驟S110a的命令變換。
命令變換部14判斷是否有未變換的getfield命令的操作數(shù)、putfield命令的操作數(shù),有未變換的操作數(shù)(步驟S110為“是”)時,接著判斷是否是對依賴字段的訪問命令,是對依賴字段的訪問命令時(步驟S111a為“是”),添加dependent限定命令,參考對象類的依賴字段計數(shù)表對第一操作數(shù)設置非依賴字段偏置,參考對象類的依賴字段偏置表對第二操作數(shù)設置依賴字段偏置,這樣進行命令變換(步驟S111c),返回步驟S110。
不是對依賴字段的訪問命令(步驟S111a為“否”)時,參考對象類的非依賴字段偏置表對第一操作數(shù)設置非依賴字段偏置,這樣進行命令變換(步驟S111b),返回步驟S110。
沒有未變換的操作數(shù)(步驟S110為“否”)時,判斷是否有未處理的new命令,有這種命令時(步驟S111d為“是”),參考類ID表進行把類名稱變換為類ID的命令變換(步驟S111e),返回步驟S111d。
判斷為沒有未處理的new命令時(步驟S111d為“否”),寫入非依賴字段計數(shù)表和依賴字段計數(shù)表(步驟S111f),命令變換部14的處理結(jié)束。
(2)與用戶類文件的鏈接動作使用圖28到圖30所示的流程圖說明對用戶類文件的鏈接處理。
靜態(tài)鏈接部12讀入由使用者指定的用戶類文件(步驟S201)、讀入基礎類定義文件(步驟S202),判斷在已經(jīng)讀入的類文件中是否使用了還沒有讀入的類文件,在把還沒有讀入的類文件用于已經(jīng)讀入的類文件中時(在步驟S203為“是”),讀入所述還沒有讀入的類文件(步驟S204),返回到步驟S203,直到判斷出已經(jīng)讀入的類文件中沒有使用還沒有讀入的類文件(在步驟S203為“否”)時,在步驟S204重復讀入用戶類文件。
在判斷出沒有把還沒有讀入的類文件用于已經(jīng)讀入的類文件中時(在步驟S203為“否”),偏置表生成部13進行偏置表生成處理(步驟S205a);命令變換部14進行命令變換處理(步驟S210a);鏈接部15進行其他的鏈接處理(步驟S212);靜態(tài)鏈接部12把輕量用戶類文件寫入存儲部(步驟S213)。
這樣,結(jié)束對用戶類文件的處理,生成輕量用戶類文件和基礎類定義文件。
(偏置表生成部13的動作)接著使用圖29所示的流程圖詳細說明步驟S205a的偏置表生成處理。
偏置表生成部13把讀入的類中的還沒有生成實例字段偏置表的類設置為對象(步驟S205),接著判斷對象類的超級類是否為基礎類,判斷為基礎類時(步驟S206a為“是”)時,從基礎類定義文件生成對象類的超級類的非依賴字段偏置表(步驟S206b),接著把控制移動到步驟S208a。
判斷出不是基礎類(步驟S206a為“否”)時,判斷對象類的超級類上是否生成實例字段偏置表,判定出生成該表時(步驟S206c中為“是”),接著把控制移動到步驟S208a。
判斷出沒有生成該表(步驟S206c中為“否”)時,以超級類作為對象(步驟S207),接著返回到步驟S206a。
偏置表生成部13向成為對象的類添加從開始的連續(xù)號的類ID(步驟S208a),向圖21所示的用戶類ID對照表添加寫入對象類的類名稱和類ID(步驟S208b),取出對象類的非依賴字段,向圖13所示的超級類的類設計非依賴字段偏置表添加,把所述類設計非依賴字段偏置表輸出到命令變換部14(步驟S208c)。接著,如圖23所示,向非依賴字段計數(shù)表添加寫入對象類的類ID、非依賴字段計數(shù)、超級類ID。這里以在步驟S208c生成的類設計非依賴字段偏置表為基礎,包括承接來的非依賴字段數(shù),數(shù)出對象類的非依賴字段數(shù)目,算出非依賴字段計數(shù)(步驟S208d)。
接著,偏置表生成部13判斷是否存在沒有生成實例字段偏置表的類,存在時(步驟S209為“是”),返回步驟S205,重復處理。不存在時(步驟S209為“否”),偏置表生成部13結(jié)束處理。
(命令變換部14的動作)接著,使用圖30所示的流程圖詳細說明步驟S210a的命令變換。
命令變換部14判斷是否有未變換的getfield命令的操作數(shù)、putfield命令的操作數(shù),有未變換的操作數(shù)(步驟S210為“是”)時,接著參考對象類的非依賴字段偏置表對第一操作數(shù)設置非依賴字段偏置,這樣進行命令變換(步驟S211a),返回步驟S210。
沒有未變換的操作數(shù)(步驟S210為“否”)時,判斷是否有未處理的new命令,有這種命令時(步驟S211b為“是”),參考類ID表進行把類名稱變換為類ID的命令變換(步驟S211e),返回步驟S211b。
判斷為沒有未處理的new命令時(步驟S211c為“否”),寫入非依賴字段計數(shù)表(步驟S211d),命令變換部14的處理結(jié)束。
(總結(jié))對作為所述對象設置的類生成圖13所示的類涉及非依賴字段偏置表時,全部類的類涉及非依賴字段一致,同一類的類設計非依賴字段連接,并且確保存儲生成實例時指向類設計依賴字段偏置表的指針的區(qū)域,分配偏置號。尤其,對從超級類承接來的實例字段分配與對超級類的實例字段分配的偏置號相同的偏置號。
程序執(zhí)行系統(tǒng)1在不同的表中管理從基礎類承接來的類設計依賴字段和從基礎類承接來的新定義的類設計非依賴字段,在對靜態(tài)鏈接部12的用戶類文件的鏈接處理中,偏置表生成部13考慮類設計依賴字段偏置表,在類設計非依賴字段偏置表中確保固定長度的區(qū)域,該區(qū)域用于指向?qū)嵗蓵r存儲的類設計依賴字段偏置表所對應的區(qū)域的指針。
由于類設計非依賴字段偏置表中這個固定長度的指針區(qū)域不因終端裝置的種類不同而不同,生成的類設計非依賴字段偏置表不依賴于終端種類。輕量用戶類文件生成時,僅生成類設計非依賴字段偏置表,不使用依賴表生成部132。
與對這些用戶類文件的鏈接處理相反,在對基礎類文件的鏈接處理中,即,不讀入基礎類定義文件,僅讀入基礎類文件,對非依賴表生成部131生成圖11所示的類設計非依賴字段偏置表、生成圖12所示的對應于終端裝置種類而不同的類設計依賴字段偏置表來進行鏈接處理,輸出輕量基礎類文件和基礎類定義文件。
(3)終端裝置20的命令執(zhí)行處理動作使用圖31和圖32所示的流程圖說明終端裝置(輕便虛擬機器)20的命令執(zhí)行處理。
命令執(zhí)行部21把終端裝置20指定的輕量用戶類文件讀入存儲器內(nèi)(步驟S331)。接著,命令執(zhí)行部21一個一個地順序選擇存儲器內(nèi)的輕量用戶類文件內(nèi)的命令,全部命令選擇結(jié)束時(步驟S300為“是”),處理結(jié)束。
命令選擇沒有結(jié)束時(步驟S300為“否”),命令執(zhí)行部21從在最前面開始一個一個地順序選擇輕量用戶類文件內(nèi)的命令(步驟S301)。
(putfield命令(或getfield命令)的處理)命令執(zhí)行部21判斷選擇的命令是否為putfield命令(或getfield命令)。選擇的命令是putfield命令(或getfield命令)時(在步驟S302為“是”),命令執(zhí)行部21判斷判斷是否向選擇的命令添加dependent。
判斷為添加時(步驟S314為“是”),通過把作為選擇的命令的第一操作數(shù)的非依賴字段偏置加到棧中堆積的實例的地址,命令執(zhí)行部21得到存儲指向依賴字段區(qū)域的指針的區(qū)或Y(步驟S315);接著,通過把作為選擇的命令的第二操作數(shù)的依賴字段偏置加到區(qū)域Y中存儲的指針指示的地址,得到成為putfield命令(或getfield命令)的區(qū)域X(步驟S316)。
判斷為不添加時(步驟S314為“否”),通過把作為選擇的命令的第一操作數(shù)的非依賴字段偏置加到棧中堆積的實例的地址,命令執(zhí)行部21得到成為putfield命令(或getfield命令)的對象的區(qū)或X(步驟S313)。
接著,命令執(zhí)行部21對區(qū)或X執(zhí)行putfield命令(或getfield命令)的處理,返回步驟S301,重復處理。
(new命令的處理)命令執(zhí)行部21判斷選擇的命令是否為new命令。選擇的命令是new命令時(步驟S303為“是”),實例生成部22選擇由new命令的操作數(shù)傳送的ID表示的成為new命令的對象的類,作為對象類(步驟S304)。接著,實例生成部22從輕量用戶類文件讀出類設計非依賴字段計數(shù)表,在存儲器上確保對象類的非依賴字段計數(shù)部分的區(qū)域X(步驟S305)。
實例生成部22根據(jù)類ID是否為7FFF以下判斷作為區(qū)域確保的對象的類是否是基礎類。若作為對象的類不是基礎類(步驟S306為“否”),實例生成部22從輕量用戶類文件的非依賴文件計數(shù)表得到超級類,把得到的超級類作為對象(步驟S307),然后返回步驟S306,重復處理。
若作為對象的類是基礎類(步驟S306為“是”),實例生成部22從輕量基礎類文件讀出類設計依賴字段計數(shù)表,確保對象類的依賴字段計數(shù)部分的區(qū)域Y(步驟S308a),接著,在區(qū)域X的非依賴字段偏置號中存儲指向區(qū)域Y的指針(步驟S308b)。
然后,實例生成部22根據(jù)依賴字段計數(shù)表的超級類ID是否為0判斷對象類的超級類是否存在。作為對象的類的超級類存在時(步驟S309為“是”),實例生成部22從輕量基礎類字段的依賴字段計數(shù)表得到超級類,把得到的超級類作為對象(步驟S311),返回步驟S308a,重復處理。
作為對象的類的超級類不存在時(步驟S309為“否”),實例生成部22在棧上堆積指向區(qū)或X的指針(步驟S310),接著返回步驟S301,重復處理。
(其他命令的處理)在選擇的命令不是new命令時(步驟S303為“否”),實例執(zhí)行部21執(zhí)行與原來的虛擬機器相同的命令(S312),接著返回步驟S301,重復處理。
(總結(jié))程序執(zhí)行系統(tǒng)1在不同的表中管理從基礎類承接來的類設計依賴字段和從基礎類承接來的新定義的類設計非依賴字段。用戶類文件承接使用類涉及依賴字段的基礎類文件時,命令執(zhí)行處理中,實例生成部22分別確保對于類設計非依賴字段偏置表和類設計依賴字段偏置表的區(qū)域,在對應于類設計非依賴字段偏置表的區(qū)域中的指針區(qū)域存儲指向?qū)陬愒O計依賴字段偏置表的區(qū)域的指針。
由于類設計非依賴字段偏置表中用于該指針的區(qū)域不會因終端裝置的種類不同而不同,類設計非依賴字段的實例字段偏置號不依賴于終端的種類。這樣,可以在不同種類的終端裝置之間通過相同的實例字段偏置號訪問相同的類設計非依賴字段。如上所述,包括生成的計數(shù)表的輕量用戶類文件不依賴于終端裝置的種類,可在不同的種類的多個終端裝置上執(zhí)行同一輕量用戶類文件。
雖然假定不論字段類型如何,程序執(zhí)行系統(tǒng)1的終端裝置20的實例生成部22都確保實例區(qū)域有一定長度,但是實例區(qū)域可對應于字段類型而確保不同的長度。
1.8具體例說明程序執(zhí)行系統(tǒng)1使用的Java程序和生成的實例的具體例。
(1)具體例1圖33表示成為生成編譯后的類文件的基礎的Java程序的一個例子。圖34表示在程序執(zhí)行系統(tǒng)1中對應于圖33所示的Java程序生成的實例。
在圖33所示的Java程序中,以類A把int類型的fieldA1、short類型的fieldA2、byte類型的fieldA3定義為實例字段。
程序執(zhí)行系統(tǒng)1假定這些實例字段生成如圖34(a)所示的實例。這里,無論字段類型如何,都確保對應于fieldA1、fieldA2、fieldA3的區(qū)域有預定的長度。
與此相反,在同樣的程序執(zhí)行系統(tǒng)中可假定生成如圖34(b)所示的實例。這里,因字段類型不同,使得對應于fieldA1、fieldA2、fieldA3的區(qū)域有不同的長度,對各個字段分配用來特定實例區(qū)域的位置的偏置號。
假定程序執(zhí)行系統(tǒng)1包括在輕量類文件中含有字段計數(shù)值的字段表,并把該表傳輸?shù)浇K端裝置一側(cè),在執(zhí)行g(shù)etfield命令和putfield命令時以這些表為參考,但是,也可以在輕量類文件中不包括這樣的實例字段偏置表,使用包括操作數(shù)類型的信息的getfield命令(和putfield命令)。
(2)具體例2圖35表示成為生成編譯后的類文件的基礎的Java程序的一個例子。圖36(a)表示對應于圖35所示的Java程序生成的變換后getfield命令的操作數(shù)。putfield命令的操作數(shù)同樣如此。
這里,設定為根據(jù)終端裝置的new命令生成實例,僅把表示實例區(qū)域整體的大小的信息從程序生成裝置傳輸?shù)浇K端裝置。特別是,與實例字段相對的實例區(qū)域因字段類型不同而確保有不同長度,但是也可以是無論字段類型如何都確保與實例字段相對的實例區(qū)域有一定的長度。
如圖35所示,以類A把byte類型的fieldA1、short類型的fieldA2定義為實例字段,以類B把int類型的fieldB3定義為實例字段。這里,對應于操作數(shù)的類型是否為1字節(jié)(byte型)、2字節(jié)(short型)、4字節(jié)(int型、參考型)中的任何一個,把類文件中的getfield命令的操作數(shù)變換為getfield_b命令、getfield_s命令、getfield命令。
實際,如圖36(a)所示,對類A的fieldA1、fieldA2分配偏置號[1]、[3],對應字段類型使用getfield_b命令、getfield_s命令。
如圖36(b)所示,對類B從類A承接來的fiieldA1、fieldA2分配與類A同樣的偏置號[1]、[3],對新定義的fieldB1分配偏置號[5],對應于字段類型,分別使用getfie1d_b命令、getfiel_s命令和getfield命令。
1.9總結(jié)如上所述,程序執(zhí)行系統(tǒng)1不依賴于終端裝置的種類執(zhí)行同一輕量用戶類文件,通過在種類不同的多個終端裝置執(zhí)行程序,增大了輕量基礎類庫的功能,可進行所希望的動作,因此,不必要對照符合終端裝置的輕量基礎類庫部分生成不同的用戶類文件。
使用輕量類文件的程序執(zhí)行系統(tǒng)1可以說適合應用于內(nèi)部機器等的處理能力低的終端裝置,把上述相同輕量用戶類文件用于多個終端裝置據(jù)說可減輕程序開發(fā)者的處理負擔。
程序執(zhí)行系統(tǒng)1分別在每個基礎類文件上匯總類設計依賴字段,在每個基礎類文件上構(gòu)成類設計依賴字段偏置表,在承接來的基礎類文件的每一個上區(qū)分類設計非依賴字段偏置表,把指向?qū)陬愒O計依賴字段偏置表的區(qū)域的指針配置在對應于類設計非依賴字段偏置表中的各個基礎類文件的區(qū)分后的區(qū)域的最前面,但是也可以把指向?qū)陬愒O計依賴字段偏置表的區(qū)域的指針配置在對應于類設計非依賴字段偏置表中的各個基礎類文件的區(qū)分后的區(qū)域的最后。
程序執(zhí)行系統(tǒng)1假定類屬于用戶類和基礎類的任何一個,但是可以是例如,假定信息服務類的用戶類、基礎類以外的中間類,由3級結(jié)構(gòu)構(gòu)成類,用戶類不可使用信息服務類、基礎類中的類設計依賴字段,而且信息服務類不能使用基礎類中的類設計依賴字段。
程序執(zhí)行系統(tǒng)1通過限定語private定義類設計依賴字段,但是可使用與此不同的關(guān)鍵字裝備類設計依賴字段。
程序執(zhí)行系統(tǒng)1對每一個基礎類文件構(gòu)成類設計依賴字段偏置表,但是程序執(zhí)行系統(tǒng)2可以把承接來的全部基礎類文件的類設計依賴字段在一個類設計依賴字段偏置表中記述。程序執(zhí)行系統(tǒng)3可以預先假定使用的實例字段的個數(shù)的最大值,在類設計非依賴表中確保用于它們的區(qū)域。對于程序執(zhí)行系統(tǒng)2和3,作為第二和第三實施例,在下面進行描述。
2.第二實施例說明作為本發(fā)明第二實施例的程序執(zhí)行系統(tǒng)2。
程序執(zhí)行系統(tǒng)2與程序執(zhí)行系統(tǒng)1相比,主要不同在于類設計非依賴字段偏置表和類設計依賴字段偏置表的結(jié)構(gòu)以及它們的動作。除此之外的結(jié)構(gòu)、動作與程序執(zhí)行系統(tǒng)1一致。
下面的說明中,與原來的程序執(zhí)行系統(tǒng)一樣,編譯并使用圖1到圖3所示的Java程序。
2.1程序執(zhí)行系統(tǒng)2的結(jié)構(gòu)(a)對應于基礎類生成的字段偏置表對于程序執(zhí)行系統(tǒng)2,圖37表示對應于基礎類生成的類設計非依賴字段偏置表。圖38(a)和(b)表示對應于基礎類生成的類設計非依賴字段偏置表。
如圖37的基礎類Built_in_classX的類設計非依賴字段偏置表所示,對類設計非依賴字段fieldX1、fieldX2按定義順序分配偏置號[2]、[3]。
由此,對于基礎類文件中的getfield命令、putfield命令,把指示常數(shù)存儲庫中的fieldX1、fieldX2的操作數(shù)在輕量基礎類文件中在終端裝置的實例生成時分別置換為表示從實例區(qū)域中最前面開始的偏置號[2]、[3]。
在對應于圖37的基礎類Built_in_classX的類設計非依賴字段偏置表中的偏置號[1]而確保的實例區(qū)域中,在終端裝置的實例生成時存儲指向類設計依賴字段偏置表所對應的區(qū)域的指針。這用所述類設計非依賴字段偏置表中的實例字段的null表示。null表示的意思與圖11所示的基礎類Built_in_classX的類設計非依賴字段偏置表相同。
如圖37的基礎類Built_in_classY的類設計非依賴字段偏置表所示,對于從基礎類Built_in_classX承接來的類設計非依賴字段fieldX1、fieldX2和對基礎類Built_in_classY所新定義的類設計非依賴字段fieldY1、fieldY2、fieldY3定義并順序分配偏置號[2]、[3]、[4]、[5]、[6]。
由此,對于基礎類文件中的getfield命令、putfield命令,把指示常數(shù)存儲庫中的fieldX1、fieldX2、fieldY1、fieldY2、fieldY3的操作數(shù)在終端裝置的實例生成時分別置換為表示從實例區(qū)域的最前面開始的偏置的[2]、[3]、[4]、[5]、[6]。
在對應于基礎類Built_in_classY的類設計非依賴字段偏置表中的偏置號[1]而確保的實例區(qū)域中,在終端裝置的實例生成時存儲指向類設計依賴字段偏置表所對應的區(qū)域的指針。這用所述類設計非依賴字段偏置表中的實例字段的零值表示。
與圖11所示的基礎類Built_in_classY的類設計依賴字段偏置表不同,圖37所示的基礎類Built_in_classY的類設計依賴字段偏置表中,指向類設計依賴字段偏置表所對應的區(qū)域的指針所在區(qū)域僅是對應于基礎類Built_in_classX、基礎類Built_in_classY的區(qū)域。在類設計依賴字段偏置表這兩個基礎類包括的類設計依賴字段和偏置號的對應添加也連續(xù)記錄下來。
這些類設計非依賴字段偏置表對于終端裝置A、終端裝置B相同,但是使用的類設計非依賴字段在終端裝置A、終端裝置B中卻不同。因此,類設計依賴字段偏置表在終端裝置A、終端裝置B中不同。
具體說,對于終端裝置A,如圖38(a)所示,對每個基礎類都生成類設計依賴字段偏置表。對于終端裝置B,如圖38(b)所示,對每個基礎類都生成類設計依賴字段偏置表。與圖11所示的類設計依賴字段偏置表不同,基礎類Built_in_classY的類設計依賴字段偏置表包括基礎類Built_in_classX的類設計依賴字段偏置表的內(nèi)容。
(b)對應于用戶類生成的類設計非依賴字段偏置表和實例圖39表示對應于圖3所示的用戶類User_class生成的類設計非依賴字段偏置表。圖38(a)和(b)分別表示對終端裝置A、終端裝置B生成的用戶類User_class的實例。
在圖39所示的用戶類User_class的類設計非依賴字段偏置表中,對從基礎類Built_in_classY承接來的類設計非依賴字段分配與基礎類Built_in_classY相同的偏置號[2]、[3]、[4]、[5]、[6]。對新定義的類設計非依賴字段分配[7]、[8]。
終端裝置的實例生成時,在對應類設計非依賴字段偏置表中的偏置號[1]而確保的實例區(qū)域中存儲與基礎類Built_in_classY相同的指向類設計依賴字段偏置表所對應的區(qū)域的指針。
如圖40(a)所示,終端裝置A確保圖39所示的用戶類User_class的類設計非依賴字段偏置表所對的區(qū)域721,接著確保圖38(a)所示的Built_in_classY的類設計依賴字段偏置表所對的區(qū)域722。之后,在類設計非依賴字段偏置表所對的區(qū)域721中的實例字段的null對應的指針區(qū)域中存儲指向基礎類Built_in_classY的類設計依賴字段偏置表所對的區(qū)域722的指針。這樣,對終端裝置A生成實例。
如圖40(b)所示,對終端裝置B也同樣,順序確保圖39所示的用戶類User_class的類設計非依賴字段偏置表所對的區(qū)域731和確保圖38(b)所示的類設計依賴字段偏置表所對的區(qū)域732。接著,在區(qū)域731中的實例字段的null對應的指針區(qū)域中存儲指向基礎類Built_in_classY的類設計依賴字段偏置表所對的區(qū)或732的指針。這樣,對終端裝置B生成實例。
(c)字段計數(shù)表說明程序執(zhí)行系統(tǒng)中使用的字段計數(shù)表。
(基礎類的類設計非依賴字段計數(shù)表)圖41表示終端裝置A和終端裝置B的輕量基礎類文件內(nèi)的類設計非依賴字段計數(shù)表的一個例子。
這個類設計非依賴字段計數(shù)表由類ID、非依賴字段計數(shù)和超級類ID的組構(gòu)成。由于類ID、非依賴字段計數(shù)和超級類ID與前面所述相同,省略了對它們的說明。
(基礎類的類設計依賴字段計數(shù)表)圖42(a)和(b)分別表示終端裝置A和終端裝置B的輕量基礎類文件內(nèi)的類設計依賴字段計數(shù)表的一個例子。
這些類設計依賴字段計數(shù)表分別由類ID和依賴字段計數(shù)的組構(gòu)成。由于類ID和依賴字段計數(shù)與前面所述相同,省略了對它們的說明。
(用戶類的類設計非依賴字段計數(shù)表)圖43表示終端裝置A和終端裝置B的輕量用戶類文件內(nèi)的類設計非依賴字段計數(shù)表的一個例子。
這個類設計依賴字段計數(shù)表分別由類ID、非依賴字段計數(shù)和超級類ID的組構(gòu)成。由于類ID、非依賴字段計數(shù)和超級類ID與前面所述相同,省略了對它們的說明。
(d)命令變換的一個例子下面表示出命令變換的一個例子。
對于圖44(a)所示的終端裝置A的基礎類Built_in_classY的類文件,成為putfield命令的操作數(shù)的<Built_in_classY.fieldY1>和成為putfield命令的操作數(shù)的<Built_in_classY.privateY1>表示常數(shù)存儲庫內(nèi)的偏置。程序執(zhí)行系統(tǒng)2的命令變換部根據(jù)上述的實例字段偏置表在實例區(qū)域中把偏置變換為特定實例字段的偏置號。成為[new命令]的操作數(shù)的<Built_in_classY>也同樣進行預定的號的變換。結(jié)果,得到圖44(b)所示的類文件。如該圖所示,把類文件中的putfield命令的操作數(shù)<Built_in_classY.fieldY1>變換為[4]。把成為putfield命令的操作數(shù)的<Built_in_classY.privateY1>變換為[4],向putfield命令添加[dependent]。
如圖45(a)所示,對于通常的Java用戶類的類文件,成為putfield命令的操作數(shù)的<User_class.fieldU1>表示常數(shù)存儲庫內(nèi)的偏置。程序執(zhí)行系統(tǒng)2的命令變換部根據(jù)上述的實例字段偏置表在實例區(qū)域中把偏置變換為特定實例字段的偏置號。成為[new命令]的操作數(shù)的<User_classY>也同樣進行預定的號的變換。結(jié)果,得到圖45(b)所示的類文件。如該圖所示,把類文件中的putfield命令的操作數(shù)變換為[7]。
2.2程序執(zhí)行系統(tǒng)2的動作說明程序執(zhí)行系統(tǒng)2的動作。由于程序執(zhí)行系統(tǒng)2的動作與程序執(zhí)行系統(tǒng)1的動作相同,僅就與程序執(zhí)行系統(tǒng)1的動作的不同點作說明。
(1)對基礎類文件鏈接的動作說明對基礎類文件鏈接的處理順序。
(偏置表生成部13的動作)使用圖46所示的流程圖詳細說明程序執(zhí)行系統(tǒng)2的偏置表生成部13在步驟S104a的偏置表生成處理。
在圖46中,由于付加與圖26的流程圖相同的符號的步驟與圖26的步驟相同,省略了對它們的說明。
在步驟S107b之后,偏置表生成部13取出對象類的非依賴字段,追加到圖37所示的超級類的類設計非依賴字段偏置表,把所述類設計非依賴字段偏置表輸出到命令變換部14。這里,對象類的超級類不存在時,從對象類的非依賴字段生成類設計非依賴字段偏置表,向依賴字段的指針區(qū)域的最前面追加1(步驟S401)。接著,如圖41所示,向非依賴字段計數(shù)表追加寫入對象類的類ID、非依賴字段計數(shù)、超級類ID。這里,以步驟S401生成的類設計非依賴字段偏置表為基礎,包括最前面的指針區(qū)域和承接來的非依賴字段數(shù),數(shù)出非依賴字段的數(shù)目,計算出非依賴字段計數(shù)(步驟S402)。
接著,偏置表生成部13僅取出對象類的依賴字段,生成如圖38所示的類設計依賴字段偏置表,把生成的類設計依賴字段偏置表輸出到命令變換部14(步驟S403),向圖42所示的依賴字段計數(shù)表追加寫入對象類的ID、依賴字段計數(shù)。這里,以所述生成的類設計依賴字段偏置表為基礎,包括承接來的依賴字段數(shù),數(shù)出對象類的依賴字段的數(shù)目,由此計算出非依賴字段計數(shù)(步驟S4042)。接著,把控制移動到步驟S109。
(命令變換部14的動作)使用圖47所示的流程圖詳細說明程序執(zhí)行系統(tǒng)2的命令變換部14在步驟S110a的命令變換。
在圖47中,由于付加與圖27的流程圖相同的符號的步驟與圖27的步驟相同,省略了對它們的說明。
在步驟S111a之后,在步驟S411命令變換部14添加dependent限定命令,參考對象類的依賴字段計數(shù)表,對第一操作數(shù)設定非依賴字段偏置,從而進行命令變換。這里,把如圖44(a)所示的[putfield<Built_in_classY.privateY1>]變換為圖44(b)所示的[dependentputfield4]。
在步驟S111e,命令變換部14參考類ID表進行把類名稱改變?yōu)轭怚D的命令變換。這里,把如圖44(a)所示的[new<Built_in_classY>]變換為圖44(b)所示的[new4]。
(2)與用戶類文件的鏈接動作說明與用戶類文件的鏈接處理的順序。
(偏置表生成部13的動作)使用圖48所示的流程圖詳細說明程序執(zhí)行系統(tǒng)2的偏置表生成部13在步驟S205a進行的偏置表生成處理。
在圖48中,由于付加與圖29的流程圖相同的符號的步驟與圖29的步驟相同,省略了對它們的說明。
在步驟S208b之后,在步驟S421偏置表生成部13生成圖39所示的類設計非依賴字段偏置表,傳遞到命令變換部14。
接著,在步驟S422,向圖43所示的非依賴字段計數(shù)表追加寫入對象類的類ID、非依賴字段計數(shù)、超級類ID。
接著,把控制移動到步驟S209。
(命令變換部14的動作)使用圖49所示的流程圖詳細說明程序執(zhí)行系統(tǒng)2的命令變換部14在步驟S210a進行的命令變換。
在圖49中,由于付加與圖29的流程圖相同的符號的步驟與圖29的步驟相同,省略了對它們的說明。
在步驟S210之后,在步驟S431命令變換部14參考對象類的非依賴字段偏置表,對第一操作數(shù)設定非依賴字段偏置,從而進行命令變換。這里,把如圖45(a)所示的[putfield<User_class.fieldU1>]變換為圖45(b)所示的[putfield7]。接著,返回步驟S210,重復處理。
在步驟S211b之后,在步驟S432命令變換部14參考類ID對照表進行把類名稱改變?yōu)轭怚D的命令變換。這里,把如圖45(a)所示的[new<User_class>]變換為圖45(b)所示的[new 8001]。接著,返回步驟S211b,重復處理。
(3)終端裝置20的命令執(zhí)行處理動作使用圖50和圖51所示的流程圖說明終端裝置(輕便虛擬機器)20的命令執(zhí)行處理順序。
由于在圖50中付加與圖31的流程圖相同的符號的步驟與圖31的步驟相同、在圖51中付加與圖32的流程圖相同的符號的步驟與圖32的步驟相同,省略了對它們的說明。
在步驟S304之后,在步驟S441實例生成部22從輕量用戶類文件讀出類設計非依賴字段計數(shù)表,在存儲器上確保對象類的非依賴字段計數(shù)部分的區(qū)域X。圖40(a)的號碼721表示存儲器上確保的區(qū)域X的一個例子。接著把控制移動到步驟S306。
在步驟S306之后,在步驟S442實例生成部22從輕量基礎類文件讀出類設計依賴字段計數(shù)表,確保對象類的字段計數(shù)部分的區(qū)域Y。接著在步驟S442,實例生成部22在區(qū)或X的第一位置上存儲指向區(qū)域Y的指針。區(qū)域X和區(qū)域y的關(guān)系如圖40(a)所示。
在步驟S210之后,在步驟S444,命令執(zhí)行部21通過把偏置1加到棧上堆積的實例地址,得到存儲指向依賴字段區(qū)域的指針的區(qū)域Y,接著,在步驟S445,命令執(zhí)行部21把作為選擇的命令的第一操作數(shù)的依賴字段偏置加到在區(qū)域Y中存儲的指針所指示的地址,從而得到成為putfield命令(或getfield命令)的對象的區(qū)域X。
接著把控制移動到步驟S317.。
2.3總結(jié)由于終端裝置A和終端裝置B生成圖40(a)和(b)所示的實例,例如,用戶類User_class的fieldU1對于終端裝置A和終端裝置B相同,作為實例區(qū)域的第7變量來存取。
通過上述說明,程序執(zhí)行系統(tǒng)2與程序執(zhí)行系統(tǒng)1一樣適合應用于內(nèi)部機器等的處理能力低的終端裝置。由于對多個終端裝置使用相同輕量用戶類文件,可減輕程序開發(fā)者的處理負擔。
程序執(zhí)行系統(tǒng)2從最前面向最后面變更類涉及非依賴表中指針區(qū)域的位置等,可進行與程序執(zhí)行系統(tǒng)1相同的變形。
3.第三實施例說明作為本發(fā)明第三實施例的程序執(zhí)行系統(tǒng)3。
程序執(zhí)行系統(tǒng)3與程序執(zhí)行系統(tǒng)1相比,主要不同在于類設計非依賴字段偏置表和類設計依賴字段偏置表的結(jié)構(gòu)以及它們的動作。除此之外的結(jié)構(gòu)、操作與程序執(zhí)行系統(tǒng)1一致。
下面的說明中,與原來的程序執(zhí)行系統(tǒng)一樣,編譯并使用圖1到圖3所示的Java程序。
對于程序執(zhí)行系統(tǒng)3,圖52表示對應于基礎類生成的類設計非依賴字段偏置表。圖53表示對應于基礎類生成的實例字段偏置表。
程序執(zhí)行系統(tǒng)3預先確定用于基礎類文件的類設計依賴字段的最大數(shù)目,基礎類文件的設計者把基礎類文件設計成使得類設計依賴字段不超過所述最大數(shù)目。在基礎類定義文件中不包括固定長度的類設計依賴字段的最大數(shù)目以外的信息,這里作為例子把類設計依賴字段的最大數(shù)目設置為5。
程序執(zhí)行系統(tǒng)3對于每一類計算出表示在該類上包括的類設計非依賴字段數(shù)目的非依賴字段計數(shù)。接著,把計算出的非依賴字段計數(shù)、作為固定值的依賴字段計數(shù)和承接來的類的字段計數(shù)相加,計算出計數(shù),生成包含該計算出的計數(shù)的計數(shù)表,把生成的計數(shù)表追加寫入到輕量類文件中。
程序執(zhí)行系統(tǒng)3與程序執(zhí)行系統(tǒng)1和程序執(zhí)行系統(tǒng)2不同,不新生成基礎類的類設計依賴字段計數(shù)表,通過向類設計非依賴字段偏置不添加與類設計依賴字段相關(guān)的信息而生成實例字段偏置表、生成計數(shù)表,把包括計數(shù)表的輕量類文件從程序生成裝置10輸送到終端裝置20。
如圖52的基礎類Built_in_classX的類設計非依懶字段偏置表所示,對于類設計非依賴字段fieldX1、fieldX2定義并順序分配偏置號[1]、[2],確保偏置號[3]到[7]用于類設計依賴字段。
如圖52的基礎類Built_in_classY的類設計非依賴字段偏置表所示,對于從基礎類Built_in_classX承接來的類設計非依賴字段fieldX1、fieldX2和新定義的類設計非依賴字段fieldY1、fieldY2、fieldY3分別分配偏置號[1]、[2]、[8]、[9]、[10],確保偏置號[3]到[7]和確保偏置號[11]到[15]用于類設計依賴字段。
通過向上述說明的類設計非依賴字段偏置表添加與類設計依賴字段相關(guān)的信息生成圖53(a)、(b)分別表示的終端裝置A、終端裝置B的實例字段偏置表。
圖54表示對應于圖3所示的用戶類User_class生成的實例字段偏置表,圖55(a)和(b)表示終端裝置A、終端裝置B上生成的用戶類User_class的實例。
由于預先執(zhí)行終端裝置上使用的類設計依賴字段的最大數(shù)目,如圖54所示,用戶類User_class的實例字段偏置表對于終端裝置A、終端裝置B并沒有不同,包括這些實例字段偏置表的輕量用戶類文件對于終端裝置A、終端裝置B也相同。
實際上,終端裝置A、終端裝置B根據(jù)這些基礎類和用戶類的實例字段偏置表(這里實例字段偏置表表示實例字段類型與偏置號的對應)分別生成圖55(a)、(b)所示的實例。具體說,終端裝置A、終端裝置B生成預定長度的實例。圖55(a)、(b)的實例包括17個實例字段。終端裝置A、終端裝置B對于所述實例確保各個依賴實例字段。終端裝置A、終端裝置B從輕量類文件讀出對每一類計算的計數(shù),對于所述實例,對每一類確保與所述讀出的計數(shù)相當?shù)臄?shù)目的實例。這里,例如,終端裝置A和終端裝置B同樣對于所述實例確保User_class的fieldU1和fieldU2。對于終端裝置A和終端裝置B同樣把User_class的fieldU1作為16個變量來存取。
通過上述說明,程序執(zhí)行系統(tǒng)3與程序執(zhí)行系統(tǒng)1一樣適合應用于內(nèi)部機器等的處理能力低的終端裝置,由于對多個終端裝置使用相同輕量用戶類文件,可減輕程序開發(fā)者的處理負擔。另外,由于終端裝置可原樣使用原來使用的類文件,可引入程序執(zhí)行系統(tǒng),該系統(tǒng)更進一步減輕了程序開發(fā)者一側(cè)的處理負擔。
程序執(zhí)行系統(tǒng)3把基礎類定義文件作為僅包括類設計依賴字段的最大數(shù)目的信息的文件,但是也可以將其構(gòu)成為包括與其它的實例字段的定義相關(guān)的信息。
4.其它變形例根據(jù)上述實施例說明了本發(fā)明,但是本發(fā)明并不限定于上述實施例。下面的情況也包括在本發(fā)明中。
(1)本發(fā)明可作為上面所述的方法。也可作為計算機來實現(xiàn)這些方法的計算機程序,作為由所述計算機程序構(gòu)成的數(shù)字信號。
本發(fā)明可以作為計算機可讀取記錄媒體,其上記錄所述計算機程序或所述數(shù)字信號,這些媒體例如是軟盤、硬盤、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM.半導體存儲器等?;蛘呖梢宰鳛檫@些記錄媒體上記錄的所述計算機程序或所述數(shù)字信號。
本發(fā)明可以經(jīng)以電通信電纜、無線或有線電纜、互聯(lián)網(wǎng)為代表的網(wǎng)絡等傳輸所述計算機程序或所述數(shù)字信號。
本發(fā)明作為配置微處理器和存儲器的計算機系統(tǒng),所述存儲器存儲所述計算機程序,所述微處理器按照所述計算機程序動作。
通過在所述記錄媒體上記錄所述計算機程序或所述數(shù)字信號并傳送它,或通過經(jīng)所述網(wǎng)絡等傳送所述計算機程序或所述數(shù)字信號,也可由獨立的另外的計算機系統(tǒng)來實施本發(fā)明。
(2)也可以分別組合上述實施例和上述變形例。
盡管通過舉例方式參考附圖充分描述了本發(fā)明,應注意對于熟悉本領(lǐng)域的技術(shù)人員而言可進行各種改變和修改。因此,除非這種改變和修改背離了本發(fā)明的范圍,否則應認為它們都被包括在本發(fā)明之中。
權(quán)利要求
1.一種程序生成裝置,對每個終端裝置定義不同的依賴變量并對每個終端裝置定義共同的非依賴變量,把具有承接關(guān)系的多個類定義的多個類文件鏈接到每個終端裝置而分別生成輕量類文件,包括存儲裝置,存儲具有承接關(guān)系的多個類分別定義的多個類文件、在各個類中定義由變量名分別識別的依賴變量和非依賴變量,各個類文件對每個變量包括變量名;號生成裝置,在鏈接每一個終端裝置時,對所述存儲裝置內(nèi)存儲的各個類文件定義的變量的每一個生成偏置號,以便使多個終端裝置中付加相同變量名的非依賴變量由相同的號構(gòu)成;輕量類文件生成裝置,對所述存儲裝置中存儲的各個類文件,對每個變量把相應的變量名置換為所述號生成裝置生成的偏置號,生成輕量類文件。
2.根據(jù)權(quán)利要求1的程序生成裝置,所述號生成裝置對于依賴變量和非依賴變量根據(jù)不同的號體系對每個變量生成偏置號。
3.根據(jù)權(quán)利要求2的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
4.根據(jù)權(quán)利要求2的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,對于所述第二類,所述號生成裝置根據(jù)不同的號體系對于僅對第二類定義的依賴變量和承接第一類的依賴變量生成每一變量的偏置號。
5.根據(jù)權(quán)利要求4的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
6.根據(jù)權(quán)利要求2的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,對于所述第二類,所述號生成裝置根據(jù)一種號體系對于僅對第二類定義的依賴變量和承接第一類的依賴變量生成每一變量的偏置號。
7.根據(jù)權(quán)利要求6的程序生成裝置,所述輕量類文件生成裝置還對每一類計算分別表示相應類上包括的非依賴變量的數(shù)目和依賴變量的數(shù)目的非依賴變量計數(shù)和依賴變量計數(shù),把計算出的非依賴變量計數(shù)和依賴變量計數(shù)追加到輕量類文件上。
8.根據(jù)權(quán)利要求1的程序生成裝置,所述多個類包括第一類和承接所述第一類的第二類,所述號生成裝置對于全部依賴變量和非依賴變量根據(jù)一種號體系生成偏置號,這里,對于所述第二類,對于僅對第二類定義的變量和承接第一類的變量隔開一定間隔生成每一變量的偏置號。
9.根據(jù)權(quán)利要求8的程序生成裝置,所述輕量類文件生成裝置還對每一類計算表示相應類上包括的非依賴變量的數(shù)目的非依賴變量計數(shù),把計算出的非依賴變量計數(shù)和作為固定值的依賴變量計數(shù)相加得到的計數(shù)追加到輕量類文件上。
10.一種按照程序生成裝置生成的輕量類文件動作的虛擬機器,包括存儲裝置,存儲權(quán)利要求1的程序生成裝置生成的輕量類文件;實例生成裝置,讀出所述輕量類文件,根據(jù)讀出的輕量類文件內(nèi)的每一個變量的偏置號生成實例;執(zhí)行裝置,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。
11.一種按照程序生成裝置生成的輕量類文件動作的虛擬機器,包括存儲裝置,存儲權(quán)利要求3的程序生成裝置生成的輕量類文件;實例生成裝置,讀出所述輕量類文件,根據(jù)對讀出的輕量類文件包括的每一類的計算出的非依賴變量計數(shù)和依賴變量計數(shù),在存儲器上分別確保第一區(qū)域和第二區(qū)域,把指向所述第一區(qū)域的指針存儲在所述第二區(qū)域中,從而生成實例;執(zhí)行裝置,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。
12.一種程序生成裝置使用的程序生成方法,對每個終端裝置定義不同的依賴變量并對每個終端裝置定義共同的非依賴變量,把具有承接關(guān)系的多個類定義的多個類文件鏈接到每個終端裝置而分別生成輕量類文件,所述程序生成裝置包括存儲裝置,存儲具有承接關(guān)系的多個類分別定義的多個類文件、對各個類定義由變量名分別識別的依賴變量和非依賴變量,各個類文件包括每個變量的變量名;號生成裝置,在鏈接每一個終端裝置時,對所述存儲裝置上存儲的各個類文件定義的變量的每一個生成偏置號,以便使多個終端裝置中付加相同變量名的非依賴變量由相同的號構(gòu)成;輕量類文件生成裝置,對所述存儲裝置上存儲的各個類文件,對每個變量把相應的變量名置換為所述號生成裝置生成的偏置號,生成輕量類文件。
13.一種存儲計算機用的計算機程序的計算機可讀取媒體,對每個終端裝置定義不同的依賴變量并對每個終端裝置定義共同的非依賴變量,把具有承接關(guān)系的多個類定義的多個類文件鏈接到每個終端裝置而分別生成輕量類文件,所述計算機包括存儲裝置,存儲具有承接關(guān)系的多個類分別定義的多個類文件、對各個類定義由變量名分別識別的依賴變量和非依賴變量,各個類文件包括每個變量的變量名;號生成裝置,在鏈接每一個終端裝置時,對所述存儲裝置上存儲的各個類文件定義的變量的每一個生成偏置號,以便使多個終端裝置中付加相同變量名的非依賴變量由相同的號構(gòu)成;輕量類文件生成裝置,對所述存儲裝置上存儲的各個類文件,對每個變量把相應的變量名置換為所述號生成裝置生成的偏置號,生成輕量類文件。
14.一種根據(jù)程序生成裝置生成的輕量類文件動作的虛擬機器所使用的程序執(zhí)行方法,包括所述虛擬機器配備如下存儲裝置,存儲權(quán)利要求1的程序生成裝置生成的輕量類文件;所述程序執(zhí)行方法包括實例生成步驟,讀出所述輕量類文件,根據(jù)讀出的輕量類文件內(nèi)的每一個變量的偏置號生成實例;執(zhí)行步驟,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。
15.一種存儲根據(jù)程序生成裝置生成的輕量類文件動作的虛擬機器使用的計算機程序的計算機可讀取媒體,包括所述虛擬機器配備如下存儲裝置,存儲權(quán)利要求1的程序生成裝置生成的輕量類文件;所述計算機程序包括實例生成步驟,讀出所述輕量類文件,根據(jù)讀出的輕量類文件內(nèi)的每一個變量的偏置號生成實例;執(zhí)行步驟,使用生成的實例執(zhí)行輕量類文件內(nèi)定義的命令。
16.一種存儲根據(jù)權(quán)利要求1的程序生成裝置生成的輕量類文件動作的虛擬機器使用的計算機程序的計算機可讀取媒體。
全文摘要
偏置表生成部13對于從基礎類文件承接來的類設計非依賴字段和新定義的類設計非依賴字段分配偏置號,以便對應于終端裝置的種類變換個數(shù)或類型,而不需要與從基礎類文件承接來的類設計依賴字段。命令變換部14根據(jù)這個號變換用戶類文件中的命令。
文檔編號G06F9/445GK1312502SQ0111688
公開日2001年9月12日 申請日期2001年2月21日 優(yōu)先權(quán)日2000年2月21日
發(fā)明者河合正樹, 川本琢二 申請人:松下電器產(chǎn)業(yè)株式會社