用于在面向对象的系统中的位置特定的信息分配的计算机系统和方法技术方案

技术编号:2887720 阅读:167 留言:0更新日期:2012-04-11 18:40
这里提供了用于在一个面向对象的环境中实现位置特定的信息分配的系统和方法。将接收器类型信息保存在一个信息分配位置,以便提供位置特定的信息分配。通过允许信息分配可以在不同的调用位置变化,面向对象的系统会变得更为有效和灵活。(*该技术在2018年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及在面向对象的系统中的信息分配。特别地,本专利技术涉及用于JavaTM虚拟机的位置特定信息分配技术。面向对象的语言的基本思想是将数据和在数据上运算的方法(或函数)组合为一个称之为对象的单独的单元。一个对象的函数一般提供唯一的方式来访问被该对象所封装的数据。通过向对象发送一个信息、指示对象调用由该信息所指定的方法,来访问数据。在面向对象的语言中,有效的信息分配是至关重要的。这是因为信息分配是面向对象程序中一项频率很高的操作,并且是在运行时执行的;因此,应使其尽可能地快。然而,信息分配远不是一个微不足道的操作。与在运行之前就可以确定一个函数的地址的过程程序设计语言(例如,C程序设计语言)不同,面向对象的语言必须在运行时确定处理已经被分配给接收器对象的信息的方法,并且可能要进行大范围的搜索。为了更好地理解信息分配的复杂性,附图说明图1显示了一个包括每一类方法的类分级结构。类分级结构1在其根部包括一个定义了两个虚拟函数foo()和bar()的父类A3。虚拟函数是可以在父类中定义并在子类中重新定义的函数。类B5和类C7继承父类A的数据和方法。如图所示,类B并没有重新定义虚拟函数foo和bar中的任一个。但类C重新定义了虚拟函数foo。当类C的对象被请求调用方法foo时,调用的方法将是由类C定义的方法,而不是由父类A定义的方法。类D9和E11也重新定义了方法foo。由于通常不可能静态地确定一个对象的类,所以在信息分配期间,在运行时执行对正确方法的搜索。有许多已知的技术用于实现方法分配。例如,图2显示了一内联高速缓存。假定方法51最初如下所示<pre listing-type="program-listing"><!]></pre>因此,该方法主要包括语句x.foo(),以调用对象x的方法foo。在运行期间,在调用处理该方法的方法之前,系统必须确定对象x属于哪个类。应用一内联高速缓存,系统第一次确定对象x所属的类,并将对此类的方法的直接调用写入计算机代码。假设对象x是类A中的一个成员,将调用x.foo()改为直接调用A::foo()。箭头指定类A53的一个方法foo。由于对象x可能不是每次都属于类A,则用一个序言(prolog)55确认对象x处于正确的类,该序言由表达式x=A表示,表明如果对象x的类等于类A则为确定。对象的类可以从一个存储在该对象中的值来确定。如果对象处于正确的类,则执行到处理该信息的方法代码57的跳转。回到序言55,如果对象不是属于类A,则调用一个方法查找程序,以便于确定正确的方法。一旦找到正确的方法,系统就用对该方法的直接调用更新信息分配(或调用)位置。此外,系统更新序言,以指定新的类。例如,假设系统第一次遇到x.foo(),对象x为类A,并且数据结构如图2所示被修改。一旦数据结构如图所示被修改,如果对象x为类A,对x.foo()的后续调用将明显地更加有效。然而,如果对象x接下来为类B,则序言55调用一个方法查找程序来寻找方法,我们假设其确定现在的对象x为类B。再参看图1,可以看到,用于类B的方法foo是与在类A中定义的方法foo相同的方法(即,类B没有重新定义虚拟函数foo)。因此,在方法51中的信息分配将变为B::foo(),在序言55中的条件将变为x=B。如果在一个调用位置条的对象保持相同的类,则一个内联高速缓存可以是一种实现信息分配的有效方式。然而,如果该对象是多类的,则系统继续调用方法查找程序,并修改调用位置和序言。因此,此系统实际上是不够有效的。用于实现信息分配的另一种技术是使用一个如图3所示的多形内联高速缓存。与前面相同,方法101最初包括一个方法分配x.foo()。应用一个多形内联高速缓存产生一个能够为不同的接收器类型执行信息分配的残桩(stub)103。最初的信息分配用一个对多形内联高速缓存残桩103的调用被重写。每次遇到一个新的接收器类型时,将一个语句加到残桩上。如图所示,至此已经遇到了三种不同的接收器类型。如果该接收器类型已经遇到过,则为该接收器类型调用方法以处理该信息。否则,调用方法查找程序来确定处理该信息的合适的方法。一般会将一个新的语句加到残桩103上,以便处理每个新的接收器类型。由于多形内联高速缓存能够处理多种接收器类型,因此它比内联高速缓存更灵活。然而,多形内联高速缓存的一个缺陷是随着遇到的接收器类型的增多,残桩继续增长,从而在执行信息分配时会变得越来越不够有效。例如,在找到处理信息的正确的方法之前,系统可能需要通过多个if语句。图4显示了另一种被称作为散列法的信息分配技术。在散列法中,在方法151中的最初的信息分配x.foo()利用一个对散列函数153的调用被重写。散列函数将接收器类型和信息散列,以形成一个散列密钥,该散列密钥一般为进入一个散列表155的索引。散列表包括一个索引157、接收器类型159、信息161和方法163。一旦散列函数散列在散列表155的一行中,则从散列表的列159和161中检索出接收器类型和信息。如果在调用位置处的接收器类型和信息与散列表的行中的接收器类型和信息相匹配,则调用在散列表155的列163中所指定的方法。否则,调用一个方法查找程序以找到正确的方法。一般地,然后将这个新方法加到散列表中。虽然散列法是我们至此所描述的最灵活的信息分配技术,但它比其他技术在计算和存储上更加密集。我们已经描述的这些信息分配技术的另一个缺陷是没有一种技术是位置特定的。换句话说,没有一种信息分配技术提供了在不同的调用位置以不同的方式处理信息分配的灵活性。因此,需要有在速度和计算机代码大小上都为高效的位置特定的信息分配。此外,还需要有灵活的并且可以适应面向对象的程序的执行的位置特定的信息分配。本专利技术的实施例提供了在速度和计算机代码大小上都为高效的有创造性的位置特定的信息分配技术。通过提供位置特定的信息分配技术,可以为每个信息分配位置提供最优化的信息分配。因此,不是试图寻求一种对所有位置都有效的信息分配技术,而是可以将该技术调节到更好地适应特定的位置。下面描述本专利技术的几个实施例。在一个实施例中,本专利技术提供了一种在一个面向对象的环境中实现信息分配的方法。在一个信息被分配到一个接收器对象的位置处保存一个预测的接收器类型。然后将信息发送给该接收器对象。一旦接收器对象接收到该信息,则确认此接收器对象的类型是保存的预测接收器类型。一般地,用一个在信息分配指令之前的传送指令将预测的接收器类型保存在一个寄存器中。在另一个实施例中,本专利技术提供了一种在一个面向对象的环境中实现信息分配的方法。在一个信息被分配到一个接收器对象的位置处保存一个预测的接收器类型。然后将信息发送给该接收器对象。一旦接收器对象接收到该信息,则确认该接收器对象的类型是保存的预测接收器类型。如果该接收器对象不是保存的预测接收器类型,则将预测接收器类型变为该接收器对象的类型,调用一个方法查看程序来获得新方法,并且改变位置以调用该新方法。在另一个实施例中,本专利技术提供了一种为一个面向对象的程序实现信息分配的方法。在一个特定位置执行第一信息分配技术,以便向接收器对象分配信息。在程序执行期间,动态地确定在该特定位置是否需要第二信息分配技术。如果需要第二信息分配本文档来自技高网...

【技术保护点】
在一个计算机系统中,一种在一个面向对象的环境中实现信息分配的方法,包括:在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型;将信息发送给接收器对象;以及在接收器对象接收到信息时,确认该接收器对象是保存的预测接收器类型 。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:R格里瑟梅尔U赫尔茨勒
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1