CN1233797A - 在面向对象的系统中的位置特定的信息分配 - Google Patents
在面向对象的系统中的位置特定的信息分配 Download PDFInfo
- Publication number
- CN1233797A CN1233797A CN98124353A CN98124353A CN1233797A CN 1233797 A CN1233797 A CN 1233797A CN 98124353 A CN98124353 A CN 98124353A CN 98124353 A CN98124353 A CN 98124353A CN 1233797 A CN1233797 A CN 1233797A
- Authority
- CN
- China
- Prior art keywords
- receiver
- types
- information distribution
- information
- prediction
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 175
- 238000005516 engineering process Methods 0.000 claims description 67
- 230000008859 change Effects 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004321 preservation Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 15
- 230000008569 process Effects 0.000 description 13
- 238000012545 processing Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 6
- 230000008520 organization Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241001673391 Entandrophragma candollei Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising based on receiver type
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Abstract
这里提供了用于在一个面向对象的环境中实现位置特定的信息分配的系统和方法。将接收器类型信息保存在一个信息分配位置,以便提供位置特定的信息分配。通过允许信息分配可以在不同的调用位置变化,面向对象的系统会变得更为有效和灵活。
Description
本发明涉及在面向对象的系统中的信息分配。特别地,本发明涉及用于JavaTM虚拟机的位置特定信息分配技术。
面向对象的语言的基本思想是将数据和在数据上运算的方法(或函数)组合为一个称之为对象的单独的单元。一个对象的函数一般提供唯一的方式来访问被该对象所封装的数据。通过向对象发送一个信息、指示对象调用由该信息所指定的方法,来访问数据。
在面向对象的语言中,有效的信息分配是至关重要的。这是因为信息分配是面向对象程序中一项频率很高的操作,并且是在运行时执行的;因此,应使其尽可能地快。然而,信息分配远不是一个微不足道的操作。与在运行之前就可以确定一个函数的地址的过程程序设计语言(例如,C程序设计语言)不同,面向对象的语言必须在运行时确定处理已经被分配给接收器对象的信息的方法,并且可能要进行大范围的搜索。
为了更好地理解信息分配的复杂性,图1显示了一个包括每一类方法的类分级结构。类分级结构1在其根部包括一个定义了两个虚拟函数foo()和bar()的父类A3。虚拟函数是可以在父类中定义并在子类中重新定义的函数。类B5和类C7继承父类A的数据和方法。如图所示,类B并没有重新定义虚拟函数foo和bar中的任一个。但类C重新定义了虚拟函数foo。当类C的对象被请求调用方法foo时,调用的方法将是由类C定义的方法,而不是由父类A定义的方法。类D9和E11也重新定义了方法foo。
由于通常不可能静态地确定一个对象的类,所以在信息分配期间,在运行时执行对正确方法的搜索。有许多已知的技术用于实现方法分配。例如,图2显示了一内联高速缓存。假定方法51最初如下所示:
main() { … x.foo(); <dp n="d1"/> … }
因此,该方法主要包括语句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中所指定的方法。否则,调用一个方法查找程序以找到正确的方法。一般地,然后将这个新方法加到散列表中。
虽然散列法是我们至此所描述的最灵活的信息分配技术,但它比其他技术在计算和存储上更加密集。我们已经描述的这些信息分配技术的另一个缺陷是没有一种技术是位置特定的。换句话说,没有一种信息分配技术提供了在不同的调用位置以不同的方式处理信息分配的灵活性。
因此,需要有在速度和计算机代码大小上都为高效的位置特定的信息分配。此外,还需要有灵活的并且可以适应面向对象的程序的执行的位置特定的信息分配。
本发明的实施例提供了在速度和计算机代码大小上都为高效的有创造性的位置特定的信息分配技术。通过提供位置特定的信息分配技术,可以为每个信息分配位置提供最优化的信息分配。因此,不是试图寻求一种对所有位置都有效的信息分配技术,而是可以将该技术调节到更好地适应特定的位置。下面描述本发明的几个实施例。
在一个实施例中,本发明提供了一种在一个面向对象的环境中实现信息分配的方法。在一个信息被分配到一个接收器对象的位置处保存一个预测的接收器类型。然后将信息发送给该接收器对象。一旦接收器对象接收到该信息,则确认此接收器对象的类型是保存的预测接收器类型。一般地,用一个在信息分配指令之前的传送指令将预测的接收器类型保存在一个寄存器中。
在另一个实施例中,本发明提供了一种在一个面向对象的环境中实现信息分配的方法。在一个信息被分配到一个接收器对象的位置处保存一个预测的接收器类型。然后将信息发送给该接收器对象。一旦接收器对象接收到该信息,则确认该接收器对象的类型是保存的预测接收器类型。如果该接收器对象不是保存的预测接收器类型,则将预测接收器类型变为该接收器对象的类型,调用一个方法查看程序来获得新方法,并且改变位置以调用该新方法。
在另一个实施例中,本发明提供了一种为一个面向对象的程序实现信息分配的方法。在一个特定位置执行第一信息分配技术,以便向接收器对象分配信息。在程序执行期间,动态地确定在该特定位置是否需要第二信息分配技术。如果需要第二信息分配技术,则在该特定位置执行第二信息分配技术,以便向接收器对象分配信息。在最佳实施例中,如果在特定位置已将信息分配到多于预定数目的不同接收器类型,则确定需要第二信息分配技术。
通过下面参考附图对本发明的详细说明,本发明的其他特征和优点将变得更加明显。
图1显示了在一个面向对象的环境中的包括虚拟函数的类的类分级结构。
图2显示了用于面向对象的信息分配的内联高速缓存技术。
图3显示了用于面向对象的信息分配的多形内联高速缓存技术。
图4显示了用于面向对象的信息分配的散列法技术。
图5显示了可以用于执行本发明的一个实施例的软件的计算机系统的一个例子。
图6显示了图5中计算机系统的系统方框图。
图7显示了一个Java源代码程序是如何执行的。
图8显示了用于面向对象的信息分配的位置特定内联高速缓存技术的一个实施例。
图9显示了用于面向对象的信息分配的位置特定内联高速缓存技术的一个实施例的高级流程图。
图10显示了位置特定信息分配技术的一个实施例的高级流程图。
图11显示了动态地确定在一个特定位置是否需要另一个信息分配技术的流程图。
图12显示了应用NOP指令对遇到的不同接收器类型的数目计数的位置特定信息分配技术的一个实施例。
定义
函数-一个软件程序(也被称为子程序、过程、成员函数和方法)。
信息分配-一个确定处理已经被发送给在面向对象的环境中的对象的方法的过程。
接收器对象(或接收程序)-在一个面向对象的环境中的信息所发送到的对象。
接收器类型-接收器对象所属的类。
调用位置(或位置)-在一个程序中将信息分配到一个对象的位置或区域。
概述
在下面的说明中,将参考为一个JavaTM虚拟机设计的最佳实施例说明本发明。特别地,将说明针对IBM个人计算机的例子。但本发明并不限于任何特定的语言、计算机结构或专用工具。因此,下面对实施例的说明是出于例示的目的,而不是为了限制。
图5显示了可以用于执行本发明的一个实施例的软件的计算机系统的一个例子。图5显示的计算机系统301包括显示器303、屏幕305、机箱307、键盘309和鼠标311。鼠标311可以具有一个或多个与图形用户界面交互的按钮。机箱307罩盖着一个CD-ROM驱动器313、系统存储器和一个硬盘驱动器(参看图6),该硬盘驱动器可以用于存储和检索包含实现本发明的计算机代码、本发明使用的数据等的软件程序。虽然CD-ROM315在这里显示为一个典型的计算机可读存储介质,也可以使用其他的计算机可读介质,包括软盘、磁带、闪速存储器、系统存储器和硬盘驱动器。另外,在载波中(例如,在一个网络例如因特网中)包含的数据信号也可以是计算机可读存储介质。
图6显示了用于执行本发明的一个实施例的软件的计算机系统301的系统方框图。与在图5中一样,计算机系统301包括监视器303、键盘309和鼠标311。计算机系统301还包括子系统,例如中央处理器351、系统存储器353、固定存储器355(例如硬盘驱动器)、可移动存储器57(例如CD-ROM驱动器)、显示适配器359、声卡361、扬声器363、以及网络接口365。其他适于本发明使用的计算机系统可以包括更多或更少的子系统。例如,另一个计算机系统包括不止一个处理器351(即,一个多处理器系统)或一个高速缓存。
计算机系统301的系统总线结构由箭头367表示。然而,这些箭头只是显示用于连接子系统的任一种互连方案。例如,可以应用一个本地总线将中央处理器连到系统存储器和显示适配器。图6中显示的计算机系统301只是一个适于本发明使用的计算机系统的例子。也可以使用其他具有不同的子系统结构的计算机结构。
JavaTM程序设计语言是由Sun Microsystems开发的。一般将以Java程序设计语言编写的计算机程序编译成可以由一个Java虚拟机执行的字节代码或Java虚拟机指令。字节代码存储在输入给Java虚拟机的类文件中用于解释。图7显示了由解释程序(interpreter)、即Java虚拟机执行一段简单Java源代码的过程。
Java源代码401包括用Java编写的典型的Hello World程序。然后将源代码输入到一个将源代码编译成字节代码的字节代码编译器403。当这些字节代码将由一个软件仿真计算机来执行时,它们是虚拟机指令。一般地,虚拟机指令是通用的(即,不是为任何专门的微计算机或计算机结构而设计的),但这不是必须的。字节代码编译器输出一个包括Java程序的字节代码的Java类文件405。
将Java类文件输入Java虚拟机407。Java虚拟机是解码并执行Java类文件中的字节代码的解释程序。Java虚拟机是一个解释程序,但由于它以软件来仿真微计算机或计算机结构(例如,微计算机或计算机结构可以不存在于硬件中),所以通常称之为虚拟机。为了提高Java虚拟机的执行速度,方法可以被编译成本机指令,以便更快地执行。在下面对最佳实施例的说明中,将用编译来表示将Java虚拟机指令翻译为本机指令的过程。
本发明提供了一种用于实现在面向对象环境中的信息分配的位置特定的内联高速缓存技术。接收器类型信息存储在调用位置,这样允许每个调用位置可以根据调用位置的运行特性而改变。这不仅使得信息分配更为有效,而且更为灵活。
图8显示了依据本发明的一个实施例的位置特定的内联高速缓存技术。如同上面在发明背景技术中所描述的,方法51最初包括一个用于分配的信息x.foo()。当此信息第一次被分配时,系统可以调用一个方法查找程序来确定合适的处理该信息的方法的位置。或者,系统可以在运行之前执行一个静态分析,以便确定哪一个有可能是正确的方法。
一旦应用一个位置特定的内联高速缓存确定了将要处理信息的对象的类,则在调用位置产生一个指令来存储接收器类型或类。然后用一个对要处理该信息的特定方法的调用来重写信息分配。于是,信息分配变成两条指令,一个存储接收器类型,另一个调用合适的方法。
如图所示,方法451包括将类A的一个id存储进一个专用寄存器的移动指令。该寄存器被称为一个专用寄存器仅仅出于识别的目的。重要的是如果使用一个寄存器,那么在别的情况下在这个调用位置则不能使用该寄存器。尽管使用寄存器可以提供最高效的执行速度,但也可以使用其他的存储装置。例如,接收器类型可以存储在系统存储器中,或者作为一个参数传送给信息处理方法。
一旦存储了接收器类型,进行一个到处理表示为A::foo()的信息的方法453的调用。序言455检验对象x是否是从专用寄存器检索出的存储的接收器类型。在显示的例子中,类A是存储的接收器类型。因此,如果对象x是属于类A的,则跳转到A::foo()的方法代码457。否则,调用方法查找程序来找出合适的方法处理该信息。然后,可以更新调用位置,以保存对象x的接收器类型和对由方法查找程序找到的方法的调用。
因此,存储在调用位置的接收器类型是预测的接收器类型。正是系统预测的接收器类型将会是下一个接收信息的对象的接收器类型。如果预测的接收器类型与对象的接收器类型相匹配,则信息分配更加有效。另外,每个信息分配位置具有特定于该调用位置的存储的接收器类型信息,另一个位置将不会重写存储的接收信息。
图9显示了用于信息分配的位置特定的内联高速缓存技术的一个实施例的流程图。在步骤501,在一个信息被分配到一个接收器对象的位置处保存预测的接收器类型。在最佳实施例中,通过应用一个将接收器类型放在寄存器中的移动指令来保存接收器类型。但也可以应用其他的对于本领域普通技术人员来说是公知的保存接收器类型的方法,包括使用系统存储器或参数传递。
在步骤503,将信息发送给接收器对象。该信息是由一个对处理该信息的方法的直接调用来发送,而不是应用一个方法查找程序。
一旦接收器对象接收了该信息,则在步骤505确认接收器对象是保存的预测接收器类型。在最佳实施例中,这种确认是在方法的序言中执行的(参见图8)。在步骤507,如果接收器对象是与保存的预测接收器类型相同的类型,则在步骤509执行处理该信息的方法。步骤509可以包括执行到处理该信息的方法代码的开始的跳转。
如果接收器对象不是与保存的预测接收器类型相同的类型,则在步骤511将在调用位置的预测接收器类型变为接收器对象的接收器类型。在步骤513调用方法查找程序以获得一个新的方法。所采用的方法查找程序可以是任何对本领域普通技术人员来说是公知的查找程序,包括分配表检索和虚拟函数表。方法查找程序提供出合适的方法来处理该信息。然后在步骤515将在调用位置的信息分配改变到由方法查找程序返回的方法。
举例来说,假设在图8中,对象x属于类A,则存储在方法451的调用位置的预测接收器类型属于类A。但是,如果对象x接着是属于类B的,则序言455可以修改移动指令,以便将类B作为预测接收器类型存储在专用寄存器中。另外,将修改信息分配,以调用由方法查找程序返回的方法。从而将更有效地分配在该调用位置的针对一个类B的接收器对象的后续的信息分配。
在图9中,在改变在该位置的方法的步骤515之后,执行该方法。执行该方法的步骤实际上可以在步骤513或其他位置就开始。因此,在所示的流程图中,可以根据不偏离本发明的精神的特定实施重新安排、增加和删除步骤。
如上所述,提供了一种位置特定的内联高速缓存技术,该技术在一个调用位置保存预测的接收器类型。通过在调用位置保存预测的接收器类型,信息分配变得更为有效,并且更为灵活。例如,在每个调用位置的操作可以相互隔离,以使得一个调用位置不会改变另一个调用位置的设置。
位置特定的信息分配
本发明提供了一种位置特定的信息分配技术,能够灵活地允许在每个位置应用不同的信息分配技术。另外,在一个调用位置应用的信息分配技术可以在运行时随时间改变。一旦确定在一个特定位置需要一个新的或不同的信息分配技术,则为在该特定调用位置的使用设置新的信息分配技术。于是,信息分配不仅在调用位置上变得更加灵活,在程序执行期间的不同时间的调用时应用的信息分配技术上也变得更加灵活。
图10显示了位置特定的信息分配的一个实施例的高级流程图。在步骤511,在一个专用信息分配位置执行一第一信息分配技术。第一信息分配技术可以是现有技术中已知的任何一种信息分配技术。第一信息分配技术最好是依据本发明的一种技术。例如,第一信息分配技术可以是上面所说的位置特定的内联高速缓存的一个实施例。第一信息分配技术可以在运行之前静态地确定,也可以在运行期间动态地确定。
在步骤553,系统在运行期间动态地确定在该特定位置是否需要一第二信息分配技术。可以应用任何方法来确定第二信息分配技术时所需要的。例如,一旦在该调用位置遇到的不同接收器类型的数目超过了一个阈值,则需要转向一个不同的信息分配技术。另外,可以计算方法查找程序被调用的频率,如果此频率过高,则有必要使用一个新的信息分配。
总之,一旦确定需要一第二信息分配技术,则在步骤555在该特定位置执行第二信息分配技术。用于切换到新的信息分配技术的方法一般取决于该新技术本身。既然已经描述了高级流程,下面将更加详细地讨论动态地确定是否需要一第二信息分配技术的步骤的一个实施例。
图11显示了动态地确定是否需要一第二信息分配技术的一个实施例。第一和第二信息分配技术的标记表示为在一个特定调用位置一个信息分配技术可以切换到另一个的通用的指示。然而,本发明并不仅限于两种技术,也可以有利地运用到三个或更多的技术上。因此,第一和第二的标记并不是本发明仅限于两种信息分配技术的指示。
在图11中所示的实施例依赖于在一个特定调用位置遇到的不同接收器类型的数目,将其作为何时应该改变信息分配的一个指示。例如,可以将一个位置特定的内联高速缓存一直使用到在该调用位置遇到了五个不同的接收器类型。当在该上下文中使用了不同的接收器类型时,这意味着已经有五个预测接收器类型与实际的接收器类型不同的实例。这将意味着方法查找程序已经被调用了大约五次,存储在调用位置的预测接收器类型已经改变。例如,在类A和B的接收器对象之间变换五次的调用位置可以被计为五个不同的接收器类型。
虽然在每个调用位置可以使用一个专用的接收器类型计数器,但这需要使用存储器和计算机代码来保持计数器。在最佳实施例中,在处理该信息的方法之前将计数器实施为多个空操作(NOP)指令。如同下面将参考图12要详细说明的,在方法之前实施的NOP指令数表示已经遇到的不同接收器类型的数目。
参考图11,该流程图假设方法查找程序已经被调用,否则,更有可能的是,当前的信息分配技术正在有效地执行。在步骤601,系统将信息分配到在处理该信息的方法之前的NOP指令。系统通过确定在方法之前执行了多少个NOP指令来对不同接收器类型的数目进行计数。一般地,通过从包括任何序言的实际方法的地址中减去为该位置将信息分配到的地址来确定该计数值。
在步骤605,将计数值与一预定数进行比较。预定数是在需要切换到一个不同的信息分配计数之前在一个调用位置可以遇到的不同接收器类型的数目。预定数可以被静态地确定或在运行期间动态地计算出来。
在步骤607,如果计数值比预定数大,则在步骤609切换到第二信息分配技术。如果计数值小于或等于预定数,这表明在目前还不需要切换到第二信息分配技术。一个例子将有助于显示NOP指令是如何被用作为一个计数器的。
图12显示了NOP指令是如何被用作为一个在一个特定调用位置已经遇到的不同接收器类型的数目的计数器的。如前所述,所显示的方法651带有一个位置特定的内联高速缓存。方法653处理该信息,但是,在方法之前有一个具有多个NOP指令的NOP部分655。可以将NOP指令选择为不作任何处理并且不会特别影响方法的操作速度。在其他的实施例中也可以采用其他的指令来代替NOP指令。
NOP部分655在方法653的序言657和方法代码659之前。NOP部分由预定数目的NOP指令组成,一般是与在到一个不同的信息分配技术的切换被启动之前在一个调用位置遇到的不同接收器类型的数目相同的数目。每次在序言657调用方法查找程序时,用对象x的接收器类型修正移动指令。此外,将后续的信息分配(例如,A::foo())改变到在由方法查找程序找到的新方法的NOP部分655中的NOP指令中的一个。
如图所示,信息分配指向在方法653之前的第三个NOP指令。如果序言657确定对象x不是类A,则序言计算在调用位置的特定地址和方法653的开始之间的差别,这可以在运行期间由多种已知方法来得到。该差别或计数值表示在该特定调用位置已经遇到的不同接收器类型的数目。如果计数值大于一预定数,则序言657可以切换在该调用位置使用的信息分配技术。
在一个方法之前采用NOP指令容易实施、快捷,并且不需要过多的计算机代码来保持计数器。此外,在NOP部分655中的NOP指令可以由多个不同的调用位置来引用而不会相互影响。
第一信息分配技术被显示为位置特定的内联高速缓存。第二信息分配技术可以是多形内联高速缓存或散列技术,其中每个技术都是用来处理多个接收器类型的。当然,在可以用于本发明的信息分配技术上并没有限制。这里已经描述了特定的信息分配技术以帮助读者理解。
如上所述,提供了一种位置特定的信息分配技术,在认为需要时允许在一个特定调用位置使用一个新的信息分配技术。通过允许每个调用位置在需要时切换信息调用技术,信息调用可以变得更为有效和灵活。此外,在每个调用位置的操作可以彼此隔离,以使得一个调用位置不会改变另一个调用位置的设置。
结论
虽然上面对本发明的最佳实施例作了充分地说明,但也可以应用其改变、修改和替代。可以证明,通过对上述的实施例作适当的修改,同样也可以实现本发明。例如,可以有用地将位置特定的信息分配技术运用到面向对象的语言上而不会偏离本发明的精神。因此,不应该将上面的说明看作为对本发明的范围的限制,本发明的范围应视附带的权利要求而定。
Claims (29)
1.在一个计算机系统中,一种在一个面向对象的环境中实现信息分配的方法,包括:
在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型;
将信息发送给接收器对象;以及
在接收器对象接收到信息时,确认该接收器对象是保存的预测接收器类型。
2.如权利要求1所述的方法,其特征在于:保存一个预测接收器类型包括将预测的接收器类型存储进一个寄存器。
3.如权利要求2所述的方法,其特征在于:在信息被分配的位置之前应用一个移动指令将预测接收器类型存储进该存储器。
4.如权利要求1所述的方法,其特征在于:保存一个预测接收器类型包括将预测的接收器类型存储进一个存储器单元。
5.如权利要求1所述的方法,其特征在于:保存一个预测接收器类型包括将预测的接收器类型作为信息的一个参数传递给接收器对象。
6.如前面任何一个权利要求所述的方法,还包括:如果接收器对象不是所保存的预测接收器类型,则将预测接收器类型改变为接收器对象的类型。
7.如前面任何一个权利要求所述的方法,还包括:调用一个方法查找程序,来从方法查找程序中获得一个新的方法。
8.如权利要求7所述的方法,还包括:改变位置以调用新方法。
9.如前面任何一个权利要求所述的方法,其特征在于:确认接收器对象包括:
获得接收器对象的接收器类型;以及
将接收器对象的接收器类型与保存的预测接收器类型进行比较。
10.如权利要求9所述的方法,还包括:如果接收器类型与保存的预测接收器类型不相同,则将预测接收器类型改变为接收器对象的接收器类型。
11.如权利要求9和10中的任何一个所述的方法,还包括:如果接收器对象的接收器类型与保存的预测接收器类型不相同,则调用一方法查找程序。
12.如权利要求11所述的方法,还包括:从方法查找程序中获得一个新方法。
13.如权利要求12所述的方法,还包括:改变位置以调用新方法。
14.一种在一个面向对象的环境中实现信息分配的计算机程序产品,包括:
在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型的计算机代码;
将信息发送给接收器对象的计算机代码;
在接收器对象接收到信息时确认该接收器对象是保存的预测接收器类型的计算机代码;以及
一个存储计算机代码的计算机可读介质。
15.如权利要求14所述的计算机程序产品,其特征在于:计算机可读介质是从包括CD-ROM、软盘、磁带、闪速存储器、系统存储器、硬盘驱动器、以及包含在一个载波中的数据信号的组中选择出来的。
16.一个在一个面向对象的环境中实现信息分配的计算机系统,包括:
执行计算机代码的处理器;
在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型的计算机代码;
将信息发送给接收器对象的计算机代码;
在接收器对象接收到信息时确认该接收器对象是保存的预测接收器类型的计算机代码;以及
一个为处理器存储计算机代码用于执行的计算机可读介质。
17.在一个计算机系统中,一种在一个面向对象的环境中实现信息分配的方法,包括:
在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型;
将信息发送给接收器对象;
在接收器对象接收到信息时,确认该接收器对象是保存的预测接收器类型;
如果接收器对象不是所保存的预测接收器类型,则将预测接收器类型改变为接收器对象的类型;
如果接收器对象不是所保存的预测接收器类型,调用一个方法查找程序,来获得一个新的方法;以及
改变位置以调用新方法。
18.如权利要求17所述的方法,其特征在于:保存一个预测接收器类型包括下列选择之一:将预测的接收器类型移进一个寄存器,将预测的接收器类型存储进一个寄存器,以及将预测的接收器类型作为信息的一个参数传递给接收器对象。
19.如权利要求17和18中的任何一个所述的方法,其特征在于:确认接收器对象包括:
获得接收器对象的接收器类型;以及
将接收器对象的接收器类型与保存的预测接收器类型进行比较。
20.一种在一个面向对象的环境中实现信息分配的计算机程序产品,包括:
在一个信息被分配到一个接收器对象的位置处保存一个预测接收器类型的计算机代码;
将信息发送给接收器对象的计算机代码;
在接收器对象接收到信息时确认该接收器对象是保存的预测接收器类型的计算机代码;
如果接收器对象不是所保存的预测接收器类型则将预测接收器类型改变为接收器对象的类型的计算机代码;
如果接收器对象不是所保存的预测接收器类型则调用一个方法查找程序来获得一个新方法的计算机代码;以及
改变位置以调用新方法的计算机代码;以及
一个存储计算机代码的计算机可读介质。
21.如权利要求20所述的计算机程序产品,其特征在于:计算机可读介质是从包括CD-ROM、软盘、磁带、闪速存储器、系统存储器、硬盘驱动器、以及包含在一个载波中的数据信号的组中选择出来的。
22.一个在一个面向对象的环境中实现信息分配的计算机系统,包括:
执行计算机代码的处理器;
在一个信息被分配到一个接收器对象的位置保存一个预测接收器类型的计算机代码;
将信息发送给接收器对象的计算机代码;
在接收器对象接收到信息时确认该接收器对象是保存的预测接收器类型的计算机代码;
如果接收器对象不是所保存的预测接收器类型则将预测接收器类型改变为接收器对象的类型的计算机代码;
如果接收器对象不是所保存的预测接收器类型则调用一个方法查找程序来获得一个新方法的计算机代码;
改变位置以调用新方法的计算机代码;以及
一个为处理器存储计算机代码用于执行的计算机可读介质。
23.在一个计算机系统中,一种为一个面向对象的程序实现信息分配的方法,包括:
在一特定位置执行一第一信息分配技术,以便将信息分配到接收器对象;
在程序执行期间动态地确定在该特定位置是否需要一第二信息分配技术;以及
如果需要第二信息分配技术,则在该特定位置执行第二信息分配技术,以便将信息分配到接收器对象。
24.如权利要求23所述的方法,其特征在于:在程序执行期间确定是否需要一第二信息分配技术包括确定该特定位置是否已经将信息分配到多于一第一预定数目的不同接收器类型。
25.如权利要求24所述的方法,还包括,保持第一分配技术已将信息分配到的不同接收器类型的计数。
26.如权利要求23-25中的任何一个所述的方法,其特征在于:第一信息分配技术在程序执行之前被静态地确定。
27.如权利要求23-25中的任何一个所述的方法,其特征在于:第一信息分配技术是内联高速缓存。
28.如权利要求23-27中的任何一个所述的方法,其特征在于:第二信息分配技术是从多形内联高速缓存和散列法中选择的。
29.一个为一个面向对象的程序实现信息分配的计算机系统,包括:
执行计算机代码的处理器;
在一特定位置执行一第一信息分配技术以便将信息分配到接收器对象的计算机代码;
在程序执行期间动态地确定在该特定位置是否需要一第二信息分配技术的计算机代码;以及
如果需要第二信息分配技术则在该特定位置接着执行第二信息分配技术、以便将信息分配到接收器对象的计算机代码;以及
一个为处理器存储计算机代码用于执行的计算机可读介质。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/944,331 US6385660B2 (en) | 1997-10-06 | 1997-10-06 | Site specific message dispatch in object-oriented systems |
US944331 | 1997-10-06 | ||
US944,331 | 1997-10-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1233797A true CN1233797A (zh) | 1999-11-03 |
CN1105968C CN1105968C (zh) | 2003-04-16 |
Family
ID=25481206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN98124353A Expired - Fee Related CN1105968C (zh) | 1997-10-06 | 1998-10-05 | 用于在面向对象的系统中的位置特定的信息分配的计算机系统和方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6385660B2 (zh) |
EP (1) | EP0908814B1 (zh) |
JP (1) | JPH11272468A (zh) |
KR (1) | KR19990037014A (zh) |
CN (1) | CN1105968C (zh) |
DE (1) | DE69805728T2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464401B (zh) * | 2002-06-28 | 2010-05-26 | 国际商业机器公司 | 使用影子对象进行核准控制的面向对象系统和方法 |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
US7966234B1 (en) | 1999-05-17 | 2011-06-21 | Jpmorgan Chase Bank. N.A. | Structured finance performance analytics system |
US7234146B1 (en) * | 1999-07-30 | 2007-06-19 | International Business Machines Corporation | Object in, object out technique |
US7249095B2 (en) | 2000-06-07 | 2007-07-24 | The Chase Manhattan Bank, N.A. | System and method for executing deposit transactions over the internet |
US6779188B1 (en) * | 2000-09-28 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for improved devirtualization of method calls |
US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
US6799262B1 (en) | 2000-09-28 | 2004-09-28 | International Business Machines Corporation | Apparatus and method for creating instruction groups for explicity parallel architectures |
US6886094B1 (en) | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
US6779106B1 (en) | 2000-09-28 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for an enhanced integer divide in an IA64 architecture |
US7313541B2 (en) | 2000-11-03 | 2007-12-25 | Jpmorgan Chase Bank, N.A. | System and method for estimating conduit liquidity requirements in asset backed commercial paper |
US7984147B2 (en) * | 2000-12-29 | 2011-07-19 | Hewlett-Packard Development Company, L.P. | Apparatus and method for identifying a requested level of service for a transaction |
US7596526B2 (en) * | 2001-04-16 | 2009-09-29 | Jpmorgan Chase Bank, N.A. | System and method for managing a series of overnight financing trades |
DE10131944A1 (de) * | 2001-07-02 | 2003-01-16 | Siemens Ag | Verfahren zur Verarbeitung von Daten |
US8224723B2 (en) | 2002-05-31 | 2012-07-17 | Jpmorgan Chase Bank, N.A. | Account opening system, method and computer program product |
US20050044033A1 (en) * | 2003-01-10 | 2005-02-24 | Gelson Andrew F. | Like-kind exchange method |
US20040148247A1 (en) * | 2003-01-24 | 2004-07-29 | Lawrence Miller | Network-based systems, methods, and software for initiating or executing financial transactions |
US7634435B2 (en) * | 2003-05-13 | 2009-12-15 | Jp Morgan Chase Bank | Diversified fixed income product and method for creating and marketing same |
US7770184B2 (en) * | 2003-06-06 | 2010-08-03 | Jp Morgan Chase Bank | Integrated trading platform architecture |
US20050015324A1 (en) * | 2003-07-15 | 2005-01-20 | Jacob Mathews | Systems and methods for trading financial instruments across different types of trading platforms |
US7970688B2 (en) * | 2003-07-29 | 2011-06-28 | Jp Morgan Chase Bank | Method for pricing a trade |
US20050060256A1 (en) * | 2003-09-12 | 2005-03-17 | Andrew Peterson | Foreign exchange trading interface |
US20050222937A1 (en) * | 2004-03-31 | 2005-10-06 | Coad Edward J | Automated customer exchange |
US8423447B2 (en) * | 2004-03-31 | 2013-04-16 | Jp Morgan Chase Bank | System and method for allocating nominal and cash amounts to trades in a netted trade |
US20050251478A1 (en) * | 2004-05-04 | 2005-11-10 | Aura Yanavi | Investment and method for hedging operational risk associated with business events of another |
US7693770B2 (en) | 2004-08-06 | 2010-04-06 | Jp Morgan Chase & Co. | Method and system for creating and marketing employee stock option mirror image warrants |
US20090164384A1 (en) * | 2005-02-09 | 2009-06-25 | Hellen Patrick J | Investment structure and method for reducing risk associated with withdrawals from an investment |
US8688569B1 (en) | 2005-03-23 | 2014-04-01 | Jpmorgan Chase Bank, N.A. | System and method for post closing and custody services |
US20060242654A1 (en) * | 2005-04-22 | 2006-10-26 | Lund Kasper V | Process and apparatus for sharing inline caches |
US20090187512A1 (en) * | 2005-05-31 | 2009-07-23 | Jp Morgan Chase Bank | Asset-backed investment instrument and related methods |
US7822682B2 (en) | 2005-06-08 | 2010-10-26 | Jpmorgan Chase Bank, N.A. | System and method for enhancing supply chain transactions |
US20110035306A1 (en) * | 2005-06-20 | 2011-02-10 | Jpmorgan Chase Bank, N.A. | System and method for buying and selling securities |
US7567928B1 (en) | 2005-09-12 | 2009-07-28 | Jpmorgan Chase Bank, N.A. | Total fair value swap |
US7818238B1 (en) | 2005-10-11 | 2010-10-19 | Jpmorgan Chase Bank, N.A. | Upside forward with early funding provision |
US8280794B1 (en) | 2006-02-03 | 2012-10-02 | Jpmorgan Chase Bank, National Association | Price earnings derivative financial product |
US8291395B2 (en) * | 2006-03-31 | 2012-10-16 | Apple Inc. | Fast function call dispatching |
US7620578B1 (en) | 2006-05-01 | 2009-11-17 | Jpmorgan Chase Bank, N.A. | Volatility derivative financial product |
US7647268B1 (en) | 2006-05-04 | 2010-01-12 | Jpmorgan Chase Bank, N.A. | System and method for implementing a recurrent bidding process |
US9811868B1 (en) | 2006-08-29 | 2017-11-07 | Jpmorgan Chase Bank, N.A. | Systems and methods for integrating a deal process |
US7827096B1 (en) | 2006-11-03 | 2010-11-02 | Jp Morgan Chase Bank, N.A. | Special maturity ASR recalculated timing |
US8307379B2 (en) | 2006-12-21 | 2012-11-06 | International Business Machines Corporation | Determining an extension to use to process an input object to a call in a program |
US8738514B2 (en) | 2010-02-18 | 2014-05-27 | Jpmorgan Chase Bank, N.A. | System and method for providing borrow coverage services to short sell securities |
US8352354B2 (en) | 2010-02-23 | 2013-01-08 | Jpmorgan Chase Bank, N.A. | System and method for optimizing order execution |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5297284A (en) | 1991-04-09 | 1994-03-22 | Microsoft Corporation | Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language |
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 |
US5404525A (en) | 1992-09-30 | 1995-04-04 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
US5442793A (en) | 1993-02-26 | 1995-08-15 | Microsoft Corporation | Method and system for locating an inherited virtual function member of a derived class |
US5485617A (en) | 1993-12-13 | 1996-01-16 | Microsoft Corporation | Method and system for dynamically generating object connections |
US5522071A (en) * | 1994-01-18 | 1996-05-28 | Sybase, Inc. | Run-time message redirection for invoking object oriented methods based on alternate dispatch variable |
US5600838A (en) * | 1994-01-18 | 1997-02-04 | Sybase, Inc. | Object oriented dispatch and supercall process and arrangement |
US5581697A (en) * | 1994-01-28 | 1996-12-03 | Sun Microsystems, Inc. | Method and apparatus for run-time error checking using dynamic patching |
US5682532A (en) | 1994-05-02 | 1997-10-28 | Microsoft Corporation | System and method having programmable containers with functionality for managing objects |
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 |
JPH09282167A (ja) * | 1996-04-10 | 1997-10-31 | Internatl Business Mach Corp <Ibm> | メソッド起動方法及びメソッド起動制御装置 |
US5960197A (en) * | 1996-05-09 | 1999-09-28 | Sun Microsystems, Inc. | Compiler dispatch function for object-oriented C |
US5884316A (en) | 1996-11-19 | 1999-03-16 | Microsoft Corporation | Implicit session context system with object state cache |
US5907707A (en) | 1997-01-14 | 1999-05-25 | International Business Machines Corporation | Object model for Java |
-
1997
- 1997-10-06 US US08/944,331 patent/US6385660B2/en not_active Expired - Lifetime
-
1998
- 1998-09-24 DE DE69805728T patent/DE69805728T2/de not_active Expired - Lifetime
- 1998-09-24 EP EP98307753A patent/EP0908814B1/en not_active Expired - Lifetime
- 1998-10-05 CN CN98124353A patent/CN1105968C/zh not_active Expired - Fee Related
- 1998-10-06 JP JP10319741A patent/JPH11272468A/ja active Pending
- 1998-10-07 KR KR1019980042466A patent/KR19990037014A/ko active IP Right Grant
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464401B (zh) * | 2002-06-28 | 2010-05-26 | 国际商业机器公司 | 使用影子对象进行核准控制的面向对象系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
JPH11272468A (ja) | 1999-10-08 |
EP0908814A1 (en) | 1999-04-14 |
KR19990037014A (ko) | 1999-05-25 |
US6385660B2 (en) | 2002-05-07 |
EP0908814B1 (en) | 2002-06-05 |
DE69805728D1 (de) | 2002-07-11 |
US20010011306A1 (en) | 2001-08-02 |
CN1105968C (zh) | 2003-04-16 |
DE69805728T2 (de) | 2003-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1105968C (zh) | 用于在面向对象的系统中的位置特定的信息分配的计算机系统和方法 | |
CN1237737A (zh) | 在面向对象系统中用于接收器类型的联机数据库 | |
US7398521B2 (en) | Methods and apparatuses for thread management of multi-threading | |
EP0997816B1 (en) | Method and apparatus for selecting ways to compile at runtime | |
US6240548B1 (en) | Method and apparatus for performing byte-code optimization during pauses | |
US7089272B1 (en) | Specializing write-barriers for objects in a garbage collected heap | |
US7225439B2 (en) | Combining write-barriers within an inner loop with fixed step | |
US6286134B1 (en) | Instruction selection in a multi-platform environment | |
US5742793A (en) | Method and apparatus for dynamic memory management by association of free memory blocks using a binary tree organized in an address and size dependent manner | |
US8453132B2 (en) | System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems | |
US7765527B2 (en) | Per thread buffering for storing profiling data | |
CN1238500A (zh) | 用于进行静态初始化的方法和系统 | |
CN1853165A (zh) | 用于多线程的编译器创建辅助线程的方法和装置 | |
US6865734B2 (en) | Method and apparatus for performing byte-code optimization during pauses | |
CN1468399A (zh) | 使用微代码引擎的java硬件加速器 | |
CN1248742A (zh) | 用于多-线程虚拟机的存储器分配的方法和装置 | |
WO2004077337A2 (en) | Priority-based code cache management | |
CN109154908B (zh) | 具有精确垃圾收集报告的动态大小的局部 | |
CN106445656B (zh) | 一种实现线程本地存储的方法及装置 | |
Ogasawara | An algorithm with constant execution time for dynamic storage allocation | |
US20040186863A1 (en) | Elision of write barriers for stores whose values are in close proximity | |
US7962451B2 (en) | Data gather scatter—redistribution machine | |
JP5051961B2 (ja) | モジュール式ガーベッジコレクタを実現するための方法および装置 | |
US20230367638A1 (en) | Computation and Storage of Object Identity Hash Values | |
JP2005507103A (ja) | Javaヒープを実現するフレームワーク |
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 | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |