CN1143212C - 实现快速子类和子类型检查的方法与设备 - Google Patents
实现快速子类和子类型检查的方法与设备 Download PDFInfo
- Publication number
- CN1143212C CN1143212C CNB991040805A CN99104080A CN1143212C CN 1143212 C CN1143212 C CN 1143212C CN B991040805 A CNB991040805 A CN B991040805A CN 99104080 A CN99104080 A CN 99104080A CN 1143212 C CN1143212 C CN 1143212C
- Authority
- CN
- China
- Prior art keywords
- type
- subtype
- candidate
- class
- judge
- 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
- 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
Abstract
本文披露了在程序执行期间进行快速子类型检查的方法和装置。根据本发明的一个方面,判定与作为基于对象的计算系统一部分的对象关联的类是否是另一个类型的子类型的方法,包括从与该对象关联的类所关联的动态存储位置获取一个候选类型,将该候选类型与潜在地与该候选类型相同的第一个类型作比较。然后判断该候选类型实际上是否等于第一个类型。如果确定该候选类型实际上等于第一个类型,就提供一个表示该候选类型实际上等于第一个类型的子类型的指示。
Description
本发明总体涉及基于对象的系统的对象之间关系的确定,更具体地说,本发明涉及对基于对象的系统中的对象有效地执行子类型检查。
许多基于对象的计算系统是这样构造的,其中的对象是定义了可用于对象的功能的特定类和子类的成员。在程序执行期间,虚拟机一般涉及检查对象之间的关系,以利程序的执行。举例来说,虚拟机可以检查对象之间的子类或子类型关系。在有些程序设计语言、例如美国加州Palo Alto的Sun Microsystems公司开发的JavaTM程序设计语言中,程序设计语言内的构造涉及子类检查。这种子类检查一般涉及判断某特定对象是否是给定类型的。就是说,检查与程序关联的类结构以确定特定对象的类型。
图1是一种常规类结构的图示。类结构102是一个类分层结构,包括类106和子类110。一般来说,类106是一个抽象类,可以包含任意数量的子类110。如图所示,子类“1”110a、子类“2”110b和子类“N”110c是类106的“直接”子类,而子类“A1”110d是子类“1”110a的直接子类。子类“A1”110d可看作是类106的间接子类,因为子类“A1”110d是子类“1”110a的子类,后者是类106的子类。
类106一般包括各种不同的函数(function)或过程(method)。每个子类110通常包括一个不同的函数集合。举例来说,子类“1”110a一般包括专门用于作为子类“1”110a的一部分的对象的函数。作为类106的成员的对象实际上可以执行与类106相关的所有函数。是任何子类110的成员的一个对象也是类106的成员。因此,是任何子类110的成员的一个对象也可以执行与类106相关联的所有函数。然而,是某特定子类例如子类“1”110a的成员的对象,却不能执行与不同的子类例如子类“2”110b相关联的特定函数。因此,判断某对象属于哪个子类110,就能有效地确定该对象所能执行的函数。
运行时可用一种窄投射(narrawing cast)来有效地将由类106定义的对象作为由子类“1”110a定义的对象来看待。然而,由于由类106定义的对象,可以由子类“2”110b定义而不是由子类“1”110a定义,一般要进行检查以确定将该对象与子类“1”110a关联是否准确。本领域的熟练人员会明白,关于某对象是否与子类“1”110a关联的检查,实际上就是判断该对象是否至少与子类“1”110a关联的检查。换言之,与子类“A1”110d关联的某对象一般会被确定为也与子类“1”110a关联。
在JavaTM环境中,确定对象的子类型的函数,例如is_subtype函数,可以是静态编码的。尽管用来静态编码函数的方法会有所不同,一种常用的方法是采用一个二维位矩阵,其中位于(i,j)位置的一个位编码is_subtype(ti,tj)的结果。采用这种矩阵,子类型检查实际上涉及变址到矩阵去确定对象的子类型。然而,由于矩阵规模可能很大,并且由于一般要求的指令的位操作,所以子类型检查的速度经常很慢。
一般来说,为了确定某特定对象的子类型而进行子类型检查时,通常必须检查一个类型的几乎所有子类型,例如一个类的几乎所有子类。在有些层次化类结构中,例如图1的类结构102中,必须检查的子类的数量会相对较多。例如,某些类可能具有数百个相关的子类。因此,当有多个子类型时,例如在有用JavaTM程序设计语言定义的接口的情况下,子类型检查的执行效率通常不高。就是说,当有多个子类型时,检查每个子类型一般都很费时,正如上文所述。此外,在使用多个继承层(inheritance layer)的系统例如C++程序设计语言定义的系统中执行子类型检查经常也效率不高。对于有多个继承层的系统来说,有效地执行子类型检查一般有困难,因为必须检查每个继承层。
有效地执行子类型检查是重要的,因为检查可能频繁地发生。在程序执行期间频繁发生检查时,与检查相关联的开销就会相对较高。在有些情况下,一个运行时子类型检查或测试,可能要求相当于大约8条指令量级的开销,本领域的熟练人员知道,这对于整体程序来说是相当大的开销,在重复进行运行时子类型检查时尤其如此。因此,程序执行的速度由于频繁的子类型检查而受抵销。
一般来说,当在程序执行期间进行子类型检查时,实际上所有与程序关联的类和过程都必须是已知的。通常要构造数据结构来列举所有与程序关联的类和过程,以便这些类和过程处于准备好被存取的状态。换言之,子类型检查中所用的数据结构通常必须在程序执行之前计算出来。这种数据结构通常相当大,耗费相当多的系统资源。所有与程序关联的类和过程都必须是已知的这个要求,是与采用动态连接或动态类加载的系统不兼容的,因为动态连接允许与程序关联的类和过程有效地改变。如果不能采用动态连接,程序的功能就会受到影响。在采用动态连接的环境中,每次进行涉及类加载的操作后,数据结构一般都要重新计算,这就耗费时间,因而效率不高。
因此,需要一种提高子类型检查效率的方法和装置。更特别地,需要一种提高子类型检查效率、并且每次类加载操作后不要求重新计算数据结构的方法和装置。
本发明披露在程序执行期间进行快速子类型检查的方法和装置。根据本发明的一个方面,快速有效地确定作为与基于对象的计算系统一部分的对象相关联的类型的方法,包括从与一个类(该类与该对象相关联)相关联的动态存储位置获取一个候选类型,将候选类型与潜在地与该候选类型相同的第一个类型作比较。然后判断候选类型是否等于第一个类型。如果确定候选类型等于第一个类型,就提供一个表示候选类型等于第一个类型的指示。
根据本发明的另一个方面,安排一个计算机系统来确定驻留在计算机系统上的第一个对象相关联的类型。计算机系统包括处理器、内存和将候选类型装入内存的加载机构。候选类型是从与第一个对象关联的类对象获取的。计算机系统还包括一个将候选类型与第一个类型比较的比较机构,一个能确定候选类型是否等于第一个类型的判断机构。计算机系统中有一个指示器,用于在确定候选类型等于第一个类型时,提供一个表示候选类型等于第一个类型的指示。
根据本发明再另一个方面,对属于一个特定类的成员的对象执行子类型检查的方法,包括从与该特定类相关联的某位置获取一个存储单元。该存储单元包括潜在地与该对象相关联的第一个子类型的有关信息。该方法还包括判断存储单元所含信息是否和与该对象相关联的实际子类型有关,并且在存储单元与实际类型有关时提供一个表示存储单元所含信息与实际子类型有关的指示。在一个实施例中,该方法还在存储单元所含信息与实际子类型无关时,判断对象的实际子类型,并将与实际子类型相关的信息存储到该特定类的关联位置。
通过阅读以下的详细说明,研究各种附图,能更好理解本发明。
参考以下结合附图的说明,就能理解用具体实施例阐示的本发明。各附图简介如下:
图1是一种常规类分层结构的图示。
图2a是表示按照本发明的实施例,判断某对象是否是特定类型的子类型的相关步骤的流程图。
图2b是表示按照本发明的实施例,将一个类型与一个所加载的高速缓存比较一即图2a的步骤208的相关步骤的流程图。
图2c是表示按照本发明的一个实施例,具有一个高速缓存单元的类的图示。
图3是适于实现本发明的计算机系统的图示。
图4是按照本发明一个实施例的虚拟机的图示。
一般来说,判定对象之间子类型关系所执行的子类型检查要占用相当多的计算机内存空间。要求占用这个空间的,是与执行子类型检查相关的指令,以及预先计算的、通常用于存储所有与计算机程序的执行相关的所有类型和过程的数据结构。子类型检查要求占用的空间,以及执行反复的子类型检查所需开销,经常影响程序执行的速度。
通过保存子类型检查的预期结果,可以有效地减少执行子类型检查相关的开销量。具体来说,运行时,在首次要将与某对象关联的子类型针对某特定类型进行检查时,实际上可以采用任何方法来进行实际的检查,本领域的熟练人员是清楚这一点的。因为随后对相同类的对象进行的检查可能得出相同的子类型结果,所以保存实际检查结果,例如首次检查的计算结果,会显著降低与进行子类型检查相关的开销。换言之,这是一种动态子类型检查机制,它采用高速缓存技术,允许将以前的子类型检查结果高速缓存起来,随后在执行同样的检查时,如果判定所高速缓存的值正确即适当的话就允许使用高速缓存的值,从而加快同样检查的速度。在一个实施例中,高速缓存的数据可以被保存在正被测试或检查的值一例如对象一的类型描述符中。
在执行了确定与某个类关联的某对象“S”的子类型的初始检查之后,初始检查的结果被存储起来。由于存储了初始子类型检查的结果,下一次要求检查确定对象“S”的子类型时,存储的结果就能使相同的子类型检查的进行速度加快。举例来说,当要将对象“S”的子类型对照类型“1”作检查时,即要判断对象“S”是否属于类型“T”时,就能相对快速地将与对象“S”关联的存储的类型描述符与子类型“T”进行比较。如果对象“S”的类型等于子类型“T”,则认为比较结果是成功的,一般就不再要求进行常规的子类型检查。因此可避免与一个常规子类型检查相关的开销。另一方面,如果对象“S”的类型不等于子类型“T”,则要用常规的子类型检查来确定对象“S”的类型。在某些情况中,这种检查要遍历一个类层次结构以定位适当的子类型,如果找不到适当的子类型,就产生一个异常。
参见图2a,现在来说明按照本发明的实施例,判断某对象是否是特定类型的子类型或子类的相关步骤。下面具体说明判断某对象是不是类型B的子类型的流程。判断某对象是不是类型B的子类型的流程202始于步骤204,该步骤将对象的类型,例如类,装入与计算机系统相关的寄存器。本领域的熟练人员明白,对象的总类即抽象类是已知的。一旦对象的类被装入寄存器,然后在步骤206,加载的类的高速缓存单元就被加载,例如加载到计算机内存。下文将结合图2c来说明高速缓存单元或高速缓存。
高速缓存被加载后,在步骤208,将类型B对照该加载的高速缓存进行比较。将类型B与加载的高速缓存比较的相关步骤将在下文结合图2b来说明。在步骤210,对类型B与加载的高速缓存的比较结果进行判断。在所述实施例中,如果类型B与加载的高速缓存的比较产生一个真结果,即类型B与加载的高速缓存的比较确定它们匹配,则在步骤222将真值返回给请求判定对象是否是类型B的子类型的函数。换言之,如果加载的类与类型B是相同的类,或者如果加载的类是类型B的子类型,则返回真值。一旦返回真值后,判断对象是否是类型B的子类型的流程即告完成。
另一方面,如果步骤210判定,类型B与加载的高速缓存的比较得不出真结果,则在步骤212计算对象的类与类型B之间的子类型关系。就是说,当判定对象的类与类型B不相同时,就要通过计算来确定对象的类与类型B之间的子类型关系,如果存在的话。计算子类型关系之后,过程流继续到步骤214,判定对子类型的计算是否产生真结果,即是否对象的类与类型B之间存在一个有效的子类型关系。
如果步骤214判定,对象的类与类型B之间不存在子类型关系,则在步骤220,向请求子类型检查的函数返回一个假值。一旦返回假值后,判断对象是否是类型B的子类型的流程即告完成。然而,如果步骤214判定,对象的类与类型B之间存在子类型关系,则过程流继续到步骤216,在该步骤中,用类B“填充”对象的类的高速缓存。换言之,类B或者说对类型B的引用,被存储到该对象的类的高速缓存单元。最后,在用类型B“填充”该对象的类的高速缓存之后,在步骤2 18向系统返回一个真值,以指示对象的类与类型B之间存在子类型关系。然后,判断一个对象是否是类型B的子类型的流程即告完成。
下面结合图2b,说明按照本发明的实施例,将类型B与加载的高速缓存一例如某特定对象的类进行比较的相关步骤。就是说,要讨论的是图2a的步骤208的一个实施例。类型B与加载的高速缓存的比较始于步骤232,将高速缓存单元装入一个寄存器。特别地,将该对象的类的高速缓存单元存入一个寄存器(下文将结合图2c说明高速缓存单元)。高速缓存单元被存入寄存器后,在步骤234将寄存器的内容与类型B作比较。如上所述,一种采用高速缓存技术的检查机制允许将以前的子类型检查结果高速缓存起来,目的是在随后执行相同检查时通过使用该高速缓存的值来加快相同检查的速度。由于检查时采用高速缓存的单元,可以随时访问该单元。几乎可采用任何适当方法来比较高速缓存单元与寄存器的内容。本领域的熟练人员一般都很了解这类方法。一旦寄存器内容与类型B作比较后,比较类型B与加载的高速缓存的过程即告完成。
如上所述,类例如类对象包括一个可在其中存储以前的子类型检查结果的高速缓存单元。图2c是表示按照本发明的一个实施例,具有高速缓存单元的类的图示。对象“S”252包括首部256,并有一个指向类260的类指针。类260包括首部264和高速缓存单元268。前文说过,高速缓存单元268被用来存储以前一例如第一个—与类260关联的子类型检查的结果。应当明白,当类260被初始化时,高速缓存单元268一般可初始化为任意值。举例来说,可将高速缓存单元268初始化来标识类260。一般来说,高速缓存单元268可看作是个“动态”存储单元,这是因为,随着程序的执行,或更确切地说,随着子类型检查的执行,高速缓存单元268中存储的结果可能会改变。就是说,高速缓存单元268的内容可以被更新。
如果已知对象“S”252是类260的成员时,则在涉及对象“S”252的子类型检查期间,可以访问高速缓存单元268,以获取涉及类260的最新子类型检查结果。一般来说,可以更新高速缓存单元268,以存储涉及类260的最新子类型检查结果。这样,如果高速缓存单元268存储的结果不是与对象“S”252关联的子类型时,则一旦在确定了与对象“S”252关联的实际子类型时,就可以将其存储到高速缓存单元268。应当明白,在有些实施例中,向高速缓存单元268存储以及从中检索信息可能涉及到同步,以解决可能出现的高速缓存相干性问题。
图3表示一个典型的适于实现本发明的通用计算机系统。计算机系统330包括任意多个与存储器连接的处理器332即中央处理单元(CPU)。存储器一般包括诸如随机存取存储器(RAM)的主存储器334和诸如只读存储器(ROM)的主存储器336。
可以安排计算机系统330一或更确切地说一各CPU,去支持一个虚拟机。本领域的熟练人员明白这一点。后文将结合图4描述计算机系统330上支持的一例虚拟机。本领域众所周知,ROM 334的作用是单向地向各CPU 332传输数据和指令,而RAM 336的作用则是双向地向各CPU 332传输数据和指令和从其接收数据和指令。两种主存储器334、336都可以包括几乎任何适当的计算机可读介质。二级存储介质338一般来说是海量存储器,也能双向地连接到各CPU332。一般来说,二级存储介质338可以配置来提供额外的存储容量,可以是一种用于存储计算机代码、计算机程序代码设备、数据等等的计算机可读介质。一般来说,二级存储介质338是诸如硬盘或磁带的存储介质,速度比主存储器334、336慢。二级存储介质338的形式可以是众所周知的设备,包括(但不限于)磁带机和纸带机。本领域的熟练人员明白,二级存储介质338中保存的信息在适当情况下,可像RAM 336的一部分那样以标准方式被引用,例如作为虚拟内存。一种诸如CD-ROM的专用主存储器334也可以单向地向各CPU传送数据。
各CPU也连接到一个或多个输入-输出设备340,输入-输入设备包括(但不限于)视频监视器、轨迹球、鼠标器、键盘、麦克风、触摸敏感显示屏、传感器读卡机、磁带或纸带阅读机、图形输入板、输入笔、语音或手写识别器、以及其它已知的输入设备诸如其它计算机。最后,CPU 332也能采用312所示的网络连接,可选地连接到计算机或电信网络,例如因特网或内部网。采用了这种网络连接312,就可认为各CPU 332能从网络接收数据。CPU 332在执行上述各方法步骤的过程中也能向网络输出数据。这种数据通常表示为一个待由各CPU 332执行的指令序列,可以例如实现在载波中的计算机数据信号从网络接收和向网络输出。计算机硬件和软件领域的熟练人员都熟悉上述的设备和材料。
上文说过,可以在计算机系统330上执行一个虚拟机。图4是图3的计算机系统330支持的、适于实现本发明的虚拟机的图示。如果要执行计算机程序,例如用JavaTM程序设计语言编写的计算机程序,要将源代码410提供给编译时环境405内的编译器420。编译器420将源代码410翻译成字节代码430。一般来说,源代码410在软件开发者创建了源代码410时就被翻译成字节代码430。
字节代码430一般来说可以复制、下载或以其它方式通过例如图3中网络3 12的网络传播,或者在诸如图3中主存储器334的存储器上存储。在所述实施例中,字节代码430是独立于平台的。就是说,字节代码430可以在运行在适当虚拟机440上的几乎任何计算机系统上执行。
字节代码430被提供给包含虚拟机440的运行环境435。在一个实施例中,虚拟机可以是JavaTM虚拟机。运行时环境435一般可采用诸如图3中CPU的一个或多个处理器来执行。虚拟机440包括编译器440、解释器444和运行时系统446。字节代码430可提供给编译器442或解释器444。
如果将字节代码430提供给编译器442,则字节代码430中包含的过程就被编译成机器指令。在一个实施例中,编译器442是一个适时的编译器,它能将对字节代码430所含过程的编译,推迟到该过程马上要被执行时才进行。如果将字节代码430提供给解释器444,则字节代码430以每次一个字节代码的方式被读入解释器444。每当一个字节代码被读入解释器444,解释器444就执行该字节代码所定义的操作。就是说,解释器444“解释”字节代码430,这一点本领域的熟练人员都明白。一般来说,解释器444几乎是连续地处理字节代码和执行与字节代码430相关联的操作。
当一个过程被另一个过程调用,或从运行时环境435调用时,如果该过程是个解释过程,则运行时系统446可以从运行环境435以一个字节代码430序列的形式获取该过程,这种形式的过程可被解释器444直接执行。另一方面,如果被调用的过程是个尚未编译的编译过程,则运行时系统446也是从运行时环境435以一个字节代码430序列的形式获取该过程,然后在下一步去启动编译器442。编译器442于是从字节代码生成机器指令,所生成的机器语言指令可由图3的CPU直接执行。一般来说,当虚拟机440中止时,机器语言指令即被抛弃。
尽管本文仅描述了本发明的一些实施例,应当明白,本发明可以以许多其它形式来实现而不偏离本发明的精神和范围。例如,在有些实施例中,类对象可以包含一个以上的高速缓存单元。如果一个类对象包含一个以上的高速缓存单元,则可以存储先前的一个以上的子类型检查结果。就是说,对于某个对象,可以存储一个以上的可能子类型,这样,如果确定一个高速缓存单元中存储的子类型不是该对象的子类型时,就检查在另一个高速缓存单元中存储的子类型。
尽管本发明是就在类的高速缓存单元中存储子类型检查结果而进行说明的,应当明白,以前的结果并不是非要在高速缓存单元中存储。相反,以前的结果可以被存储在几乎任何在子类型检查期间能访问到的动态存储单元中。例如,可以将以前的子类型检查结果存储到一段与该类并无直接关联的计算机代码中。另一种方法是,可以将以前的子类型检查结果存储到一个动态的、可全局访问的表中,每当执行一个涉及某特定类的子类型检查时就对其进行访问。这样一个表可以直接与该特定类相关。
应当明白,在一个实施例中,如果不采用为判定某特定对象是否是某个子类型的对象的检查,可转而采用为判定某特定对象是否不是某个子类型的对象的检查。这种检查的结果一般可存储在一个类的高速缓存单元中、计算机代码段中或作为全局表的一部分。换言之,可以用高速缓存单元来保存对于一个特定子类型检查一个可能不会匹配的子类型名。
一般来说,使用子类型检查的指令或操作,会因为特定系统的要求而差别很大。例如在JavaTM环境中,“astore”指令、“checkcast”指令和“instanceof”指令一般采用子类型检查。
此外,根据本发明进行子类型检查的相关步骤也可以变化。在不偏离本发明的精神和范围的情况下,这些步骤一般可以修改、变化次序、增加或者去除。例如,对比较和计算是否产生一个“真”标志的判断,可以改为对比较和计算是否产生一个“假”标志的判断。另外,如果类对象包括一个以上的高速缓存单元,则进行子类型检查的相关步骤就可以包括循环步骤,循环地测试每个高速缓存单元,直到找出子类型匹配或者测试完所有高速缓存单元时才结束循环。因此,本文中的例子应视为是示例性的而不是限制性的,本发明并不局限于本文所述的细节,而是由后附的权利要求及其等同的全部范围所规定的。
Claims (23)
1.一种计算机实现的方法,用于确定与作为一个基于对象的计算系统一部分的对象相关联的类是否是另一个类型的子类型,该方法包括:
获取一个候选类型,该候选类型是从与该对象关联的类相关的一个动态存储位置获取的;
将该候选类型与第一个类型作比较;
判断该候选类型是否等于第一个类型;
如果判定该候选类型等于该第一个类型,就提供一个表示该候选类型是该第一个类型的子类型的指示。
2.权利要求1所述的计算机实现的方法,其中,从与该对象关联的类相关的动态存储位置获取的该候选类型,是从该对象关联的类的高速缓存单元获取的。
3.权利要求2所述的计算机实现的方法,其中,将该候选类型与第一个类型作比较包括:
将该候选类型从高速缓存单元装入寄存器;
将高速缓存单元的内容与第一个类型比较。
4.上述任一个权利要求所述的计算机实现的方法,其中,如果判定该候选类型不等于第一个类型,则该方法进一步包括:
计算该对象的类与第一个类型之间的类型关系。
5.权利要求4所述的计算机实现的方法,进一步包括:判断该对象的类与第一个类型之间是否存在一个类型关系,其中,如果判定该对象的类与第一个类型之间存在着类型关系,则将第一个类型的指示存储到该对象的类的高速缓存单元中。
6.权利要求5所述的计算机实现的方法,进一步包括将该对象的类装入寄存器。
7.一个计算机系统,配置用于确定与驻留在该计算机系统上的第一个对象关联的子类型,该计算机系统包括:
一个处理器;
一个将一个候选类型装入与计算机系统关联的内存的加载机构,该候选类型是从与第一个对象关联的类对象所关联的存储位置获取的;
一个配置成用于将该候选类型与第一个类型比较的比较机构;
一个配置成用于确定该候选类型是否等于第一个类型的判断机构;
一个配置成用于在确定该候选类型等于该第一个类型时,提供一个表示该候选类型等于第一个类型的子类型的指示的指示器。
8.根据权利要求7的计算机系统,其中,从该类对象获取的该候选类型是从该类对象的高速缓存单元获取的。
9.根据权利要求8的计算机系统,其中,配置成用于将该候选类型与该第一个类型比较的比较机构包括:
配置成用于将该候选类型从该高速缓存单元装入寄存器的加载机构;
配置成用于将该高速缓存单元的内容与第一个类型比较的比较机构。
10.根据权利要求7~9中任一项权利要求的计算机系统,进一步包括,配置成用于在确定该候选类型不等于第一个类型时,计算该类对象与第一个类型之间的类型关系的计算机构。
11.根据权利要求10的计算机系统,进一步包括:
配置成用于判断该类对象与第一个类型之间是否存在类型关系的判断机构;
配置成用于在确定该类对象与第一个类型之间存在着类型关系时,将第一个类型的标志存储到该类对象的高速缓存单元的存储机构。
12.根据权利要求7的计算机系统,其中,可操作存储单元以包括子类型检查结果。
13.根据权利要求7的计算机系统,其中,可操作存储单元以包括在先的子类型检查结果。
14.一种计算机实现的方法,用于对属于一个特定类的成员的对象执行子类型检查,该方法包含:
从与该特定类相关联的一个位置获取一个存储单元,该存储单元包括潜在地与该对象关联的第一个子类型的有关信息;
判断该存储单元所含信息是否与该对象相关联的一个实际子类型有关;
在确定该存储单元的信息与该实际类型有关时,提供一个表示该存储单元所含信息与该实际子类型有关的指示。
15.权利要求14所述的计算机实现的方法,进一步包括:
在确定该存储单元所含信息与该实际子类型无关时,判断与该对象相关的该实际子类型;
并将与该实际子类型有关的信息存储到与该特定类关联的位置。
16.一种计算机实现的方法,用于确定与作为基于对象的计算系统一部分的对象关联的类是否是另一个类型的子类型,其中该对象属于第一个类型,该方法包括:
获取第二个类型,该第二个类型是该对象的候选类型;
将第一个类型与第二个类型作比较;
判断第二个类型是否等于第一个类型;
如果判定第二个类型等于第一个类型,就将与第二个类型关联的信息存储到该对象关联的类所关联的动态存储位置,其中,在该动态存储位置存储信息允许该信息被访问,用于随后的类型检查。
17.权利要求16所述的计算机实现的方法,进一步包括:
在确定第二个类型等于第一个类型时,提供第二个类型是第一个类型的子类型的指示。
18.权利要求16或17所述的计算机实现的方法,其中,获取第二个类型包括从包含多个类型的数据结构中获取第二个类型。
19.权利要求18所述的计算机实现的方法,进一步包括创建包含多个类型的数据结构。
20.权利要求16所述的计算机实现的方法,进一步包括:
在确定第二个类型不等于第一个类型时,获取第三个类型,该第三个类型是该对象的候选类型,其中该第三个类型是从包含多个类型的数据结构中获取的;
将第一个类型与第三个类型作比较;
判断第三个类型是否等于第一个类型;
如果判定第三个类型等于第一个类型,就将与第三个类型关联的信息存储到该动态存储位置。
21.一种计算机实现的方法,用于确定与作为基于对象的计算系统一部分的对象关联的类是否是另一个类型的子类型,该方法包括:
将第一个候选类型存储到与该对象关联的类所关联的一个动态存储位置;
从该动态存储位置获取第一个候选类型;
将第一个候选类型与某对象类型作比较,该对象类型是与该对象关联的对象类型;
判断第一个候选类型是否与该对象类型相同;
如果判定第一个候选类型与该对象类型相同,就提供一个表示第一个候选类型是该对象类型的子类型的指示。
22.权利要求21所述的计算机实现的方法,其中,当判定第一个候选类型与该对象类型不相同时,该方法进一步包括:
获取一个第二个候选类型,其中该第二个候选类型不是从该动态存储位置获取的;
将第二个候选类型与该对象类型作比较;
判断第二个候选类型是否与该对象类型相同;
如果判定第二个候选类型与该对象类型相同,就提供一个表示第二个候选类型是对象类型的子类型的标志;
将第二个候选类型存储到该动态存储位置。
23.一个计算机系统,配置成用于确定驻留在该计算机系统上的第一个类型的对象所关联的子类型,该计算机系统包括:
一个处理器;
一个配置成用于获取第二个类型的第一机构,其中该第二个类型是该对象的一个候选类型;
用于将第一个类型与第二个类型比较的比较器;
用于确定第二个类型是否等于第一个类型的判断机构;
用于在确定第二个类型等于第一个类型时,将与第二个类型关联的信息存储到与该对象关联的类所关联的一个动态存储位置的动态存储机构,该动态存储位置存储的该信息用于在随后的类型检查中被访问。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US7911098P | 1998-03-23 | 1998-03-23 | |
US60/079110 | 1998-03-23 | ||
US09/107,224 US6714991B1 (en) | 1998-03-23 | 1998-06-30 | Method and apparatus for implementing fast subclass and subtype checks |
US09/107224 | 1998-06-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1236919A CN1236919A (zh) | 1999-12-01 |
CN1143212C true CN1143212C (zh) | 2004-03-24 |
Family
ID=26761628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB991040805A Expired - Fee Related CN1143212C (zh) | 1998-03-23 | 1999-03-23 | 实现快速子类和子类型检查的方法与设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US6714991B1 (zh) |
EP (1) | EP0945790B1 (zh) |
JP (1) | JP2000039997A (zh) |
CN (1) | CN1143212C (zh) |
DE (1) | DE69931685T2 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7234146B1 (en) * | 1999-07-30 | 2007-06-19 | International Business Machines Corporation | Object in, object out technique |
US6918126B1 (en) * | 2000-09-08 | 2005-07-12 | International Business Machines Corporation | Method and apparatus for creating and enforcing protected system level Java code |
US6912542B2 (en) * | 2001-09-26 | 2005-06-28 | Intel Corporation | Method for implementing fast type checking |
US6948156B2 (en) * | 2001-10-24 | 2005-09-20 | Sun Microsystems, Inc. | Type checking in java computing environments |
US6996825B2 (en) * | 2001-12-27 | 2006-02-07 | Sun Microsystems, Inc. | Method and apparatus for efficient object sub-typing |
US7272828B2 (en) * | 2002-11-27 | 2007-09-18 | Intel Corporation | Software object type identification |
US7526502B2 (en) * | 2004-09-10 | 2009-04-28 | Microsoft Corporation | Dynamic call site binding |
GB2422924A (en) * | 2005-02-04 | 2006-08-09 | Sony Comp Entertainment Europe | Determining derived relationships in a hierarchical structure |
US20060212847A1 (en) * | 2005-03-18 | 2006-09-21 | Microsoft Corporation | Type checker for a typed intermediate representation of object-oriented languages |
US7694285B2 (en) * | 2005-08-30 | 2010-04-06 | Microsoft Corporation | Relaxed and extended delegates |
US20070074185A1 (en) * | 2005-08-30 | 2007-03-29 | Microsoft Corporation | Identifier expressions |
US8413119B2 (en) * | 2008-10-03 | 2013-04-02 | Microsoft Corporation | Semantic subtyping for declarative data scripting language by calling a prover |
JP5506721B2 (ja) * | 2011-03-09 | 2014-05-28 | インターナショナル・ビジネス・マシーンズ・コーポレーション | サブクラステスト関数の実行結果を再利用してプログラムを最適化する最適化装置、最適化方法及び最適化プログラム |
US10296313B2 (en) * | 2014-11-18 | 2019-05-21 | Roger James Poon | Safely consuming dynamically-typed code from a statically-typed programming language |
CN106325968B (zh) * | 2016-08-19 | 2019-03-08 | 江苏电力信息技术有限公司 | 一种分析sap开发对象类型之间关联关系的方法 |
US11150915B2 (en) | 2019-09-13 | 2021-10-19 | International Business Machines Corporation | Deferred bytecode class verification in managed runtime environments |
US11403075B2 (en) | 2019-11-25 | 2022-08-02 | International Business Machines Corporation | Bytecode verification using class relationship caching |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267349A (en) * | 1990-03-06 | 1993-11-30 | Digital Equipment Corporation | Fast determination of subtype relationship in a single inheritance type hierarchy |
US5297279A (en) * | 1990-05-30 | 1994-03-22 | Texas Instruments Incorporated | System and method for database management supporting object-oriented programming |
JP3178151B2 (ja) * | 1993-03-19 | 2001-06-18 | 富士ゼロックス株式会社 | オブジェクト指向言語のメッセージコンパイル装置 |
US5793963A (en) * | 1994-10-24 | 1998-08-11 | Fisher Rosemount Systems, Inc. | Apparatus for providing non-redundant secondary access to field devices in a distributed control system |
US5915253A (en) * | 1996-12-13 | 1999-06-22 | Novell, Inc. | Method and system for implementing objects in a storage system |
-
1998
- 1998-06-30 US US09/107,224 patent/US6714991B1/en not_active Expired - Fee Related
-
1999
- 1999-03-04 EP EP99301639A patent/EP0945790B1/en not_active Expired - Lifetime
- 1999-03-04 DE DE69931685T patent/DE69931685T2/de not_active Expired - Fee Related
- 1999-03-23 CN CNB991040805A patent/CN1143212C/zh not_active Expired - Fee Related
- 1999-03-23 JP JP11077693A patent/JP2000039997A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
CN1236919A (zh) | 1999-12-01 |
JP2000039997A (ja) | 2000-02-08 |
US6714991B1 (en) | 2004-03-30 |
EP0945790B1 (en) | 2006-06-07 |
EP0945790A2 (en) | 1999-09-29 |
DE69931685D1 (de) | 2006-07-20 |
DE69931685T2 (de) | 2006-11-16 |
EP0945790A3 (en) | 2003-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1143212C (zh) | 实现快速子类和子类型检查的方法与设备 | |
CN100370425C (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN100388204C (zh) | 将本机接口函数调用转换为更简单操作的方法和系统 | |
US6481006B1 (en) | Method and apparatus for efficient invocation of Java methods from native codes | |
US6093216A (en) | Method of run-time tracking of object references in Java programs | |
US7757225B2 (en) | Linktime recognition of alternative implementations of programmed functionality | |
US6295638B1 (en) | Method and apparatus for loading native object code in data processing system | |
US6651248B1 (en) | Method and apparatus for efficient interface method dispatch | |
EP1114366B1 (en) | Accurate method for inlining virtual calls | |
US7818730B1 (en) | Automatic minimal build dependency determination and building an executable with source code | |
US7114152B2 (en) | Method, apparatus, and program to determine the mutability of an object at loading time | |
US6412108B1 (en) | Method and apparatus for speeding up java methods prior to a first execution | |
US8843920B2 (en) | Systems and methods for deferring software implementation decisions until load time | |
US8839215B2 (en) | String cache file for optimizing memory usage in a java virtual machine | |
US8650537B2 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
CA2145671A1 (en) | Shared library locating system | |
US20050172301A1 (en) | Interface invoke mechanism | |
CN100378657C (zh) | 用于改进java方法调用速度的方法和装置 | |
US6658657B1 (en) | Method and apparatus for reducing the overhead of virtual method invocations | |
US10761821B1 (en) | Object oriented programming model for graphics processing units (GPUS) | |
US6324688B1 (en) | Method and apparatus for optimizing execution of Java programs | |
US6604167B1 (en) | Method and apparatus traversing stacks for just-in-time compilers for Java virtual machines | |
US6779188B1 (en) | Apparatus and method for improved devirtualization of method calls | |
CN1149477C (zh) | 用于在运行时提高函数的执行性能的方法和计算系统 | |
KR100649799B1 (ko) | 고속 서브-클레스 검사 및 서브-타입 검사를 컴퓨터에 의해 구현하는 방법 그 시스템 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1053089 Country of ref document: HK |
|
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20040324 Termination date: 20100323 |