CN1251075C - 程序生成装置及其方法、计算机装置及其处理方法 - Google Patents
程序生成装置及其方法、计算机装置及其处理方法 Download PDFInfo
- Publication number
- CN1251075C CN1251075C CNB011168846A CN01116884A CN1251075C CN 1251075 C CN1251075 C CN 1251075C CN B011168846 A CNB011168846 A CN B011168846A CN 01116884 A CN01116884 A CN 01116884A CN 1251075 C CN1251075 C CN 1251075C
- Authority
- CN
- China
- Prior art keywords
- class
- variable
- dependence
- light weight
- class file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
偏置表生成部13对于从基础类文件承接来的类设计非依赖字段和新定义的类设计非依赖字段分配偏置号,以便对应于终端装置的种类变换个数或类型,而不需要与从基础类文件承接来的类设计依赖字段。命令变换部14根据这个号变换用户类文件中的命令。
Description
技术领域
本申请是基于在日本提出的申请号为No.2000-43499的申请的,并且该申请的内容在这里引用来作为参考。
背景技术
本发明涉及从以对象指向语言描述的源程序生成执行程序并执行该程序的技术。
原来,已知有各种在内部机器(作为便携电话、STB(机顶盒)、电视等使用的计算机)或个人计算机(下面称为PC)中执行那里生成的执行程序的程序执行系统,这些执行程序通过编译用户程序设计语言描述的源程序并进行链接等来生成。
下面说明已有的程序执行系统,该系统用于根据以对象指向语言即Java(Java是Sun Microsystem公司的商标)描述的源程序使内部机器动作。
上述已有程序执行系统由程序生成装置和内部机器即终端装置构成。
程序生成装置编译并链接1个用户类源程序和对于上述源程序使用的每个终端装置上不同的基础库内的程序,在每个终端装置上,生成不同的轻量用户类文件。这里,基础库对每种终端装置准备不同的程序,各个基础库作为文件群含有依赖于终端装置、与终端装置固有的硬件控制直接相关的程序,如控制在显示单元上的显示或数据通信等的程序。
把每个终端装置上生成的轻量用户类文件存储在对应的终端装置内,各终端装置按照轻量用户类文件动作。
下面更详细地说明上述已有程序执行系统,其假设硬件结构的一部分不同的两种终端装置A和终端装置B、从同一用户类的源程序分别生成轻量用户类文件、在对应的终端装置上执行生成的各个轻量用户类文件。
对于终端装置A和B,分别在图1和2中表示成为生成进行同样的处理的基础类文件的基础的用Java描述的源程序的一个例子。对于终端装置A和B,在图3中表示出成为生成共同使用的用户类文件的基础的用Java描述的源程序的一个例子。这些图中,仅表示出字段的定义,省略了关于该方法中的具体使用这些字段的描述。
如图1所示,类Built_in_classX使用实例字段privateX1、privateX2、privateX3和实例字段fieldX1、fieldX2。实例字段privateX1、privateX2、privateX3中由于使用限定语private定义,所以禁止来自包含在其它类内的方法的访问。实例字段fieldX1、fieldX2容许来自其它类的访问。
类Built_in_classY使用实例字段privateY1、privateY2和实例字段fieldY1、fieldY2、fieldY3。实例字段privateY1、privateY2中由于使用限定语private定义,所以禁止来自包含在其它类内的方法的访问。实例字段fieldY1、fieldY2、fieldY3容许来自其它类的访问。
如图2所示,与上述相同,类Built_in_classX使用禁止来自包含在其它类内的方法的访问的privateX1和容许来自其它类的访问的实例字段fieldX1、fieldX2。类Built_in_classY使用禁止来自包含在其它类内的方法的访问的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,把它们分别构成一个基础类文件。
如这些所示,不论是终端装置A或是终端装置B,都使用具有相同功能的同一名称的类Built_in_classX和Built_in_classY。其中,使用的实例字段是容许来自其它类的访问的,使用表示相同内容、相同名称的字段,例如fieldX1、fieldX2、fieldY1、fieldY2、fieldY3。
对于禁止来自其它类的访问的字段,使用表示不同个数的不同内容的字段,例如终端装置A的privateX1、privateX2、privateX3和终端装置B的privateX1。
终端A的privateX1和终端装置B的privateX1名称相同,但表示不同的内容。对于终端装置A的privateY1、privateY2和终端装置B的privateY1、privateY2也同样,虽然名称相同,却表示不同内容。
这些使用限定语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并将其构成一个用户类文件。如图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]。
接着,上述程序生成装置根据这些表进行在类文件中的命令中作为操作数使用的实例字段的偏置号化,消除常数存储库内的识别信息。这样,从同样一个用户类源程序在每个终端装置上生成不同轻量用户类文件。
这样,已有的程序执行系统中存在的问题是:尽管是同一用户类源程序,也必须进行终端装置(换句话说,轻量基础类文件)的种类数目的链接。
发明内容
为解决上述问题,本发明作为一种按对象指向语言描述的源程序生成执行程序的程序生成装置,其目的是提供在对于多种不同终端装置的每一个具有不同基础类、生成各终端装置用的执行程序的程序生成装置中,在编译链接公用程序时,不需要和每一个终端装置链接的程序生成装置、程序生成方法、记录程序生成程序的记录媒体、虚拟机器、程序执行方法、记录程序执行程序的记录媒体、记录由所述程序生成装置生成的程序的记录媒体。
为达到上述目的,按照本发明的程序生成装置,对每个终端装置定义不同的依赖变量并对每个终端装置定义公用的非依赖变量,把具有承接关系的多个类定义的多个类文件链接到每个终端装置而分别生成轻量类文件,包括:
存储装置,存储具有承接关系的多个类分别定义的多个类文件、对各个类定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名;
号生成装置,在链接一个终端装置时,生成包含所述各个类文件中包含的非依赖变量的非依赖偏置表,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,并使用所生成的偏置表对所述存储装置上存储的各个类文件定义的每个变量生成偏置号;
轻量类文件生成装置,对所述存储装置上存储的各个类文件,对每个变量把相应的变量名置换为所述号生成装置生成的偏置号,生成轻量类文件。
根据这样的结构,由于链接每一个终端装置时,在不同终端装置中用相同的变量名识别的非依赖变量具有相同的号,对于在所述存储装置中存储的各类文件上定义的每个变量生成不同的偏置号、生成置换所生成的偏置号的轻量类文件,通过使用所述轻量类文件,编译链接公用程序时,不需要和每一个终端装置链接。
这里,按照本发明的程序生成装置,所述号生成装置对于依赖变量根据由连续的号构成的号体系对每个变量生成偏置号,对于非依赖变量根据由连续的号构成的、与上述号体系不同的号体系对每个变量生成偏置号。
根据这样的结构,由于对于依赖变量和非依赖变量由不同的号体系生成偏置号,实际上,不同终端装置中用相同的变量名识别的非依赖变量可具有相同的号。
这里,按照本发明的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示相应类上包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件上。
根据这样的结构,在虚拟机器中,能使用轻量类文件含有的、对每一类计数的非依赖变量计数和依赖变量计数生成实例。
这里,按照本发明的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
关于所述第二类,所述号生成装置对于仅在第二类中被定义的依赖变量,根据由连续的号构成的号体系对每个变量生成偏置号,对于从第一类承接的依赖变量,根据由连续的号构成的、与上述号体系不同的号体系对每个变量生成偏置号。
根据这样的结构,由于在所述第二类中,对于仅在第二类中定义的依赖变量和从第一类承接来的依赖变量由不同的号体系生成偏置号,可确实区分开仅在第二类中定义的依赖变量和从第一类承接来的依赖变量。
这里,按照本发明的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示相应类上包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件上。
根据这样的结构,在虚拟机器中,能使用轻量类文件含有的、对每一类计数的非依赖变量计数和依赖变量计数生成实例。
这里,按照本发明的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
关于所述第二类,所述号生成装置对于仅在第二类中被定义的依赖变量和从第一类承接的依赖变量,根据由连续的号构成的一种号体对每个变量生成偏置号。
由于在所述第二类中,对于仅在第二类中定义的依赖变量和从第一类承接来的依赖变量由1个号体系生成偏置号,所述号生成装置使用的号体系少,管理容易。
这里,按照本发明的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示相应类上包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件上。
根据这样的结构,在虚拟机器中,能使用轻量类文件含有的、对每一类计数的非依赖变量计数和依赖变量计数生成实例。
这里,按照本发明的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
所述号生成装置对于全部依赖变量和非依赖变量根据由连续的号构成的一种号体系生成偏置号,这里,关于所述第二类,对于仅在第二类中被定义的变量和从第一类承接的变量隔开一定间隔对每个变量生成偏置号。
根据这样的结构,对于全部依赖变量和非依赖变量由一个号体系生成偏置号,这里,由于在所述第二类中,对于仅在第二类中定义的依赖变量和从第一类承接来的依赖变量隔开一定间隔来生成偏置号,所以偏置号的管理容易。
这里,按照本发明的程序生成装置,所述轻量类文件生成装置还对每一类计算表示相应类上包括的非依赖变量的数目的非依赖变量计数,把计算出的非依赖变量计数和作为固定值的依赖变量计数相加得到的计数追加到轻量类文件上。
根据这样的结构,在虚拟机器中,能使用轻量类文件含有的、对每一类计数的非依赖变量计数和依赖变量计数生成实例。
这里,本发明的一种按照程序生成装置生成的轻量类文件动作的计算机装置,包括:
存储装置,存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,在各个类文件中分别定义具有承接关系的多个类,在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名;
实例生成装置,读出所述轻量类文件,根据读出的轻量类文件内的每一个变量的偏置号生成实例;
执行装置,使用生成的实例执行轻量类文件内定义的命令。
根据这样的结构,由于根据所述程序生成装置生成的轻量类文件内的每一个变量的偏置号生成实例,所以编译链接公用程序时,就不要各终端装置的连接,从而能够在各终端装置执行这样生成的程序。
这里,本发明的一种按照程序生成装置生成的轻量类文件动作的计算机装置,包括:
存储装置,存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,所述轻量类文件还包括对每一类分别表示相应类上包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数;
实例生成装置,读出所述轻量类文件,根据对读出的所述轻量类文件包括的每一类计算出的非依赖变量计数和依赖变量计数,在存储器上分别分配第一区域和第二区域,把指向所述第一区域的指针存储在所述第二区域中,从而生成实例;
执行装置,使用生成的实例执行轻量类文件内定义的命令。权利要求11也可以。
根据这样的结构,由于根据包含在所述轻量类文件中的第一表和第二表,在存储器上分别确保第一区域和第二区域、把对第一区域的指针存储在所述第二区域中,由此来生成实例,因此可确实生成实例。
这里,本发明的一种用于程序生成装置中的程序生成方法,对每个终端装置定义不同的依赖变量并对每个终端装置定义共同的非依赖变量,把具有承接关系的多个类定义的多个类文件链接到每个终端装置而分别生成轻量类文件,所述程序生成装置存储多个类文件,该多个类文件在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名并分别定义具有承接关系的多个所述类,所述程序生成方法的特征在于包括以下步骤:
号生成步骤,在链接一个终端装置时,生成包含所述各个类文件中包含的非依赖变量的非依赖偏置表,以便对于其它终端装置中分配相同变量名的非依赖变量成为相同的号,并使用所生成的偏置表对所述存储装置上存储的各个类文件定义的每个变量生成偏置号;
轻量类文件生成步骤,对所述存储装置上存储的各个类文件,对每个变量把相应的变量名置换为所述号生成装置生成的偏置号,生成轻量类文件。
这里,本发明的一种由计算机装置使用的计算机处理方法,所述计算机装置在各个类文件中分别定义具有承接关系的多个类,在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名,所述计算机装置存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,所述计算机处理方法的特征在于包括以下步骤:
实例生成步骤,读出所述轻量类文件,根据读出的轻量类文件内的每一个变量的偏置号生成实例;
执行步骤,使用生成的实例执行轻量类文件内定义的命令。
本发明的这些和其它目的、优点和特征从下面的结合附图的描述中变得更明显,这些附图图示出本发明的特定实施例。
附图说明
图1表示在已有的程序执行系统中,在终端装置A中成为生成进行处理的基础类文件的基础的以Java描述的源程序的一个例子;
图2表示在已有的程序执行系统中,在终端装置B中成为生成进行处理的基础类文件的基础的用Java描述的源程序的一个例子;
图3表示在已有的程序执行系统中,在终端装置A和B中成为生成共同用户类文件的基础的用Java描述的源程序的一个例子;
图4表示在已有的程序执行系统中,在终端装置A中对基础类文件的实例字段偏置表;
图5表示在已有的程序执行系统中,在终端装置B中基础类文件的实例字段偏置表;
图6表示在已有的程序执行系统中,在终端装置A中用户类文件的实例字段偏置表;
图7表示在已有的程序执行系统中,在终端装置B中用户类文件的实例字段
图8表示程序执行系统1的结构框图;
图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命令的操作数结构;
图19:
(a)表示终端装置A的变换前的基础类Built_in_classY;
(b)表示终端装置B的变换前的基础类Built_in_classY;
图20表示基础类的类ID对照表的例子;
图21表示用户类的类ID对照表的例子;
图22表示终端装置A和B共同的轻量基础类文件的类设计非依赖字段计数表的例子;
图23表示终端装置A和B共同的轻量用户类文件的类设计非依赖字段计数表的例子;
图24:
(a)表示终端装置A的轻量基础类文件的类设计依赖字段计数表的例子;
(b)表示终端装置B的轻量基础类文件的类设计依赖字段计数表的例子;
图25表示基础类文件的链接处理的顺序的流程图;
图26表示偏置表生成处理的具体流程图;
图27表示命令变换的具体流程图;
图28表示用户类文件的链接处理的顺序的流程图;
图29表示偏置表生成处理的具体流程图;
图30表示命令变换的具体流程图;
图31表示终端装置20的命令执行处理的顺序的流程图,接着是图32;
图32表示终端装置20的命令执行处理的顺序的流程图,接自图31;
图33表示成为编译后生成类文件的基础的Java程序的例子;
图34:
(a)表示在程序执行系统1中,对应于图33所示的Java程序生成的实例;
(b)表示在其它程序执行系统1中,对应于图33所示的Java程序生成的实例;
图35表示成为编译后生成类文件的基础的Java程序的例子;
图36:
(a)表示对应于图35所示的Java程序生成的变换后的getfield命令的操作数,对应于类A;
(b)表示对应于图35所示的Java程序生成的变换后的getfield命令的操作数,对应于类B;
图37表示在程序执行系统2中,对应于基础类生成的类设计非依赖字段偏置表;
图38:
(a)表示在终端装置A中对应于基础类生成的类设计依赖字段偏置表;
(b)表示在终端装置B中对应于基础类生成的类设计依赖字段偏置表;
图39表示对应于图3所示的用户类User_class生成的类设计非依赖字段偏置表;
图40:
(a)表示在终端装置A中生成的用户类User_class的实例;
(b)表示在终端装置B中生成的用户类User_class的实例;
图41表示终端装置A和B的轻量基础类文件内的类设计非依赖字段计数表的例子;
图42:
(a)表示终端装置A的轻量基础类文件内的类设计依赖字段计数表的例子;
(b)表示终端装置B的轻量基础类文件内的类设计依赖字段计数表的例子;
图43表示终端装置A和B的轻量用户类文件内的类设计非依赖字段计数表的例子;
图44:
(a)表示变换前的终端装置A的基础类Built_in_classY的类文件的例子;
(b)表示变换后的终端装置A的基础类Built_in_classY的类文件的例子;
图45:
(a)表示变换前的用户类的类文件的例子;
(b)表示变换后的用户类的类文件的例子;
图46表示在对基础类文件的操作中,程序执行系统2的偏置表生成部13的偏置表的生成处理的具体流程图;
图47表示在对基础类文件的操作中,程序执行系统2的命令变换部14的命令变换的具体流程图;
图48表示在对用户类文件的操作中,程序执行系统2的偏置表生成部13的偏置表的生成处理的具体流程图;
图49表示在对用户类文件的操作中,程序执行系统2的命令变换部14的命令变换的具体流程图;
图50表示终端装置20的命令执行处理的顺序的流程图,接着是图51;
图51表示终端装置20的命令执行处理的顺序的流程图,接自图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的实例;
具体实施方式
说明作为本发明的实施例的程序执行系统。
1.第一实施例
说明作为本发明的第一实施例的程序执行系统1。
1.1程序执行系统1的结构
使用说明图8所示的结构的框图来说明程序执行系统1的结构。
如图8所示,程序执行系统1由程序生成装置10和作为内部机器的终端装置(轻便虚拟机器)20构成。程序生成装置10包括编译部11、静态链接部12和图中未示出的存储部,终端装置20包括命令执行部21和图中未示出的存储部。
程序生成装置10和终端装置20都是包括微处理器、RAM、ROM等的计算机系统,RAM和ROM上存储计算机程序,所述微处理器按照所述计算机程序动作,从而程序生成装置10和终端装置20实现其功能。
编译部11和静态链接部12都包括在一个程序生成装置10内,也可以分别包括在各自不同的装置中。此时,可构成包含生成轻量用户类文件56的程序生成部的一个装置。
(1)源程序51
源程序51存储在程序生成装置10内的存储部中。源程序51是用户使用Java描述的程序,包括多个类。源程序51包括与基础类相关的程序和与用户类相关的程序。
(2)基础类定义文件55
基础类定义文件55预先存储在程序生成装置10内的存储部中。基础类定义文件55表示包括在终端装置预先存储的轻量基础类库58中的类、方法、字段的定义。基础类定义文件55不包括类设计依赖字段的名称、类型、个数等信息。
(3)编译部11
编译部11从存储部读出源程序51、编译源程序51、生成对应于源程序51上包括的各个类的类文件52、....、53。类文件52、....、53包括与基础类相关的文件和与用户类相关的文件。编译部11把生成的类文件52、....、53写入存储部。
(4)静态链接部12
静态链接部12从存储部读出类文件52、....、53和基础类定义文件55,必要时使用基础类定义文件55,解决类文件52、....、53中的常数存储库(constantpool)内的识别信息,通过这样解决除去不要的识别信息,生成轻量类文件54,....,把生成的轻量类文件54,....写入存储部。
轻量类文件54,....包括轻量基础类文件和轻量用户类文件。轻量基础类文件是与终端装置20固有的硬件结构、控制相关的轻量类文件,而轻量用户类文件是作为用户类文件的轻量类文件。
静态链接部12由偏置表生成部13和命令变换部14以及链接部15构成。
偏置表生成部13对在类文件中使用的实例字段分配偏置号。偏置表生成部13包括非依赖表生成部131和依赖表生成部132。非依赖表生成部131生成与不依赖于终端装置的硬件(换句话说是基础类)的设计的类设计非依赖字段相对的类设计非依赖字段偏置表。依赖表生成部132生成与依赖于终端装置的硬件(换句话说是基础类)的设计的类设计依赖字段相对的类设计依赖字段偏置表。偏置表生成部13生成计数表,并把所生成的计数表追加写入轻量类文件中。
命令变换部14把类文件中指示实例字段的常数存储库内的偏置置换为被分配的偏置号。
链接部15进行其它链接处理。
(5)轻量用户类文件56、轻量基础类文件57
在执行轻量用户类文件56之前,轻量基础类文件作为轻量基础类文件57先存储在终端装置20中。轻量用户类文件作为轻量用户类文件56,经作为流通对象的预定传输路径下载而读入并存储在终端装置20中。
轻量基础类库58预先容纳有所述多个轻量基础类文件,作为文件群。这样,读入的轻量用户类文件56和用轻量用户类文件56指定的轻量基础类库58中的轻量基础类文件57全部链接起来,换言之,解决了识别信息。
(6)命令执行部21、实例生成部22
命令执行部21调出轻量用户类文件56中的命令,必要时调出并执行轻量基础类文件57。实例生成部22随着命令的执行生成实例。
1.2程序生成装置10的动作
用图9和图10说明程序生成装置10生成轻量基础类文件和轻量用户类文件的动作。
(1)轻量基础类文件的生成动作
程序生成装置10从基础类的源程序511生成轻量基础类文件541的动作如图9所示。
编译部11编译基础类的源程序511、生成基础类文件521、...522。接着静态链接部12的非依赖表生成部131从基础类文件521、...522生成如图11所示的类设计非依赖字段偏置表,依赖表生成部132从基础类文件521、...522生成如图12所示的类设计依赖字段偏置表。然后,命令变换部14根据这些表把常数存储库内的偏置置换成所述各个表生成时分配来的偏置号。这里,常数存储库内的所述偏置指示由getfield命令、putfield命令等预定命令的操作数构成的实例字段。接着链接部15进行这些以外的链接处理。
偏置表生成部13从基础类文件521、...522收集表示类、方法、字段等的定义的信息,将它们存储在基础类定义文件55中。如前面所述,基础类定义文件55不包括类设计字段的名称、类型、个数等的信息,基础类定义文件55对于全部种类的终端生成的内容相同。
(2)轻量用户类文件的生成动作
接着,程序生成装置10从用户类的源程序512生成轻量用户类文件542的动作如图10所示。
所述轻量基础类文件生成后,编译部11编译用户类的源程序512、生成用户类文件531、...532。接着静态链接部12的非依赖表生成部131从用户类文件531、...532和生成的所述基础类定义文件55生成如图13所示的类设计非依赖字段偏置表。然后,命令变换部14根据这些表把常数存储库内的偏置置换成表生成时分配来的偏置号。这里,常数存储库内的所述偏置指示由预定命令的操作数构成的实例字段。接着链接部15进行这些以外的链接处理。
(3)总结
该程序执行系统1中,基础类定义文件55是单一含义确定的文件,对应终端装置20的轻量基础类文件的结构也相同。静态链接部12使用基础类定义文件55从用户类文件向基础类文件进行链接处理。通过使用指针等,轻量用户类文件的实例字段偏置表,换言之,类设计非依赖字段偏置表中,由于不包括有关类设计依赖字段的信息,所以静态链接部12对于多个不同的终端装置,从同一个用户类的源程序512生成同一个轻量用户类文件542。
1.3字段偏置表
这里,使用图11到图13具体说明轻量基础类文件的类设计非依赖字段偏置表和类设计依赖字段偏置表以及轻量用户类文件的类设计非依赖字段偏置表。
这些字段偏置表由程序生成装置10生成,配备有包括多个字段偏置号和实例字段构成的组的区域。
命令变换部14在把这些字段偏置表变换成getfield命令、putfield命令时使用这些字段偏置表。静态链接部12处理结束时,放弃这些字段偏置表。
与所述的已有程序执行系统相同,假设使构成硬件结构的一部分的两个终端装置A、终端装置B执行从相同的用户类的源程序生成的轻量用户类文件。程序生成装置10在存储部存储如图1到图3所示的Java程序。
(1)对基础类的类设计非依赖字段偏置表
图11分别表示与如图1和图2所示的基础类Built_in_classX和基础类Built_in_classY对应生成的类设计非依赖字段偏置表。
静态链接部12的非依赖表生成部131对于基础类Built_in_classX和基础类Built_in_classY的每一个生成类设计非依赖字段偏置表。
如图11的基础类Built_in_classX的类设计非依赖字段偏置表所示,非依赖表生成部131对于类设计非依赖字段fieldX1、fieldX2按定义顺序分配字段偏置号[2]、[3]。把null存储在非依赖表生成部131在对应于偏置号[1]的确保区域中。实例字段为null的区域表示终端装置生成实例时向对应于类设计依赖字段偏置表的区域存储指针的实例区域。
如图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]的确保区域中。这里对应偏置号[1]确保的区域对应于终端装置的实例生成时存储指向与基础类Built_in_classX相同的类设计依赖字段偏置表的指针的实例领域。对应偏置号[4]确保的区域对应于在终端装置的实例生成时存储指向对应于基础类Built_in_classY上定义的类设计依赖字段的类设计依赖字段偏置表的区域的指针的实例领域。实例字段的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的执行,生成图14和图15所示的实例。
图13表示对应图3所示的用户类User_class生成的类设计非依赖字段偏置表,图14和15分别表示在终端装置A和终端装置B生成的用户类User_class的实例。
静态链接部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]确保的区域中。对应于偏置号[1]、[4]的确保区域中,在终端装置的实例生成时,存储指向对应于和基础类Built_in_classX、Built_in_classY相同的类设计依赖字段偏置表的区域的指针。实例字段的null表示这些。
1.4被生成的实例
终端装置20的实例生成部22生成图14和15所示的实例。
终端装置A的实例生成部22首先在存储器上确保对应于图13所示的类设计非依赖字段偏置表的区域701。后面说明其细节。接着,对应于图12(a)所示的类设计依赖字段偏置表确保区域702、703。之后,在对应于类设计非依赖字段偏置表的区域701中的实例字段null的2个指针区域中分别按顺序存储指向基础类Built_in_classX的类设计依赖字段偏置表对应的区域702的指针和指向基础类Built_in_classY的类设计依赖字段偏置表对应的区域703的指针。实例生成部22就这样生成实例。
同样,终端装置B的实例生成部22首先在存储器上对应于图13所示的类设计非依赖字段偏置表确保区域711,接着,对应于图12(b)所示的类设计依赖字段偏置表确保区域712、713。之后,在对应于类设计非依赖字段偏置表的区域711中的实例字段null的2个指针区域中分别按顺序存储指向基础类Built_in_classX的类设计依赖字段偏置表对应的区域712的指针和指向基础类Built_in_vclassY的类设计依赖字段偏置表对应的区域713的指针。实例生成部22就这样生成实例。
由于终端装置A和终端装置B生成图14和15所示的实例,例如对于终端装置A和终端装置B,同样将用户类User_class的fieldU1作为第8个变量在对应于实例的区域中进行存取。
由于终端装置20用程序执行系统像上述那样生成实例,静态链接部12的命令变换部14变换对应于图16所示的类设计非依赖字段的getfield命令和putfield命令的操作数。
具体说,如图16(a)所示,通常的Java的用户类类文件中,由putfield命令的操作数构成的<User_class.fieldU1>和由getfield命令的操作数构成的<User_class.fieldU2>表示常数存储库内的偏置。命令变换部14根据上述的实例字段偏置表在实例区域中把偏置变换成特定实例字段的偏置号。[new命令]的操作数构成的<User_class>也同样进行预定的号变化。结果,得到图16(b)所示的类文件。如该图所示,把类文件中的putfield命令和getfield命令的操作数变换为[8]和[9]。
命令变换部14还变换对应于接着示出的类设计依赖字段的getfield命令和putfield命令的操作数。
图17表示作为编译后生成基础类文件的基础的Java程序的例子。在图17中,仅表示出字段的定义,省略了有关字段的具体使用的描述。图18对应于图17所示的实例字段,表示所述变换后的getfield命令的操作数。putfield命令的操作数同样如此。
如图17所示,类A把fieldA1、fieldA2、fieldA3定义为类设计非依赖字段,把fieldA4定义为类设计依赖字段。如图18所示,命令变换部14分别把以对应于fieldA1、fieldA2、fieldA3的getfield命令的操作数表示常数存储库内的偏置的<A.fieldA1>、<A.fieldA2>、<A.fieldA3>变换为实例区域中特定实例字段的偏置号[1]、[2]、[3]。另一方面,对于以对应于fieldA4的getfield命令的操作数表示常数存储库内的偏置的<A.fieldA4>,把[getfield<A.fieldA4>]变换为使用前缀dependent的[dependent getfield 11]。这里,getfield命令的第一个操作数表示类设计非依赖字段的偏置号。第二个操作数表示类设计依赖字段的偏置号。
具体说,在如图19(a)所示的终端装置A的基础类Built_in_classY的类文件中,putfield命令的操作数构成的<Built_in_classY.fieldU1>和getfield命令的操作数构成的<Built_in_classY.pivateY1>表示常数存储库内的偏置。命令变换部14根据上述实例字段偏置表在实例区域中把偏置变换为特定实例字段的偏置号。[new命令]的操作数构成的<Built_in_classY>同样进行预定号的变换。结果,得到如图19(b)所示的类文件。
1.5类ID对应表
类ID对应表是对应并存储类名称和类ID的数据表。
类ID(类识别符)对于轻量类文件是识别各个类的号。类ID不允许重复。对于基础类分配从1开始直到7FFF的连续号。对于用户类,分配从8001开始直到FFFF的连续号。
类ID对应表由命令变换部在new命令变换时使用。静态链接部12处理结束时放弃该表。
图20和图21表示类ID对应表的一个例子。图20表示的基础类ID对应表对应并存储基础类的类名称和类ID。图21表示的用户类ID对应表对应并存储用户类的类名称和类ID。
1.6字段计数表
字段计数表中有类设计非依赖字段计数表和类设计依赖字段计数表。
(1)类设计非依赖字段计数表
类设计非依赖字段计数表是对应并存储类ID和非依赖字段计数以及超级类ID的数据表。
类ID如上述说明。
非依赖字段计数表示由对应的类ID识别的类内的非依赖字段的数目。
超级类ID表示由对应的类ID识别的类的超级类的类ID。
图22和图23表示出类设计非依赖字段计数表的一个例子。
图22所示的类设计非依赖字段计数表相对于终端装置A和终端装置B共同的轻量基础类文件。
图23所示的类设计非依赖字段计数表相对于终端装置A和终端装置B共同的轻量用户类文件。
(2)类设计依赖字段计数表
类设计依赖字段计数表是对应并存储类ID、非依赖字段偏置、依赖字段计数和超级类ID的数据表。
类ID如上述说明。
非依赖字段偏置表示由对应的类ID识别的类的非依赖字段的偏置号。
依赖字段计数表示由对应的类ID识别的类内的依赖字段的数目。
超级类ID表示由对应的类ID识别的类的超级类的类ID。
图24(a)、(b)表示出类设计依赖字段计数表的一个例子。
图24(a)的类设计依赖字段计数表相对于终端装置A的轻量基础类文件。
图24(b)的类设计依赖字段计数表相对于终端装置B的轻量基础类文件。
1.7程序执行系统1的动作
通过在程序生成装置10和终端装置20上进行图25到图30的流程图所示的控制来实现程序执行系统1的动作。
(1)基础类文件的链接动作
使用图25到图27所示的流程图说明对基础类文件的链接处理。
静态链接部12读入由使用者指定的基础类文件(步骤S101)、判断在已经读入的类文件中是否使用了还没有读入的类文件,在把还没有读入的类文件用于已经读入的类文件中时(在步骤S102为“是”),读入所述还没有读入的类文件(步骤S103),返回到步骤S102,直到判断出已经读入的类文件中没有使用还没有读入的类文件(在步骤S102为“否”)时,在步骤S103重复读入基础类文件。
判断出没有把还没有读入的类文件用于已经读入的类文件中时(在步骤S102为“否”),偏置表生成部13进行偏置表生成处理(步骤S104a);命令变换部14进行命令变换处理(步骤S110a);链接部15进行其他的链接处理(步骤S112);静态链接部12把轻量基础类文件写入存储部(步骤S113)、把基础类定义文件写入存储部(步骤S114)。
这样,结束对基础类文件的处理,生成轻量基础类文件和基础类定义文件。
(偏置表生成部13的动作)
接着使用图26所示的流程图详细说明步骤S104a的偏置表生成处理。
偏置表生成部13把读入的类中的还没有生成实例字段偏置表的类设置为对象(步骤S104),设置的类的超级类不存在或存在时,判断超级类中是否生成实例字段偏置表。
设置的类的超级类不存在或存在时,判定超级类中生成实例字段偏置表时(步骤105中为“是”),向作为对象的类添加从[1]开始的连续号的类ID(步骤S107a)、把对象类的类名称和类ID添加写入到图20所示的基础类ID对应表(步骤S107b),取出依赖字段的一个指针存储用区域和对象类的非依赖字段,添加到如图11所示的超级类的类设计非依赖字段偏置表,把所述类设计非依赖字段偏置表输出到命令变换部14。这里,对象类的超级类不存在时,从对象类的非依赖字段生成类设计非依赖字段偏置表(步骤S107c)。接着,如图22所示,向非依赖字段计数表添加写入对象类的类ID、非依赖字段计数、超级类ID。这里,以步骤S107c生成的类设计非依赖字段偏置表为基础,包括指针区域和承接下来的非依赖字段数,数出非依赖字段的数目,计算出非依赖字段计数(步骤S107d)。
接着,偏置表生成部13仅取出对象类的依赖字段,生成如图12所示的类设计依赖字段偏置表,把生成的类设计依赖字段偏置表输出到命令变换部14(步骤S108a),向图24所示的依赖字段计数表添加写入对象类的类ID、非依赖字段偏置、依赖字段计数、超级类ID。这里,以所述生成的类设计依赖字段偏置表为基础,通过仅数出对象类的依赖字段的数目来计算出依赖字段计数。对象类没有超级类时,写入[0]作为超级类ID(步骤S108b)。
接着,偏置表生成部13判断是否存在没有生成实例字段偏置表的类,存在时(步骤S109为“是”),返回步骤S104反复处理。不存在时(步骤S109为“否”),偏置表生成部13结束处理。
设置的类不存在超级类或存在超级类时,在没有判定出超级类上生成实例字段偏置表时(步骤105中为“否”),偏置表生成部13把超级类作为对象(步骤S106),接着返回步骤S105。
(命令变换部14的动作)
接着,使用图27所示的流程图详细说明步骤S110a的命令变换。
命令变换部14判断是否有未变换的getfield命令的操作数、putfiield命令的操作数,有未变换的操作数(步骤S110为“是”)时,接着判断是否是对依赖字段的访问命令,是对依赖字段的访问命令时(步骤S111a为“是”),添加dependent限定命令,参考对象类的依赖字段计数表对第一操作数设置非依赖字段偏置,参考对象类的依赖字段偏置表对第二操作数设置依赖字段偏置,这样进行命令变换(步骤S111c),返回步骤S110。
不是对依赖字段的访问命令(步骤S111a为“否”)时,参考对象类的非依赖字段偏置表对第一操作数设置非依赖字段偏置,这样进行命令变换(步骤S111b),返回步骤S110。
没有未变换的操作数(步骤S110为“否”)时,判断是否有未处理的new命令,有这种命令时(步骤S111d为“是”),参考类ID表进行把类名称变换为类ID的命令变换(步骤S111e),返回步骤S111d。
判断为没有未处理的new命令时(步骤S111d为“否”),写入非依赖字段计数表和依赖字段计数表(步骤S111f),命令变换部14的处理结束。
(2)与用户类文件的链接动作
使用图28到图30所示的流程图说明对用户类文件的链接处理。
静态链接部12读入由使用者指定的用户类文件(步骤S201)、读入基础类定义文件(步骤S202),判断在已经读入的类文件中是否使用了还没有读入的类文件,在把还没有读入的类文件用于已经读入的类文件中时(在步骤S203为“是”),读入所述还没有读入的类文件(步骤S204),返回到步骤S203,直到判断出已经读入的类文件中没有使用还没有读入的类文件(在步骤S203为“否”)时,在步骤S204重复读入用户类文件。
在判断出没有把还没有读入的类文件用于已经读入的类文件中时(在步骤S203为“否”),偏置表生成部13进行偏置表生成处理(步骤S205a);命令变换部14进行命令变换处理(步骤S210a);链接部15进行其他的链接处理(步骤S212);静态链接部12把轻量用户类文件写入存储部(步骤S213)。
这样,结束对用户类文件的处理,生成轻量用户类文件和基础类定义文件。
(偏置表生成部13的动作)
接着使用图29所示的流程图详细说明步骤S205a的偏置表生成处理。
偏置表生成部13把读入的类中的还没有生成实例字段偏置表的类设置为对象(步骤S205),接着判断对象类的超级类是否为基础类,判断为基础类时(步骤S206a为“是”)时,从基础类定义文件生成对象类的超级类的非依赖字段偏置表(步骤S206b),接着把控制移动到步骤S208a。
判断出不是基础类(步骤S206a为“否”)时,判断对象类的超级类上是否生成实例字段偏置表,判定出生成该表时(步骤S206c中为“是”),接着把控制移动到步骤S208a。
判断出没有生成该表(步骤S206c中为“否”)时,以超级类作为对象(步骤S207),接着返回到步骤S206a。
偏置表生成部13向成为对象的类添加从[8001]开始的连续号的类ID(步骤S208a),向图21所示的用户类ID对照表添加写入对象类的类名称和类ID(步骤S208b),取出对象类的非依赖字段,向图13所示的超级类的类设计非依赖字段偏置表添加,把所述类设计非依赖字段偏置表输出到命令变换部14(步骤S208c)。接着,如图23所示,向非依赖字段计数表添加写入对象类的类ID、非依赖字段计数、超级类ID。这里以在步骤S208c生成的类设计非依赖字段偏置表为基础,包括承接来的非依赖字段数,数出对象类的非依赖字段数目,算出非依赖字段计数(步骤S208d)。
接着,偏置表生成部13判断是否存在没有生成实例字段偏置表的类,存在时(步骤S209为“是”),返回步骤S205,重复处理。不存在时(步骤S209为“否”),偏置表生成部13结束处理。
(命令变换部14的动作)
接着,使用图30所示的流程图详细说明步骤S210a的命令变换。
命令变换部14判断是否有未变换的getfield命令的操作数、putfield命令的操作数,有未变换的操作数(步骤S210为“是”)时,接着参考对象类的非依赖字段偏置表对第一操作数设置非依赖字段偏置,这样进行命令变换(步骤S211a),返回步骤S210。
没有未变换的操作数(步骤S210为“否”)时,判断是否有未处理的new命令,有这种命令时(步骤S211b为“是”),参考类ID表进行把类名称变换为类ID的命令变换(步骤S211e),返回步骤S211b。
判断为没有未处理的new命令时(步骤S211c为“否”),写入非依赖字段计数表(步骤S211d),命令变换部14的处理结束。
(总结)
对作为所述对象设置的类生成图13所示的类涉及非依赖字段偏置表时,全部类的类涉及非依赖字段一致,同一类的类设计非依赖字段连接,并且确保存储生成实例时指向类设计依赖字段偏置表的指针的区域,分配偏置号。尤其,对从超级类承接来的实例字段分配与对超级类的实例字段分配的偏置号相同的偏置号。
程序执行系统1在不同的表中管理从基础类承接来的类设计依赖字段和从基础类承接来的新定义的类设计非依赖字段,在对静态链接部12的用户类文件的链接处理中,偏置表生成部13考虑类设计依赖字段偏置表,在类设计非依赖字段偏置表中确保固定长度的区域,该区域用于指向实例生成时存储的类设计依赖字段偏置表所对应的区域的指针。
由于类设计非依赖字段偏置表中这个固定长度的指针区域不因终端装置的种类不同而不同,生成的类设计非依赖字段偏置表不依赖于终端种类。轻量用户类文件生成时,仅生成类设计非依赖字段偏置表,不使用依赖表生成部132。
与对这些用户类文件的链接处理相反,在对基础类文件的链接处理中,即,不读入基础类定义文件,仅读入基础类文件,对非依赖表生成部131生成图11所示的类设计非依赖字段偏置表、生成图12所示的对应于终端装置种类而不同的类设计依赖字段偏置表来进行链接处理,输出轻量基础类文件和基础类定义文件。
(3)终端装置20的命令执行处理动作
使用图31和图32所示的流程图说明终端装置(轻便虚拟机器)20的命令执行处理。
命令执行部21把终端装置20指定的轻量用户类文件读入存储器内(步骤S331)。接着,命令执行部21一个一个地顺序选择存储器内的轻量用户类文件内的命令,全部命令选择结束时(步骤S300为“是”),处理结束。
命令选择没有结束时(步骤S300为“否”),命令执行部21从在最前面开始一个一个地顺序选择轻量用户类文件内的命令(步骤S301)。
(putfield命令(或getfield命令)的处理)
命令执行部21判断选择的命令是否为putfield命令(或getfield命令)。选择的命令是putfield命令(或getfield命令)时(在步骤S302为“是”),命令执行部21判断判断是否向选择的命令添加dependent。
判断为添加时(步骤S314为“是”),通过把作为选择的命令的第一操作数的非依赖字段偏置加到栈中堆积的实例的地址,命令执行部21得到存储指向依赖字段区域的指针的区域Y(步骤S315);接着,通过把作为选择的命令的第二操作数的依赖字段偏置加到区域Y中存储的指针指示的地址,得到成为putfield命令(或getfield命令)的区域X(步骤S316)。
判断为不添加时(步骤S314为“否”),通过把作为选择的命令的第一操作数的非依赖字段偏置加到栈中堆积的实例的地址,命令执行部21得到成为putfield命令(或getfield命令)的对象的区域X(步骤S313)。
接着,命令执行部21对区域X执行putfield命令(或getfield命令)的处理,返回步骤S301,重复处理。
(new命令的处理)
命令执行部21判断选择的命令是否为new命令。选择的命令是new命令时(步骤S303为“是”),实例生成部22选择由new命令的操作数传送的ID表示的成为new命令的对象的类,作为对象类(步骤S304)。接着,实例生成部22从轻量用户类文件读出类设计非依赖字段计数表,在存储器上确保对象类的非依赖字段计数部分的区域X(步骤S305)。
实例生成部22根据类ID是否为7FFF以下判断作为区域确保的对象的类是否是基础类。若作为对象的类不是基础类(步骤S306为“否”),实例生成部22从轻量用户类文件的非依赖文件计数表得到超级类,把得到的超级类作为对象(步骤S307),然后返回步骤S306,重复处理。
若作为对象的类是基础类(步骤S306为“是”),实例生成部22从轻量基础类文件读出类设计依赖字段计数表,确保对象类的依赖字段计数部分的区域Y(步骤S308a),接着,在区域X的非依赖字段偏置号中存储指向区域Y的指针(步骤S308b)。
然后,实例生成部22根据依赖字段计数表的超级类ID是否为0判断对象类的超级类是否存在。作为对象的类的超级类存在时(步骤S309为“是”),实例生成部22从轻量基础类字段的依赖字段计数表得到超级类,把得到的超级类作为对象(步骤S311),返回步骤S308a,重复处理。
作为对象的类的超级类不存在时(步骤S309为“否”),实例生成部22在栈上堆积指向区域X的指针(步骤S310),接着返回步骤S301,重复处理。
(其他命令的处理)
在选择的命令不是new命令时(步骤S303为“否”),实例执行部21执行与原来的虚拟机器相同的命令(S312),接着返回步骤S301,重复处理。
(总结)
程序执行系统1在不同的表中管理从基础类承接来的类设计依赖字段和从基础类承接来的新定义的类设计非依赖字段。用户类文件承接使用类涉及依赖字段的基础类文件时,命令执行处理中,实例生成部22分别确保对于类设计非依赖字段偏置表和类设计依赖字段偏置表的区域,在对应于类设计非依赖字段偏置表的区域中的指针区域存储指向对应于类设计依赖字段偏置表的区域的指针。
由于类设计非依赖字段偏置表中用于该指针的区域不会因终端装置的种类不同而不同,类设计非依赖字段的实例字段偏置号不依赖于终端的种类。这样,可以在不同种类的终端装置之间通过相同的实例字段偏置号访问相同的类设计非依赖字段。如上所述,包括生成的计数表的轻量用户类文件不依赖于终端装置的种类,可在不同的种类的多个终端装置上执行同一轻量用户类文件。
虽然假定不论字段类型如何,程序执行系统1的终端装置20的实例生成部22都确保实例区域有一定长度,但是实例区域可对应于字段类型而确保不同的长度。
1.8具体例
说明程序执行系统1使用的Java程序和生成的实例的具体例。
(1)具体例1
图33表示成为生成编译后的类文件的基础的Java程序的一个例子。图34表示在程序执行系统1中对应于图33所示的Java程序生成的实例。
在图33所示的Java程序中,以类A把int类型的fieldA1、short类型的fieldA2、byte类型的fieldA3定义为实例字段。
程序执行系统1假定这些实例字段生成如图34(a)所示的实例。这里,无论字段类型如何,都确保对应于fieldA1、fieldA2、fieldA3的区域有预定的长度。
与此相反,在同样的程序执行系统中可假定生成如图34(b)所示的实例。这里,因字段类型不同,使得对应于fieldA1、fieldA2、fieldA3的区域有不同的长度,对各个字段分配用来特定实例区域的位置的偏置号。
假定程序执行系统1包括在轻量类文件中含有字段计数值的字段表,并把该表传输到终端装置一侧,在执行getfield命令和putfield命令时以这些表为参考,但是,也可以在轻量类文件中不包括这样的实例字段偏置表,使用包括操作数类型的信息的getfield命令(和putfield命令)。
(2)具体例2
图35表示成为生成编译后的类文件的基础的Java程序的一个例子。图36(a)表示对应于图35所示的Java程序生成的变换后getfield命令的操作数。putfield命令的操作数同样如此。
这里,设定为根据终端装置的new命令生成实例,仅把表示实例区域整体的大小的信息从程序生成装置传输到终端装置。特别是,与实例字段相对的实例区域因字段类型不同而确保有不同长度,但是也可以是无论字段类型如何都确保与实例字段相对的实例区域有一定的长度。
如图35所示,以类A把byte类型的fieldA1、short类型的fieldA2定义为实例字段,以类B把int类型的fieldB3定义为实例字段。这里,对应于操作数的类型是否为1字节(byte型)、2字节(short型)、4字节(int型、参考型)中的任何一个,把类文件中的getfield命令的操作数变换为getfield_b命令、getfield_s命令、getfield命令。
实际,如图36(a)所示,对类A的fieldA1、fieldA2分配偏置号[1]、[3],对应字段类型使用getfield_b命令、getfield_s命令。
如图36(b)所示,对类B从类A承接来的fieldA1、fieldA2分配与类A同样的偏置号[1]、[3],对新定义的fieldB1分配偏置号[5],对应于字段类型,分别使用getfield_b命令、getfield_s命令和getfield命令。
1.9总结
如上所述,程序执行系统1不依赖于终端装置的种类执行同一轻量用户类文件,通过在种类不同的多个终端装置执行程序,增大了轻量基础类库的功能,可进行所希望的动作,因此,不必要对照符合终端装置的轻量基础类库部分生成不同的用户类文件。
使用轻量类文件的程序执行系统1可以说适合应用于内部机器等的处理能力低的终端装置,把上述相同轻量用户类文件用于多个终端装置据说可减轻程序开发者的处理负担。
程序执行系统1分别在每个基础类文件上汇总类设计依赖字段,在每个基础类文件上构成类设计依赖字段偏置表,在承接来的基础类文件的每一个上区分类设计非依赖字段偏置表,把指向对应于类设计依赖字段偏置表的区域的指针配置在对应于类设计非依赖字段偏置表中的各个基础类文件的区分后的区域的最前面,但是也可以把指向对应于类设计依赖字段偏置表的区域的指针配置在对应于类设计非依赖字段偏置表中的各个基础类文件的区分后的区域的最后。
程序执行系统1假定类属于用户类和基础类的任何一个,但是可以是例如,假定信息服务类的用户类、基础类以外的中间类,由3级结构构成类,用户类不可使用信息服务类、基础类中的类设计依赖字段,而且信息服务类不能使用基础类中的类设计依赖字段。
程序执行系统1通过限定语private定义类设计依赖字段,但是可使用与此不同的关键字装备类设计依赖字段。
程序执行系统1对每一个基础类文件构成类设计依赖字段偏置表,但是程序执行系统2可以把承接来的全部基础类文件的类设计依赖字段在一个类设计依赖字段偏置表中记述。程序执行系统3可以预先假定使用的实例字段的个数的最大值,在类设计非依赖表中确保用于它们的区域。对于程序执行系统2和3,作为第二和第三实施例,在下面进行描述。
2.第二实施例
说明作为本发明第二实施例的程序执行系统2。
程序执行系统2与程序执行系统1相比,主要不同在于类设计非依赖字段偏置表和类设计依赖字段偏置表的结构以及它们的动作。除此之外的结构、动作与程序执行系统1一致。
下面的说明中,与原来的程序执行系统一样,编译并使用图1到图3所示的Java程序。
2.1程序执行系统2的结构
(a)对应于基础类生成的字段偏置表
对于程序执行系统2,图37表示对应于基础类生成的类设计非依赖字段偏置表。图38(a)和(b)表示对应于基础类生成的类设计非依赖字段偏置表。
如图37的基础类Built_in_classX的类设计非依赖字段偏置表所示,对类设计非依赖字段fieldX1、fieldX2按定义顺序分配偏置号[2]、[3]。
由此,对于基础类文件中的getfield命令、putfield命令,把指示常数存储库中的fieldX1、fieldX2的操作数在轻量基础类文件中在终端装置的实例生成时分别置换为表示从实例区域中最前面开始的偏置号[2]、[3]。
在对应于图37的基础类Built_in_classX的类设计非依赖字段偏置表中的偏置号[1]而确保的实例区域中,在终端装置的实例生成时存储指向类设计依赖字段偏置表所对应的区域的指针。这用所述类设计非依赖字段偏置表中的实例字段的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命令,把指示常数存储库中的fieldX1、fieldX2、fieldY1、fieldY2、fieldY3的操作数在终端装置的实例生成时分别置换为表示从实例区域的最前面开始的偏置的[2]、[3]、[4]、[5]、[6]。
在对应于基础类Built_in_classY的类设计非依赖字段偏置表中的偏置号[1]而确保的实例区域中,在终端装置的实例生成时存储指向类设计依赖字段偏置表所对应的区域的指针。这用所述类设计非依赖字段偏置表中的实例字段的零值表示。
与图11所示的基础类Built_in_classY的类设计依赖字段偏置表不同,图37所示的基础类Built_in_classY的类设计依赖字段偏置表中,指向类设计依赖字段偏置表所对应的区域的指针所在区域仅是对应于基础类Built_in_classX、基础类Built_in_classY的区域。在类设计依赖字段偏置表这两个基础类包括的类设计依赖字段和偏置号的对应添加也连续记录下来。
这些类设计非依赖字段偏置表对于终端装置A、终端装置B相同,但是使用的类设计非依赖字段在终端装置A、终端装置B中却不同。因此,类设计依赖字段偏置表在终端装置A、终端装置B中不同。
具体说,对于终端装置A,如图38(a)所示,对每个基础类都生成类设计依赖字段偏置表。对于终端装置B,如图38(b)所示,对每个基础类都生成类设计依赖字段偏置表。与图11所示的类设计依赖字段偏置表不同,基础类Built_in_classY的类设计依赖字段偏置表包括基础类Built_in_classX的类设计依赖字段偏置表的内容。
(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]而确保的实例区域中存储与基础类Built_in_classY相同的指向类设计依赖字段偏置表所对应的区域的指针。
如图40(a)所示,终端装置A确保图39所示的用户类User_class的类设计非依赖字段偏置表所对的区域721,接着确保图38(a)所示的Built_in_classY的类设计依赖字段偏置表所对的区域722。之后,在类设计非依赖字段偏置表所对的区域721中的实例字段的null对应的指针区域中存储指向基础类Built_in_classY的类设计依赖字段偏置表所对的区域722的指针。这样,对终端装置A生成实例。
如图40(b)所示,对终端装置B也同样,顺序确保图39所示的用户类User_class的类设计非依赖字段偏置表所对的区域731和确保图38(b)所示的类设计依赖字段偏置表所对的区域732。接着,在区域731中的实例字段的null对应的指针区域中存储指向基础类Built_in_classY的类设计依赖字段偏置表所对的区域732的指针。这样,对终端装置B生成实例。
(c)字段计数表
说明程序执行系统中使用的字段计数表。
(基础类的类设计非依赖字段计数表)
图41表示终端装置A和终端装置B的轻量基础类文件内的类设计非依赖字段计数表的一个例子。
这个类设计非依赖字段计数表由类ID、非依赖字段计数和超级类ID的组构成。由于类ID、非依赖字段计数和超级类ID与前面所述相同,省略了对它们的说明。
(基础类的类设计依赖字段计数表)
图42(a)和(b)分别表示终端装置A和终端装置B的轻量基础类文件内的类设计依赖字段计数表的一个例子。
这些类设计依赖字段计数表分别由类ID和依赖字段计数的组构成。由于类ID和依赖字段计数与前面所述相同,省略了对它们的说明。
(用户类的类设计非依赖字段计数表)
图43表示终端装置A和终端装置B的轻量用户类文件内的类设计非依赖字段计数表的一个例子。
这个类设计依赖字段计数表分别由类ID、非依赖字段计数和超级类ID的组构成。由于类ID、非依赖字段计数和超级类ID与前面所述相同,省略了对它们的说明。
(d)命令变换的一个例子
下面表示出命令变换的一个例子。
对于图44(a)所示的终端装置A的基础类Built_in_classY的类文件,成为putfield命令的操作数的<Built_in_classY.fieldY1>和成为putfield命令的操作数的<Built_in_classY.privateY1>表示常数存储库内的偏置。程序执行系统2的命令变换部根据上述的实例字段偏置表在实例区域中把偏置变换为特定实例字段的偏置号。成为[new命令]的操作数的<Built_in_classY>也同样进行预定的号的变换。结果,得到图44(b)所示的类文件。如该图所示,把类文件中的putfield命令的操作数<Built_in_classY.fieldY1>变换为[4]。把成为putfield命令的操作数的<Built_in_classY.privateY1>变换为[4],向putfield命令添加[dependent]。
如图45(a)所示,对于通常的Java用户类的类文件,成为putfield命令的操作数的<User_class.fieldU1>表示常数存储库内的偏置。程序执行系统2的命令变换部根据上述的实例字段偏置表在实例区域中把偏置变换为特定实例字段的偏置号。成为[new命令]的操作数的<User_classY>也同样进行预定的号的变换。结果,得到图45(b)所示的类文件。如该图所示,把类文件中的putfield命令的操作数变换为[7]。
2.2程序执行系统2的动作
说明程序执行系统2的动作。由于程序执行系统2的动作与程序执行系统1的动作相同,仅就与程序执行系统1的动作的不同点作说明。
(1)对基础类文件链接的动作
说明对基础类文件链接的处理顺序。
(偏置表生成部13的动作)
使用图46所示的流程图详细说明程序执行系统2的偏置表生成部13在步骤S104a的偏置表生成处理。
在图46中,由于付加与图26的流程图相同的符号的步骤与图26的步骤相同,省略了对它们的说明。
在步骤S107b之后,偏置表生成部13取出对象类的非依赖字段,追加到图37所示的超级类的类设计非依赖字段偏置表,把所述类设计非依赖字段偏置表输出到命令变换部14。这里,对象类的超级类不存在时,从对象类的非依赖字段生成类设计非依赖字段偏置表,向依赖字段的指针区域的最前面追加1(步骤S401)。接着,如图41所示,向非依赖字段计数表追加写入对象类的类ID、非依赖字段计数、超级类ID。这里,以步骤S401生成的类设计非依赖字段偏置表为基础,包括最前面的指针区域和承接来的非依赖字段数,数出非依赖字段的数目,计算出非依赖字段计数(步骤S402)。
接着,偏置表生成部13仅取出对象类的依赖字段,生成如图38所示的类设计依赖字段偏置表,把生成的类设计依赖字段偏置表输出到命令变换部14(步骤S403),向图42所示的依赖字段计数表追加写入对象类的ID、依赖字段计数。这里,以所述生成的类设计依赖字段偏置表为基础,包括承接来的依赖字段数,数出对象类的依赖字段的数目,由此计算出非依赖字段计数(步骤S4042)。接着,把控制移动到步骤S109。
(命令变换部14的动作)
使用图47所示的流程图详细说明程序执行系统2的命令变换部14在步骤S110a的命令变换。
在图47中,由于付加与图27的流程图相同的符号的步骤与图27的步骤相同,省略了对它们的说明。
在步骤S111a之后,在步骤S411命令变换部14添加dependent限定命令,参考对象类的依赖字段计数表,对第一操作数设定非依赖字段偏置,从而进行命令变换。这里,把如图44(a)所示的[putfield<Built_in_classY.privateY1>]变换为图44(b)所示的[dependent putfield 4]。
在步骤S111e,命令变换部14参考类ID表进行把类名称改变为类ID的命令变换。这里,把如图44(a)所示的[new<Built_in_classY>]变换为图44(b)所示的[new4]。
(2)与用户类文件的链接动作
说明与用户类文件的链接处理的顺序。
(偏置表生成部13的动作)
使用图48所示的流程图详细说明程序执行系统2的偏置表生成部13在步骤S205a进行的偏置表生成处理。
在图48中,由于付加与图29的流程图相同的符号的步骤与图29的步骤相同,省略了对它们的说明。
在步骤S208b之后,在步骤S421偏置表生成部13生成图39所示的类设计非依赖字段偏置表,传递到命令变换部14。
接着,在步骤S422,向图43所示的非依赖字段计数表追加写入对象类的类ID、非依赖字段计数、超级类ID。
接着,把控制移动到步骤S209。
(命令变换部14的动作)
使用图49所示的流程图详细说明程序执行系统2的命令变换部14在步骤S210a进行的命令变换。
在图49中,由于付加与图29的流程图相同的符号的步骤与图29的步骤相同,省略了对它们的说明。
在步骤S210之后,在步骤S431命令变换部14参考对象类的非依赖字段偏置表,对第一操作数设定非依赖字段偏置,从而进行命令变换。这里,把如图45(a)所示的[putfield<User_class.fieldU1>]变换为图45(b)所示的[putfield 7]。接着,返回步骤S210,重复处理。
在步骤S211b之后,在步骤S432命令变换部14参考类ID对照表进行把类名称改变为类ID的命令变换。这里,把如图45(a)所示的[new<User_class>]变换为图45(b)所示的[new 8001]。接着,返回步骤S211b,重复处理。
(3)终端装置20的命令执行处理动作
使用图50和图51所示的流程图说明终端装置(轻便虚拟机器)20的命令执行处理顺序。
由于在图50中付加与图31的流程图相同的符号的步骤与图31的步骤相同、在图51中付加与图32的流程图相同的符号的步骤与图32的步骤相同,省略了对它们的说明。
在步骤S304之后,在步骤S441实例生成部22从轻量用户类文件读出类设计非依赖字段计数表,在存储器上确保对象类的非依赖字段计数部分的区域X。图40(a)的号码721表示存储器上确保的区域X的一个例子。接着把控制移动到步骤S306。
在步骤S306之后,在步骤S442实例生成部22从轻量基础类文件读出类设计依赖字段计数表,确保对象类的字段计数部分的区域Y。接着在步骤S442,实例生成部22在区域X的第一位置上存储指向区域Y的指针。区域X和区域y的关系如图40(a)所示。
在步骤S210之后,在步骤S444,命令执行部21通过把偏置1加到栈上堆积的实例地址,得到存储指向依赖字段区域的指针的区域Y,接着,在步骤S445,命令执行部21把作为选择的命令的第一操作数的依赖字段偏置加到在区域Y中存储的指针所指示的地址,从而得到成为putfield命令(或getfield命令)的对象的区域X。
接着把控制移动到步骤S317。
2.3总结
由于终端装置A和终端装置B生成图40(a)和(b)所示的实例,例如,用户类User_class的fieldU1对于终端装置A和终端装置B相同,作为实例区域的第7变量来存取。
通过上述说明,程序执行系统2与程序执行系统1一样适合应用于内部机器等的处理能力低的终端装置。由于对多个终端装置使用相同轻量用户类文件,可减轻程序开发者的处理负担。
程序执行系统2从最前面向最后面变更类涉及非依赖表中指针区域的位置等,可进行与程序执行系统1相同的变形。
3.第三实施例
说明作为本发明第三实施例的程序执行系统3。
程序执行系统3与程序执行系统1相比,主要不同在于类设计非依赖字段偏置表和类设计依赖字段偏置表的结构以及它们的动作。除此之外的结构、操作与程序执行系统1一致。
下面的说明中,与原来的程序执行系统一样,编译并使用图1到图3所示的Java程序。
对于程序执行系统3,图52表示对应于基础类生成的类设计非依赖字段偏置表。图53表示对应于基础类生成的实例字段偏置表。
程序执行系统3预先确定用于基础类文件的类设计依赖字段的最大数目,基础类文件的设计者把基础类文件设计成使得类设计依赖字段不超过所述最大数目。在基础类定义文件中不包括固定长度的类设计依赖字段的最大数目以外的信息,这里作为例子把类设计依赖字段的最大数目设置为5。
程序执行系统3对于每一类计算出表示在该类上包括的类设计非依赖字段数目的非依赖字段计数。接着,把计算出的非依赖字段计数、作为固定值的依赖字段计数和承接来的类的字段计数相加,计算出计数,生成包含该计算出的计数的计数表,把生成的计数表追加写入到轻量类文件中。
程序执行系统3与程序执行系统1和程序执行系统2不同,不新生成基础类的类设计依赖字段计数表,通过向类设计非依赖字段偏置不添加与类设计依赖字段相关的信息而生成实例字段偏置表、生成计数表,把包括计数表的轻量类文件从程序生成装置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]用于类设计依赖字段。
通过向上述说明的类设计非依赖字段偏置表添加与类设计依赖字段相关的信息生成图53(a)、(b)分别表示的终端装置A、终端装置B的实例字段偏置表。
图54表示对应于图3所示的用户类User_class生成的实例字段偏置表,图55(a)和(b)表示终端装置A、终端装置B上生成的用户类User_class的实例。
由于预先执行终端装置上使用的类设计依赖字段的最大数目,如图54所示,用户类User_class的实例字段偏置表对于终端装置A、终端装置B并没有不同,包括这些实例字段偏置表的轻量用户类文件对于终端装置A、终端装置B也相同。
实际上,终端装置A、终端装置B根据这些基础类和用户类的实例字段偏置表(这里实例字段偏置表表示实例字段类型与偏置号的对应)分别生成图55(a)、(b)所示的实例。具体说,终端装置A、终端装置B生成预定长度的实例。图55(a)、(b)的实例包括17个实例字段。终端装置A、终端装置B对于所述实例确保各个依赖实例字段。终端装置A、终端装置B从轻量类文件读出对每一类计算的计数,对于所述实例,对每一类确保与所述读出的计数相当的数目的实例。这里,例如,终端装置A和终端装置B同样对于所述实例确保User_class的fieldU1和fieldU2。对于终端装置A和终端装置B同样把User_class的fieldU1作为16个变量来存取。
通过上述说明,程序执行系统3与程序执行系统1一样适合应用于内部机器等的处理能力低的终端装置,由于对多个终端装置使用相同轻量用户类文件,可减轻程序开发者的处理负担。另外,由于终端装置可原样使用原来使用的类文件,可引入程序执行系统,该系统更进一步减轻了程序开发者一侧的处理负担。
程序执行系统3把基础类定义文件作为仅包括类设计依赖字段的最大数目的信息的文件,但是也可以将其构成为包括与其它的实例字段的定义相关的信息。
4.其它变形例
根据上述实施例说明了本发明,但是本发明并不限定于上述实施例。下面的情况也包括在本发明中。
(1)本发明可作为上面所述的方法。也可作为计算机来实现这些方法的计算机程序,作为由所述计算机程序构成的数字信号。
本发明可以作为计算机可读取记录媒体,其上记录所述计算机程序或所述数字信号,这些媒体例如是软盘、硬盘、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM.半导体存储器等。或者可以作为这些记录媒体上记录的所述计算机程序或所述数字信号。
本发明可以经以电通信电缆、无线或有线电缆、互联网为代表的网络等传输所述计算机程序或所述数字信号。
本发明作为配置微处理器和存储器的计算机系统,所述存储器存储所述计算机程序,所述微处理器按照所述计算机程序动作。
通过在所述记录媒体上记录所述计算机程序或所述数字信号并传送它,或通过经所述网络等传送所述计算机程序或所述数字信号,也可由独立的另外的计算机系统来实施本发明。
(2)也可以分别组合上述实施例和上述变形例。
尽管通过举例方式参考附图充分描述了本发明,应注意对于熟悉本领域的技术人员而言可进行各种改变和修改。因此,除非这种改变和修改背离了本发明的范围,否则应认为它们都被包括在本发明之中。
Claims (13)
1.一种程序生成装置,对每个终端装置定义不同的依赖变量并对每个终端装置定义共同的非依赖变量,把具有承接关系的多个类定义的多个类文件链接到每个终端装置而分别生成轻量类文件,包括:
存储装置,存储具有承接关系的多个类分别定义的多个类文件、在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名;
号生成装置,在链接一个终端装置时,生成包含所述各个类文件中包含的非依赖变量的非依赖偏置表,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,并使用所生成的偏置表对所述存储装置内存储的各个类文件定义的每个变量生成偏置号;
轻量类文件生成装置,对所述存储装置中存储的各个类文件,对每个变量把相应的变量名置换为所述号生成装置生成的偏置号,生成轻量类文件。
2.根据权利要求1的程序生成装置,所述号生成装置对于依赖变量根据由连续的号构成的号体系对每个变量生成偏置号,对于非依赖变量根据由连续的号构成的、与上述号体系不同的号体系对每个变量生成偏置号。
3.根据权利要求2的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示该类中包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件中。
4.根据权利要求2的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
关于所述第二类,所述号生成装置对于仅在第二类中被定义的依赖变量,根据由连续的号构成的号体系对每个变量生成偏置号,对于从第一类承接的依赖变量,根据由连续的号构成的、与上述号体系不同的号体系对每个变量生成偏置号。
5.根据权利要求4的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示该类中包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件中。
6.根据权利要求2的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
关于所述第二类,所述号生成装置对于仅在第二类中被定义的依赖变量和从第一类承接的依赖变量,根据由连续的号构成的一种号体系对每个变量生成偏置号。
7.根据权利要求6的程序生成装置,所述轻量类文件生成装置还对每一类计算分别表示该类中包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数,把计算出的非依赖变量计数和依赖变量计数追加到轻量类文件中。
8.根据权利要求1的程序生成装置,所述多个类包括第一类和承接所述第一类的第二类,
所述号生成装置对于全部依赖变量和非依赖变量根据由连续的号构成的一种号体系生成偏置号,这里,关于所述第二类,对于仅在第二类中被定义的变量和从第一类承接的变量隔开一定间隔对每个变量生成偏置号。
9.根据权利要求8的程序生成装置,所述轻量类文件生成装置还对每一类计算表示该类中包括的非依赖变量的数目的非依赖变量计数,把计算出的非依赖变量计数和作为固定值的依赖变量计数相加得到的计数追加到轻量类文件中。
10.一种按照程序生成装置生成的轻量类文件动作的计算机装置,包括:
存储装置,存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,在各个类文件中分别定义具有承接关系的多个类,在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名;
实例生成装置,读出所述轻量类文件,根据读出的轻量类文件内的每一个变量的偏置号生成实例;
执行装置,使用生成的实例执行轻量类文件内定义的命令。
11.一种按照程序生成装置生成的轻量类文件动作的计算机装置,包括:
存储装置,存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,所述轻量类文件还包括对每一类分别表示相应类上包括的非依赖变量的数目和依赖变量的数目的非依赖变量计数和依赖变量计数;
实例生成装置,读出所述轻量类文件,根据对读出的所述轻量类文件包括的每一类计算出的非依赖变量计数和依赖变量计数,在存储器上分别分配第一区域和第二区域,把指向所述第一区域的指针存储在所述第二区域中,从而生成实例;
执行装置,使用生成的实例执行轻量类文件内定义的命令。
12.一种用于程序生成装置中的程序生成方法,对每个终端装置定义不同的依赖变量并对每个终端装置定义共同的非依赖变量,把具有承接关系的多个类定义的多个类文件链接到每个终端装置而分别生成轻量类文件,所述程序生成装置存储多个类文件,该多个类文件在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名并分别定义具有承接关系的多个所述类,所述程序生成方法的特征在于包括以下步骤:
号生成步骤,在链接一个终端装置时,生成包含所述各个类文件中包含的非依赖变量的非依赖偏置表,以便对于其它终端装置中分配相同变量名的非依赖变量成为相同的号,并使用所生成的偏置表对所述存储装置中存储的各个类文件定义的每个变量生成偏置号;
轻量类文件生成步骤,对所述存储装置中存储的各个类文件,对每个变量把该变量名置换为所述号生成装置生成的偏置号,生成轻量类文件。
13.一种由计算机装置使用的计算机处理方法,所述计算机装置在各个类文件中分别定义具有承接关系的多个类,在各个类中定义由变量名分别识别的依赖变量和非依赖变量,各个类文件包括各个变量名,所述计算机装置存储轻量类文件,所述轻量类文件是各个类文件中所包含的各变量名被偏置号置换而生成,以便对于其它终端装置中被分配了相同变量名的非依赖变量成为相同的号,所述计算机处理方法的特征在于包括以下步骤:
实例生成步骤,读出所述轻量类文件,根据读出的轻量类文件内的每一个变量的偏置号生成实例;
执行步骤,使用生成的实例执行轻量类文件内定义的命令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP43499/2000 | 2000-02-21 | ||
JP43499/00 | 2000-02-21 | ||
JP2000043499 | 2000-02-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1312502A CN1312502A (zh) | 2001-09-12 |
CN1251075C true CN1251075C (zh) | 2006-04-12 |
Family
ID=18566407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB011168846A Expired - Fee Related CN1251075C (zh) | 2000-02-21 | 2001-02-21 | 程序生成装置及其方法、计算机装置及其处理方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7024657B2 (zh) |
EP (1) | EP1128263B1 (zh) |
CN (1) | CN1251075C (zh) |
DE (1) | DE60142136D1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2229623A4 (en) * | 2008-01-11 | 2014-02-19 | Mathworks Inc | ENUMERATION CATEGORIES |
US9690709B2 (en) * | 2014-07-14 | 2017-06-27 | Oracle International Corporation | Variable handles |
WO2017009895A1 (ja) * | 2015-07-10 | 2017-01-19 | 三菱電機株式会社 | プログラム生成装置及びその方法 |
US10001979B2 (en) * | 2015-11-25 | 2018-06-19 | International Business Machines Corporation | Avoiding guard test invalidation for virtual and interface calls |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5421016A (en) * | 1991-12-12 | 1995-05-30 | International Business Machines Corporation | System and method for dynamically invoking object methods from an application designed for static method invocation |
US5361350A (en) * | 1991-12-12 | 1994-11-01 | International Business Machines Corporation | Object oriented method management system and software for managing class method names in a computer system |
US5390328A (en) * | 1992-03-30 | 1995-02-14 | International Business Machines Corporation | Data processing system and method for providing notification in a central processor of state changes for shared data structure on external storage |
US5367685A (en) * | 1992-12-22 | 1994-11-22 | Firstperson, Inc. | Method and apparatus for resolving data references in generated code |
JPH06214865A (ja) * | 1993-01-12 | 1994-08-05 | Fujitsu Ltd | オブジェクト・ベース・データ処理装置 |
US6378003B1 (en) * | 1993-04-05 | 2002-04-23 | International Business Machines Corporation | Method and system for deriving metaclasses in an object oriented system |
JPH06309204A (ja) * | 1993-04-20 | 1994-11-04 | Matsushita Electric Ind Co Ltd | データ処理方法及びその装置 |
US5692195A (en) * | 1994-08-31 | 1997-11-25 | International Business Machines Corporation | Parent class shadowing |
US5675801A (en) * | 1994-09-30 | 1997-10-07 | International Business Machines Corporation | Object oriented system and method for generating target language code |
US5613120A (en) * | 1994-10-20 | 1997-03-18 | Silicon Graphics, Inc. | System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program |
US5794044A (en) * | 1995-12-08 | 1998-08-11 | Sun Microsystems, Inc. | System and method for runtime optimization of private variable function calls in a secure interpreter |
US5754858A (en) * | 1996-05-01 | 1998-05-19 | Microsoft Corporation | Customizable application project generation process and system |
US5815718A (en) * | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
US6025836A (en) * | 1997-07-23 | 2000-02-15 | Novell, Inc. | Method and apparatus for generating object oriented user interfaces |
US5987256A (en) * | 1997-09-03 | 1999-11-16 | Enreach Technology, Inc. | System and process for object rendering on thin client platforms |
US6026237A (en) * | 1997-11-03 | 2000-02-15 | International Business Machines Corporation | System and method for dynamic modification of class files |
US6066181A (en) * | 1997-12-08 | 2000-05-23 | Analysis & Technology, Inc. | Java native interface code generator |
KR100404785B1 (ko) * | 1998-03-23 | 2003-11-07 | 인터내셔널 비지네스 머신즈 코포레이션 | 변형된 상수 풀을 가진 자바 런타임 시스템 및 새로운코드의 자바 런타임 시스템내로의 도입 방법 |
US6061520A (en) * | 1998-04-07 | 2000-05-09 | Sun Microsystems, Inc. | Method and system for performing static initialization |
US6093216A (en) * | 1998-05-29 | 2000-07-25 | Intel Corporation | Method of run-time tracking of object references in Java programs |
US6216237B1 (en) | 1998-06-19 | 2001-04-10 | Lucent Technologies Inc. | Distributed indirect software instrumentation |
US6324688B1 (en) * | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
US6260187B1 (en) * | 1998-08-20 | 2001-07-10 | Wily Technology, Inc. | System for modifying object oriented code |
JP2000122859A (ja) | 1998-10-20 | 2000-04-28 | Hitachi Ltd | 並列プログラミングの開発支援装置及びその開発支援方法 |
US6321377B1 (en) * | 1998-12-03 | 2001-11-20 | International Business Machines Corporation | Method and apparatus automatic service of JIT compiler generated errors |
US6442558B1 (en) * | 1998-12-03 | 2002-08-27 | International Business Machines Corporation | Mechanisms for division, storage, reconstruction, generation, and delivery of java class files |
US6523171B1 (en) * | 1998-12-29 | 2003-02-18 | International Business Machines Corporation | Enhanced source code translator from procedural programming language (PPL) to an object oriented programming language (OOPL) |
US6578191B1 (en) * | 1999-05-17 | 2003-06-10 | International Business Machines Corporation | Method and apparatus for dynamic generation of adapters |
US6754887B1 (en) * | 1999-10-22 | 2004-06-22 | International Business Machines Corporation | Methods for implementing virtual bases with fixed offsets in object oriented applications |
-
2001
- 2001-02-20 EP EP01301504A patent/EP1128263B1/en not_active Expired - Lifetime
- 2001-02-20 US US09/789,021 patent/US7024657B2/en not_active Expired - Fee Related
- 2001-02-20 DE DE60142136T patent/DE60142136D1/de not_active Expired - Lifetime
- 2001-02-21 CN CNB011168846A patent/CN1251075C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7024657B2 (en) | 2006-04-04 |
EP1128263A2 (en) | 2001-08-29 |
EP1128263B1 (en) | 2010-05-19 |
CN1312502A (zh) | 2001-09-12 |
EP1128263A3 (en) | 2006-04-19 |
US20040205710A1 (en) | 2004-10-14 |
DE60142136D1 (de) | 2010-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1280730C (zh) | 不用存储单元收集装置及不用存储单元收集方法 | |
CN1259622C (zh) | 对排列在信元中的信息进行显示的装置 | |
CN1120425C (zh) | 存储器控制器和存储器控制方法 | |
CN1132098C (zh) | 并行分布处理系统及其方法 | |
CN1299177C (zh) | 数据管理装置、计算机系统及数据处理方法 | |
CN1969292A (zh) | 用户轮廓管理系统 | |
CN1498367A (zh) | 信息处理装置、存储器管理装置、存储器管理方法及信息处理方法 | |
CN1763743A (zh) | 图表上的自动标签放置系统和方法 | |
CN1201519C (zh) | 数据一致性检测装置、数据一致性判断装置及数据挑选装置 | |
CN1453687A (zh) | 通信装置及系统、插入模块控制方法及记录媒体 | |
CN101030138A (zh) | 应用构架 | |
CN1834889A (zh) | 软件认证系统和软件认证程序及软件认证方法 | |
CN1776621A (zh) | 程序变换方法 | |
CN1886749A (zh) | 记录装置 | |
CN1507202A (zh) | 设备管理系统、设备管理终端、网络设备、终端程序、设备程序以及设备管理方法 | |
CN1107264C (zh) | 信息提供系统 | |
CN1296825C (zh) | 模拟器及模拟方法 | |
CN1251075C (zh) | 程序生成装置及其方法、计算机装置及其处理方法 | |
CN1199198A (zh) | 调节规则生成方法和调节规则生成设备以及调节控制设备 | |
CN1237731A (zh) | 数据处理方法、记录介质及数据处理设备 | |
CN1145878C (zh) | 对指令列译码并执行指令的处理器 | |
CN1908951A (zh) | 具有验证功能的电子文档 | |
CN1912830A (zh) | 定义面向对象模型的操作接口的方法 | |
CN1632794A (zh) | 可扩展标记语言类型至关系数据库表的映射方法 | |
CN1469266A (zh) | 内容包、请求传送信号、传送计划表、服务器和终端装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060412 Termination date: 20120221 |