CN1237737A - 在面向对象系统中用于接收器类型的联机数据库 - Google Patents

在面向对象系统中用于接收器类型的联机数据库 Download PDF

Info

Publication number
CN1237737A
CN1237737A CN98124629A CN98124629A CN1237737A CN 1237737 A CN1237737 A CN 1237737A CN 98124629 A CN98124629 A CN 98124629A CN 98124629 A CN98124629 A CN 98124629A CN 1237737 A CN1237737 A CN 1237737A
Authority
CN
China
Prior art keywords
information
receiver types
receiver
information distribution
program
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.)
Pending
Application number
CN98124629A
Other languages
English (en)
Inventor
L·巴克
U·赫尔茨勒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1237737A publication Critical patent/CN1237737A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明提供了用于实现在面向对象程序中所使用的信息分配的系统和方法。收集将信息分配到接收器对象的方法的位置处的接收器类型信息。存储该接收器类型信息以用于程序的后续执行。通过存储该接收器类型信息,程序可以不需要再次收集接收器类型信息所以该程序更为有效。另外,可以和接收器类型信息一起存储内联信息。

Description

在面向对象系统中用于接收器类型的联机数据库
本发明涉及增加面向对象程序的执行速度。特别地,本发明涉及在面向对象程序的执行期间使用收集的信息用于后续执行。
面向对象的语言的基本思想是将数据和在数据上运算的方法(或函数)组合为一个称之为对象的单独的单元。一个对象的函数一般提供唯一的方式来访问被该对象所封装的数据。通过向对象发送一个信息、指示对象调用由该信息所指定的方法,来访问数据。
在面向对象的语言中,有效的信息分配是至关重要的。这是因为信息分配是面向对象程序中一项频率很高的操作,并且是在运行时执行的;因此,应使其尽可能地快。然而,信息分配远不是一个微不足道的操作。与在运行之前就可以确定一个函数的地址的过程程序设计语言(例如,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中所指定的方法。否则,调用一个方法查找程序以找到正确的方法。一般地,然后将这个新方法加到散列表中。
虽然散列法是我们至此所描述的最灵活的信息分配技术,但它比其他技术在计算和存储上更加密集。我们已经描述的这些信息分配技术的另一个缺陷是没有一种技术是位置特定的。换句话说,没有一种信息分配技术提供了在不同的调用位置以不同的方式处理信息分配的灵活性。
上述的信息分配技术中没有一个考虑到在后来的程序执行过程中使用被收集的接收器类型的信息。另外,希望在后来的程序执行过程中可以得到内联信息。因此,这里需要能考虑在以后的程序运行中使用被收集的接收器类型和/或内联信息的技术。
本发明的实施例提供了用于在以后的程序执行期间使用收集的接收器类型和/或内联信息的创新技术。通过允许程序利用来自以前执行的信息,该程序可以很快地被最优化而不需要再次收集信息。所以,面向对象程序在它每次运行时会变得越来越有效直到它达到一个稳定的最佳状态。下面将描述本发明的一些实施例。
在一个实施例中,本发明提供了一种用于面向对象程序的实现信息分配的方法。在将信息分配给接收器对象的方法的位置上收集接收器类型信息。然后存储该收集的接收器类型信息以用于后来的程序执行。在一个最佳实施例中,在该方法的解释和编译执行期间中都要收集接收器类型信息。
在另一个实施例中,本发明提供了用于实现面向对象程序的信息分配的方法。在解释期间中,在将信息分配给接收器对象的方法的位置上收集接收器类型信息。该接收器类型信息可以包括每一个不同的接收器类型和到用于将信息从该位置分配到每个不同的接收器类型的位置的一个引用。然后确定希望编译包括将信息分配到接收器对象的位置的方法。当编译该方法时,在被编译的方法中的该位置上包括接收器类型信息。同样,存储该接收器类型信息以用于后来的程序执行。在一些实施例中,在一个多形内联高速缓存中收集接收器类型信息。
在另一个实施例中本发明提供了一种由计算机可读介质存储的数据结构。通过带有嵌套的接收器类型的计算机可读介质至少可以存储一种接收器类型。该嵌套的接收器类型是在一个方法的信息分配位置上被分配信息的接收器类型。在一个最佳实施例中,数据结构被存储在Java类文件的一个属性部分中。
通过下面参考附图对本发明的详细说明,本发明的其他特征和优点将变得更加明显。
图1显示了在一个面向对象的环境中的包括虚拟函数的类的类分级结构。
图2显示了用于面向对象的信息分配的内联高速缓存技术。
图3显示了用于面向对象的信息分配的多形内联高速缓存技术。
图4显示了用于面向对象的信息分配的散列法技术。
图5显示了可以用于执行本发明的一个实施例的软件的计算机系统的一个例子。
图6显示了图5中计算机系统的系统方框图。
图7显示了一个Java源代码程序是如何执行的。
图8显示了用于面向对象的信息分配的位置特定内联高速缓存技术的一个实施例。
图9显示了用于面向对象的信息分配的位置特定内联高速缓存技术的一个实施例的高级流程图。
图10显示了位置特定信息分配技术的一个实施例的高级流程图。
图11显示了动态地确定在一个特定位置是否需要另一个信息分配技术的流程图。
图12显示了应用NOP指令对遇到的不同接收器类型的数目计数的位置特定信息分配技术的一个实施例。
图13示出了被用来存储用于后来的程序执行的接收器类型信息的内联数据库的高级流程图。
图14示出了在用于内联数据库的程序的解释和编译执行过程中收集接收器类型信息的流程图。
图15说明了一种已经被编译从而包括用于面向对象的信息分配的多形内联高速缓存技术的方法。
图16说明了其中在其类别文件的属性部分已经存储了接收器类型信息的Java类别文件。
定义
函数-一个软件程序(也被称为子程序、过程、成员函数和方法)。
信息分配-一个确定处理已经被发送给在面向对象的环境中的对象的方法的过程。
接收器对象(或接收程序)-在一个面向对象的环境中的信息所发送到的对象。
接收器类型-接收器对象所属的类。
调用位置(或位置)-在一个程序中将信息分配到一个对象的位置或区域。
概述
在下面的说明中,将参考为一个JavaTM虚拟机设计的最佳实施例说明本发明。特别地,将说明针对IBM个人计算机的例子。但本发明并不限于任何特定的语言、计算机结构或专用工具。因此,下面对实施例的说明是出于例示的目的,而不是为了限制。
图5显示了可以用于执行本发明的一个实施例的软件的计算机系统的一个例子。图5显示的计算机系统301包括显示器303、屏幕305、机箱307、键盘309和鼠标311。鼠标311可以具有一个或多个与图形用户界面交互的按钮。机箱307罩盖着一个CD-ROM驱动器31 3、系统存储器和一个硬盘驱动器(参看图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指令可以由多个不同的调用位置来引用而不会相互影响。
第一信息分配技术被显示为位置特定的内联高速缓存。第二信息分配技术可以是多形内联高速缓存或散列技术,其中每个技术都是用来处理多个接收器类型的。当然,在可以用于本发明的信息分配技术上并没有限制。这里已经描述了特定的信息分配技术以帮助读者理解。
如上所述,提供了一种位置特定的信息分配技术,在认为需要时允许在一个特定调用位置使用一个新的信息分配技术。通过允许每个调用位置在需要时切换信息调用技术,信息调用可以变得更为有效和灵活。此外,在每个调用位置的操作可以彼此隔离,以使得一个调用位置不会改变另一个调用位置的设置。
内联数据体
本发明提供了存储用于程序的随后执行的接收器类型和/或内联信息的技术。在程序的运行期间收集接收器类型和内联信息,然后存储收集的运行信息以便于后来的程序执行能够得益于所收集的信息而不用再次收集该信息。这样使程序在运行期间可以达到最佳状态并且在随后的程序运行过程中很快地返回到最佳状态。
图13示出了本发明的一个实施例的高层次流程图,该实施例收集接收器类型信息并存储以用于后来的程序执行。在步骤701,系统收集位于程序方法的信息分配位置上的接收器类型信息。可以通过任何一种在这里描述过的信息分配技术或其它公知技术收集接收器类型信息。该接收器类型信息最好是特定于调用位置以便于可以收集用于多个调用位置的接收器类型信息。
一旦收集到一个特定调用位置的接收器类型信息,在步骤703存储该信息以用于后来的程序执行。可以在程序正常结束时将这个接收器类型信息存储,或在运行期间的某个时间点上存储,可以具有用户输入也可以不具有用户输入。详细地描述收集接收器类型信息的实施例是很有好处的。
图14示出了收集接收器类型信息实施例的流程图。在步骤751,在方法的解释过程中收集接收器类型信息。一般地,在Java虚拟机中对该方法进行解释,直到确定它有益于编译该方法。在方法立即被编译的系统中,流程可以从下一步开始。
在编译期间收集诸如在一个具体的调用位置上遇到的不同的接收器类型的接收器类型信息时,可以使用一到多个信息分配技术。在某些点,可能会有在步骤753是否应当编译该方法的问题。例如,如果一个方法已经被解释多于预定数的次数,那么可以确定该方法应该被编译。否则,可以在方法的解释过程中继续收集接收器类型信息。
在步骤755,编译该方法以及将收集到的接收器类型信息编译入该方法。这样,被编译的方法将利用所收集的类型信息。另外,在最佳实施例中,在编译的方法中产生计算机代码并在步骤757继续收集类型信息。
在一个最佳实施例中,系统也维持一种编译方法的工作集。该工作集也可以与收集的类型信息分开存储,以便于在后来的程序执行中,当系统有处理能力(例如,当系统等待用户输入时)时,系统可以编译来自工作集的方法。
一旦编译了方法,有利于在某些时间点重新编译该方法。在步骤759,确定是否应该要重新编译方法。例如,如果已经收集到相当数量的新接收器类型信息,这将有利于重新编译该方法。在一个最佳实施例中,如果确定(例如,试探法)一个方法应该内联这个方法中,则重新编译该方法。内联意味着代替调用方法,该方法被编译成这个调用方法中。例如,如果确定内联一个方法将是有利的,则该方法被编译进该调用方法并因此该调用方法现在包括被内联方法的调用位置。
对于普通的面向对象系统而言内联方法即使不是不可能的,也是很困难的,因为直到运行时还不能确定接收器对象。但是,使用收集接收器类型信息的本发明,可以有利于执行方法的内联。另外,可以将被内联的方法和接收器类型信息一起存储以便于后来的程序执行可以使用内联信息和内联该同样的方法,如果希望的话。如果确定该方法应该重新编译,则在步骤755重新编译它。
在一些点处,如图所示在步骤761将停止接收器类型信息的收集并将它存储。在流程图的末端示出的步骤761可能发生在图14流程图中的任何一点处。例如,在执行过程中可以存储收集的接收器类型信息,可以是自动的或是作为用户输入的直接结果。尽管如此,一般地,将在程序的正常结束时停止接收器类型信息的收集。
在步骤755,收集的接收器类型信息曾被编译入方法中。图15示出了接收器类型信息被编译入一个方法中的实施例。图中示出了带有一个被编译为计算机代码的多形内联高速缓存器的方法801。被编译的代码一般应该是本机指令,但是多形内联高速缓存器的总的流程可以如图所示。如果对象x是类型A,则直接调用方法来处理信息。同样,显示了用于类B和C的表示。如果对象x是以前没有见过的类。那么将通过调用方法查找程序查找它。这个新的接收器类型信息可以通过编译的方法来累计以便于后来的重新编译可以利用这个新的接收器类型信息(见步骤759)。
存储收集的接收器类型信息使得程序的随后执行可以利用以前收集的接收器类型信息。因此,如果方法是最佳的,该方法可以很快地返回后来的程序执行中的最佳状态。图16说明了如何将收集的接收器类型信息存入Java类文件中。
Java类文件851包括多个区域。开始区域853包括一个幻数(OXcafebabe)、次要版本号和主要版本号。一个常数存储区855包括常数。存储信息区857包括存取标记和指向常数存储区中的这个类和超级类的指针字。另外,还有一个界面区域859、字段区域861和方法区域863。
在类文件851的末端是一个属性段865。如图所示嵌套的接收器类型被存在属性段。如图所示,有一个对调用位置的引用,在该调用位置曾遇到接收器类型。该引用可以是在这个方法中的偏移。根据在该方法中该调用位置所在的深度来嵌套接收器类型。因此,如果调用位置来自内联的方法,这些调用位置将嵌套得更深。在一个最佳实施例中,被嵌套的接收器类型是类似于被用于收集接收器类型信息的多形内联高速缓存器的文本。需要将Java虚拟机实现成沉默地忽略任何或所有的它不能识别的位于属性段865中的属性。另外,将收集的接收器类型信息放入这个位置将对其它虚拟机实现没有不利影响。
属性段865示出了包括内联信息的嵌套的接收器类型信息。数15表示在由15指示(例如,偏移)的调用位置上曾遇到过的类A、B和C。对于类A,在这个位置上调用的方法曾被内联,这通过嵌套项显示出。4表示在内联的方法中在由4指示的调用位置处曾遇到类R。同样,在内联的方法中在由4指示的调用位置处遇到类C、R和T。另外,接收器类型信息能提供来自以前程序执行的内联信息。
如上所述,本发明提供了在调用位置存储用于后续程序执行的被收集的接收器类型信息的内联数据库。下次运行该程序时,Java虚拟机可以使用以前收集的接收器类型信息从而使该程序达到最佳而不用再花时间收集这个信息。因此,当Java程序达到最佳状态并且具有存在类文件中的收集的接收器类型信息时,该程序可以在后续的运行中更为有效地操作。另外,因为类文件不依赖于机器,所以其有效性不局限于任何一种计算机系统或计算机结构。
尽管以上是对本发明最佳实施例完整的描述,但可以使用替换、变型或等效的方法。很显然,通过对上述实施例作适当的变型,同样可以适用本发明。例如,如上所述的内联数据库技术使用多形内联高速缓存器来收集接收器类型信息。但是,本发明并不局限于任何一种信息分配技术并且可以将它们应用到包括那些这里描述过的信息分配技术。所以,上述说明书不应该被用来限制本发明的范围,本发明是通过随后权利要求的集合和范围以及它们的所有等效范围来确定范围的。

Claims (28)

1.在一个计算机系统中,一种实现用于面向对象程序的信息分配方法,包括:
收集将信息分配到接收器对象的第一方法的一个位置上的接收器类型信息;以及
存储该接收器类型信息以用于后续的程序执行。
2.根据权利要求1的方法,其特征在于所述的接收器类型信息包括每一个从所述位置上向之分配信息的不同接收器类型。
3.根据权利要求1的方法,其特征在于所述的接收器类型信息包括用于对从所述位置上向之分配信息的每个不同接收器类型的调用位置的引用。
4.根据权利要求1的方法,其特征在于所述的接收器类型信息包括在内联方法的调用位置处遇到的接收器类型。
5.根据前述的任一个权利要求的方法,其特征在于当对该程序进行解释时,收集所述的接收器类型信息。
6.根据前述的任一个权利要求的方法,进一步包括确定何时希望编译包括将信息分配到接收器对象的位置的第一方法的步骤。
7.根据权利要求6的方法,其特征在于确定何时希望编译第一方法包括确定何时所述的第一方法已经被调用超过预定次数。
8.根据前述的任一个权利要求的方法,进一步包括编译所述的第一方法从而在将信息分配到接收器对象的位置处包括接收器类型信息。
9.根据权利要求8的方法,其特征在于被编译的第一方法继续收集接收器类型信息。
10.根据权利要求1和5-9的任一种方法,其特征在于在一个多形的内联高速缓存器中收集所述的接收器类型信息。
11.根据权利要求1和5-9的任一种方法,其特征在于将所述的接收器类型信息存入用于第一方法的类文件中。
12.根据权利要求11的方法,其特征在于将所述的接收器类型信息存入所述类文件的属性段。
13.一种实现用于面向对象程序的信息分配的计算机程序产品,包括:
在将信息分配到接收器对象的方法的位置处收集接收器类型信息的计算机代码;和
存储用于后续程序执行的接收器类型信息的计算机代码;和
存储所述计算机代码的计算机可读介质。
14.一种实现用于面向对象程序的信息分配的计算机系统,包括:
一个执行计算机代码的处理器;
收集位于将信息分配给接收器对象的方法位置处的接收器类型信息的计算机代码;和
存储用于后续程序执行的接收器类型信息的计算机代码;和
存储用于处理器执行的所述计算机代码的计算机可读介质。
15.在一个计算机系统中,一种实现用于面向对象程序的信息分配的方法,包括:
在解释期间,收集位于将信息分配给接收器对象的第一方法位置处的接收器类型信息,其中所述接收器类型信息包括每一个不同接收器类型和用于每一个不同接收器类型的位置的引用,其中消息从接收器类型分配到所述位置;
确定希望编译包括将信息分配到接收器对象的位置的所述第一方法;
编译所述的第一方法使其包括位于将信息分配到接收器对象的位置处的接收器类型信息;和
存储所述的接收器类型信息以用于程序的后续执行。
16.根据权利要求15的方法,其特征在于所述接收器类型信息包括在内联方法的调用位置处所遇到的接收器类型。
17.根据权利要求15和16的任一方法,其特征在于确定希望编译第一方法包括确定该方法已经被调用超过预定次数。
18.根据权利要求15的方法,其特征在于被编译的第一方法继续收集接收器类型信息。
19.根据权利要求15的方法,其特征在于在其中一个多形内联高速缓存器中收集所述的接收器类型信息。
20.根据权利要求15的方法,其特征在于所述的接收器类型信息被存在用于该方法的一个Java类文件中。
21.根据权利要求20的方法,其特征在于所述的接收器类型信息被存在所述Java类文件的属性段。
22.一种实现用于面向对象程序的信息分配的计算机程序产品,包括:
在解释期间,收集位于将信息分配给接收器对象的方法的位置处的接收器类型信息的计算机代码,其中所述接收器类型信息包括每一个不同接收器类型和对用于每一个不同接收器类型的位置的引用,将信息从所述位置分配到各个不同的接收器对象;
确定希望编译包括将信息分配到接收器对象的位置的所述方法的计算机代码;
编译所述方法使其包括位于将信息分配到接收器对象的位置处的接收器类型信息的计算机代码;和
存储所述接收器类型信息以用于程序的后续执行的计算机代码;和
存储所述计算机代码的计算机可读介质。
23.一种实现用于面向对象程序的信息分配的计算机系统,包括:
一个执行计算机代码的处理器;
在解释期间,收集位于将信息分配给接收器对象的方法的位置处的接收器类型信息的计算机代码,其中所述接收器类型信息包括每一个不同接收器类型和对用于每一个不同接收器类型的位置的引用,将信息从所述位置分配到各个不同的接收器类型;
确定希望编译包括将信息分配到接收器对象的位置的所述方法的计算机代码;
编译所述方法使其包括位于将信息分配到接收器对象的位置处的接收器类型信息的计算机代码;和
该代码存储所述接收器类型信息以用于程序的后续执行的计算机代码;和
存储所述计算机代码以用于处理器执行的计算机可读介质。
24.一种由计算机可读介质存储的用于面向对象方法的数据结构,包括:
至少一种由所述计算机可读介质存储的接收器类型;以及
由所述计算机可读介质存储的嵌套的接收器类型,该嵌套的接收器类型是这样的接收器类型,它在所述方法的信息分配位置处被分配信息。
25.根据权利要求24的数据结构,其特征在于所述的嵌套的接收器类型包括在所述方法中的信息分配位置的引用。
26.根据权利要求24的数据结构,其特征在于所述的嵌套的接收器类型包括这样的接收器类型,它在位于内联方法中信息分配位置处被分配信息。
27.根据权利要求24的数据结构,其特征在于所述的数据结构被存储入用于所述方法的Java类文件中。
28.根据权利要求27的数据结构,其特征在于所述的数据结构被存入所述Java类文件的属性段。
CN98124629A 1997-10-06 1998-10-05 在面向对象系统中用于接收器类型的联机数据库 Pending CN1237737A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944,332 US6317796B1 (en) 1997-10-06 1997-10-06 Inline database for receiver types in object-oriented systems
US944,332 1997-10-06

Publications (1)

Publication Number Publication Date
CN1237737A true CN1237737A (zh) 1999-12-08

Family

ID=25481207

Family Applications (1)

Application Number Title Priority Date Filing Date
CN98124629A Pending CN1237737A (zh) 1997-10-06 1998-10-05 在面向对象系统中用于接收器类型的联机数据库

Country Status (6)

Country Link
US (2) US6317796B1 (zh)
EP (1) EP0908815B1 (zh)
JP (1) JP2000003280A (zh)
KR (1) KR100555116B1 (zh)
CN (1) CN1237737A (zh)
DE (1) DE69810056T2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100342379C (zh) * 2005-05-25 2007-10-10 北京四方继保自动化股份有限公司 一种实现iec61850信息间接接入实时数据库的方法

Families Citing this family (25)

* Cited by examiner, † Cited by third party
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
FR2796178B1 (fr) * 1999-07-06 2001-08-03 Schlumberger Systems & Service Procede de realisation de liens dynamiques dans une machine virtuelle
US6754887B1 (en) * 1999-10-22 2004-06-22 International Business Machines Corporation Methods for implementing virtual bases with fixed offsets in object oriented applications
JP2001243182A (ja) * 2000-02-29 2001-09-07 Nec Corp サーバシステム及びWebコンテンツとサーバシステムとの連動方法
US7913286B2 (en) * 2000-10-20 2011-03-22 Ericsson Television, Inc. System and method for describing presentation and behavior information in an ITV application
JP3664478B2 (ja) * 2001-03-29 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
DE10131944A1 (de) * 2001-07-02 2003-01-16 Siemens Ag Verfahren zur Verarbeitung von Daten
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US7386686B2 (en) * 2003-03-28 2008-06-10 Intel Corporation Inlining with stack trace cache-based dynamic profiling
US7478402B2 (en) * 2004-02-12 2009-01-13 Microsoft Corporation Configurable message pipelines
US7526502B2 (en) * 2004-09-10 2009-04-28 Microsoft Corporation Dynamic call site binding
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
US7818668B2 (en) * 2005-04-19 2010-10-19 Microsoft Corporation Determining fields for presentable files
US20060242654A1 (en) * 2005-04-22 2006-10-26 Lund Kasper V Process and apparatus for sharing inline caches
US8291395B2 (en) * 2006-03-31 2012-10-16 Apple Inc. Fast function call dispatching
US8024720B2 (en) * 2006-04-17 2011-09-20 International Business Machines Corporation Speculative inlining of overridden methods without using profiling information
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
US7634499B2 (en) * 2007-01-06 2009-12-15 Objectivity, Inc. Method, system and computer-readable media for repairing data record corruption
US20090182689A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Rule-based dynamic operation evaluation
US8291397B2 (en) * 2008-04-02 2012-10-16 International Business Machines Corporation Compiler optimized function variants for use when return codes are ignored
US9748771B2 (en) * 2012-04-12 2017-08-29 International Business Machines Corporation Plug arrangements for alleviating peak loads
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing
US9256410B2 (en) * 2012-08-09 2016-02-09 Apple Inc. Failure profiling for continued code optimization
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
KR101827143B1 (ko) * 2016-08-26 2018-02-08 강원대학교산학협력단 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법

Family Cites Families (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57153339A (en) * 1981-03-18 1982-09-21 Hitachi Ltd Information processor
US4399507A (en) * 1981-06-30 1983-08-16 Ibm Corporation Instruction address stack in the data memory of an instruction-pipelined processor
JPS5856153A (ja) 1981-09-30 1983-04-02 Fujitsu Ltd サブル−チンリタ−ン方式
US5694603A (en) * 1982-09-28 1997-12-02 Reiffin; Martin G. Computer memory product with preemptive multithreading software
US4658351A (en) * 1984-10-09 1987-04-14 Wang Laboratories, Inc. Task control means for a multi-tasking data processing system
US5329611A (en) * 1990-05-22 1994-07-12 International Business Machines Corp. Scalable flow virtual learning neurocomputer
US5265206A (en) * 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5379426A (en) * 1991-01-25 1995-01-03 Sun Microsystems, Inc. Method and apparatus for object oriented interprocess message switching
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
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
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
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
DE4211966A1 (de) 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
US5404525A (en) * 1992-09-30 1995-04-04 International Business Machines Corporation Efficient method router that supports multiple simultaneous object versions
US5991538A (en) * 1992-12-18 1999-11-23 Inprise Corporation System for generating and using programs in an object-oriented environment with a message dispatch architecture
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5442793A (en) * 1993-02-26 1995-08-15 Microsoft Corporation Method and system for locating an inherited virtual function member of a derived class
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5517645A (en) * 1993-11-05 1996-05-14 Microsoft Corporation Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager
US5475822A (en) * 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US5742848A (en) * 1993-11-16 1998-04-21 Microsoft Corp. System for passing messages between source object and target object utilizing generic code in source object to invoke any member function of target object by executing the same instructions
US5485617A (en) * 1993-12-13 1996-01-16 Microsoft Corporation Method and system for dynamically generating object connections
US5600838A (en) * 1994-01-18 1997-02-04 Sybase, Inc. Object oriented dispatch and supercall process and arrangement
US5522071A (en) * 1994-01-18 1996-05-28 Sybase, Inc. Run-time message redirection for invoking object oriented methods based on alternate dispatch variable
US5682532A (en) * 1994-05-02 1997-10-28 Microsoft Corporation System and method having programmable containers with functionality for managing objects
US5734903A (en) * 1994-05-13 1998-03-31 Apple Computer, Inc. System and method for object oriented message filtering
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5590331A (en) 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
AUPN191395A0 (en) * 1995-03-22 1995-04-27 M.I.M. Holdings Limited Atmospheric mineral leaching process
US5606682A (en) * 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
JP2857600B2 (ja) 1995-05-11 1999-02-17 松下電器産業株式会社 プロセッサ及びプログラム翻訳装置
US5774721A (en) * 1995-09-08 1998-06-30 Iq Systems, Inc. Method of communication between processors in a distributed processing system having a host processor and at least one object oriented processor
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
US5822606A (en) * 1996-01-11 1998-10-13 Morton; Steven G. DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
EP0976029A2 (en) * 1996-01-24 2000-02-02 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5761491A (en) * 1996-04-15 1998-06-02 Motorola Inc. Data processing system and method for storing and restoring a stack pointer
GB2312766A (en) * 1996-05-01 1997-11-05 Ibm Transactional layer for object management system
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US5884083A (en) * 1996-09-20 1999-03-16 Royce; Robert Computer system to compile non-incremental computer source code to execute within an incremental type computer system
US6243763B1 (en) * 1996-11-12 2001-06-05 International Business Machines Corporation Method for sending a message to a group and the group broadcasts the message to its members or references within an object-oriented system
US5884316A (en) * 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache
US5937193A (en) * 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
CA2194848C (en) * 1997-01-10 2003-12-23 Jonathan Layes Condition handling using script interpreters
US5907707A (en) * 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java
US6044220A (en) * 1997-02-25 2000-03-28 Motorola, Inc. Method and apparatus for operating a data processor to execute software written using a foreign instruction set
US5905895A (en) * 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5845298A (en) * 1997-04-23 1998-12-01 Sun Microsystems, Inc. Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6385660B2 (en) * 1997-10-06 2002-05-07 Sun Microsystems, Inc. Site specific message dispatch in object-oriented systems
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US5933635A (en) 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
US6332216B1 (en) * 1999-03-09 2001-12-18 Hewlett-Packard Company Hybrid just-in-time compiler that consumes minimal resource

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100342379C (zh) * 2005-05-25 2007-10-10 北京四方继保自动化股份有限公司 一种实现iec61850信息间接接入实时数据库的方法

Also Published As

Publication number Publication date
EP0908815A2 (en) 1999-04-14
US6317796B1 (en) 2001-11-13
KR19990037015A (ko) 1999-05-25
DE69810056T2 (de) 2003-04-30
KR100555116B1 (ko) 2007-01-03
US20040244009A1 (en) 2004-12-02
EP0908815B1 (en) 2002-12-11
EP0908815A3 (en) 2000-06-07
US7137123B2 (en) 2006-11-14
JP2000003280A (ja) 2000-01-07
DE69810056D1 (de) 2003-01-23

Similar Documents

Publication Publication Date Title
CN1105968C (zh) 用于在面向对象的系统中的位置特定的信息分配的计算机系统和方法
CN1237737A (zh) 在面向对象系统中用于接收器类型的联机数据库
US7225439B2 (en) Combining write-barriers within an inner loop with fixed step
US7089272B1 (en) Specializing write-barriers for objects in a garbage collected heap
Gidra et al. NumaGiC: A garbage collector for big data on big NUMA machines
US6999980B2 (en) Eliminating write barriers for young objects
CN1294486C (zh) 多重处理环境中透明动态优化的方法和系统
US6240548B1 (en) Method and apparatus for performing byte-code optimization during pauses
US7310718B1 (en) Method for enabling comprehensive profiling of garbage-collected memory systems
KR100384905B1 (ko) 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체
CN1205549C (zh) 用于多-线程虚拟机的存储器分配的方法和装置
EP0993634B1 (en) Method and apparatus for managing hashed objects
US7424705B2 (en) Dynamic management of compiled code
US6314436B1 (en) Space-limited marking structure for tracing garbage collectors
US7519639B2 (en) Method and apparatus for dynamic incremental defragmentation of memory
KR20010020495A (ko) 부분적으로 재배치된 오브젝트의 소스 및 타겟 인스턴스와관련된 기록 배리어를 포함하는 바운드된 정지 시간가비지 수집 시스템 및 방법
CN1238500A (zh) 用于进行静态初始化的方法和系统
US6865734B2 (en) Method and apparatus for performing byte-code optimization during pauses
KR20050030139A (ko) 객체 지향 프로그램을 위한 영역 기반 메모리 관리
US20040186863A1 (en) Elision of write barriers for stores whose values are in close proximity
US8131955B2 (en) Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
JP5051961B2 (ja) モジュール式ガーベッジコレクタを実現するための方法および装置
US20090228537A1 (en) Object Allocation System and Method
US7792880B2 (en) Method and apparatus for efficient implementation of discontiguous objects
US20230367638A1 (en) Computation and Storage of Object Identity Hash Values

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
AD01 Patent right deemed abandoned
C20 Patent right or utility model deemed to be abandoned or is abandoned