CN1265487A - 用于改进java方法调用速度的方法和装置 - Google Patents
用于改进java方法调用速度的方法和装置 Download PDFInfo
- Publication number
- CN1265487A CN1265487A CN99127078A CN99127078A CN1265487A CN 1265487 A CN1265487 A CN 1265487A CN 99127078 A CN99127078 A CN 99127078A CN 99127078 A CN99127078 A CN 99127078A CN 1265487 A CN1265487 A CN 1265487A
- Authority
- CN
- China
- Prior art keywords
- calling program
- calling
- program
- handling system
- data handling
- 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
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
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)
Abstract
用于执行一方法的方法和装置,调用一方法的字节码被检测出。方法块的定位与方法有关,其中方法块包括一调用程序的标识符。调用程序被访问,其中调用程序为方法的执行进行设置。由调用程序实现的设置,对方法是特别简明。方法的完成被检测,且把控制返回给调用程序,其中,调用程序完成方法的处理。
Description
本发明概括地涉及一改进的数据处理系统,特别涉及改进数据处理系统中执行指令的方法和装置,更具体的说,本发明涉及的方法和装置用于改进数据处理系统中Java方法的调用速度。
Java是一种面向对象的编程语言和环境,其焦点是定为作为对象的数据以及可用于那些对象上的方法。“Java”是Sun Microsystems公司的注册商标。Java只支持单一继承,这意味着在任意给定时间内,每个类只能继承一个其它类。Java亦可用来创建称为接口的完全抽象类,它允许定义的方法,可不必考虑其它类是如何操纵这些方法而为几种类共享。Java提供对不同计算机平台分配软件的机制。
Java能支持许多类型数据处理系统的应用,可以包括各种中央处理单元和操作系统结构。Java虚拟机(JVM)是仅常驻在存贮器中的虚拟计算机部件。JVM允许Java程序在不同平台上执行,这与只对一种代码曾为之进行编译的平台相反。Java程序为JVM被编译。按这样的方式,使Java能支持许多种数据处理系统的应用,可以包括各种中央处理单元和操作系统结构。为了使Java应用在不同类数据处理系统上执行,典型地编释器产生一中间结构的文件格式。被编译的代码在给定的Java运行时间系统情况下,在许多处理器上可执行。Java编译器产生字节码指令并不专门针对具体的计算机结构,一字节码是由Java编译器产生和由Java解释器执行的机器独立码。Java解释器是JVM中的一模件,它交替地解码和执行一个字节码或多个字节码。这些字节码指令设计或在任何机器上容易被解释,并在工作中容易转换成本地机器码。
一开发环境,例如Java开发工具(JDK)可以从Sun Microsystems公司得到根据Java语言源代码和库,可用来建立Java字节码,该Java字节码可被存贮。成为web服务器上的Java应用或小应用程序(applet),它可以在网络上被下载到用户的机器上,并在本地JVM上执行。
当需要更快速度执行Java程序时,JIT(Just In Time)编译器可用来把方法或类的字节码,在执行它们之前转换成本地机器指令,典型地,这种编译对每种方法只发生一次,某些JIT编译器可编译全部类,而不是一次编译一个方法。
当JVM解释器遇到一调用字节码时,JVM解释器定位要被访问的合适的方法,然后访问该方法。该访问的方法可通过定位方法块,并转到方法的调用程序而被执行,方法块标识了调用程序及是一按照方法的数据结构。调用程序实现函数的激活,及为目标方法产生一栈框架,由调用程序实现的这种处理包括确保参数被合适地传到目标方法。如果方法是同步的,监控器,也称为锁(Lock)被调用程序得到。其它的内务操作事务可根据具体目标方法被包含。
当JVM解释器遇到一返回字节码,通知方法完成时,内务操作事务的一客套集(commplimentaryset)必须执行函数的去激活,释放栈框架,如果曾获得则释放监控器,并正确地把结果返回给调用程序。来自Sun Microsystems公司的标准JVM工具提供同步或非同步方法的调用程序,而且,返回到这些调用程序中访问方法的返回字节码无这些特殊性,且必须检查方法的特性,以合适地完成返回。而且,调用程序可被要求设定标志,依次由当前可得到的JVM工具中的返回字节码检验。
当前的JVM工具仅利用具有有限特殊性的调用程序,和通用化的返回字节码,它必须实行运行时检查,以确定哪个任务在函数激活/去激活期间必须被执行。函数激活是所有步骤所必须的,以合适地访问一方法。这包括传递栈上的参数,用方法需要的任何值设置栈框架(如,为访问方法指向方法块的一指针),存贮返回地址,当方法完成时控制将转移到这返回地址,及还包括如果方法是同步的,去获得对象的监控器。栈上的这种数据结构被称为函数激活记录,函数去激活是所有步骤所必须的以终止方法的访问。它包括释放方法访问栈框架,如果方法是同步的则释放对象监控器,从栈上除去被传递的参数及在访问方法的栈上,如果有的话放入访问方法的返回值。当函数去激活被完成时,为了访问方法的函数激活记录已从栈上被去除。这个过程具有负面性能影响。
因此,有这样的为调用方法的方法和装置将是有利的,在这种方式中免去了根据方法特性进行运行时决定的需要。
本发明为执行一方法提供方法和装置,调用一方法的字节码被检测出。方法块与方法有关被定位。其中方法块包括调用程序的标识符。调用程序被访问,在那里调用程序为方法的执行进行设置。由调用程序实现的设置对方法是特别简单的。方法的完成被检测且把控制返回给调用程序,在那时调用程序完成方法的处理。
本发明的可信性能的新特点在所附的权利要求书中被陈述。而本发明本身以及使用的优选方式,其进一步的目标及优点参考下面连同附图读出的描述实施例的详细说明,将被最好地理解,其中:
图1是方框图,说明了一数据处理系统,本发明可以在该数据处理系统中实现;
图2是根据本发明的优选实施例用于处理方法的部件的方框图;
图3是根据本发明的优选实施例的方法块的说明;
图4是一处理的高级流程图,用于根据本发明的优选实施例选择专门的调用程序;
图5A-5E是一处理的流程图,用于根据本发明的优选实施例选择专门的调用程序。
图6是一方法的流程图,说明了根据本发明的优选实施例,使用专门的调用程序调用一方法;
图7A-7C是任务或步骤的流程图,这是根据本发明的优选实施例,在准备访问一目标方法时,由专门的调用程序实现的;
图8A-8C是处理的更详细的流程图,通过用专门的调用程序,根据本发明的优选实施例,以实现解决从访问到一目标方法所需任务;及
图9A-9C是一流程图,说明根据本发明的优选实施例,在调用方法的Java栈上,目标方法结果的位置。
现在根据图1,一方框图说明了本发明可以在其上实现的数据处理系统。数据处理系统100是一客户计算机的例子。数据处理系统100利用一外围部件互连(PCI)局部总线结构。虽然,所描述的例子使用PCI总线,其它总线结构如微通道和ISA总线亦可作用。处理器102和主存104通过PCI桥108被连到PCI局部总线106。PCI桥108亦可以包括处理器102用的集成的存贮器控制器和高速缓冲存贮器。连到PCI局部总线106的附加连结器可以通过直接部件互连或通过附加板实现。在所描述的例子中,局域网(LAN)适配器110,小型计算机系统接口(SCSI)主机总线适配器112,及扩展总线接口114通过直接部件连接器被连到PCI局部总线106。相反,音频适配器116,图形适配器118及音频/视频适配器(A/V)119通过插到扩展槽中的附加板被连到PCI局部总线106。扩展总线接口114为键盘和鼠标适配器120,调制解调器122及附加存贮器124提供连结。SCSI主机总线适配器132为硬盘驱动器126,磁带驱动器128及CD-ROM驱动器130提供连结。典型情况PCI局部总线器具将支持3或4种PCI扩展槽或附加的连结器。
一操作系统在处理器102上运行,用于为图1中数据处理系统100内的各种部件配合和提供控制。操作系统可以是一商业上可买到的操作系统,如OS/2,这可从IBM公司买到。“OS/2”是IBM公司的注册商标,面向对象的编程系统如Java可以同操作系统一起运行,并从数据处理系统100上执行的Java程序或应用提供对操作系统的访问,“Java”是Sun Microsystem公司的注册商标。操作系统的指令,面向对象的操作系统以及应用或程序被放置在存贮装置上,例如硬盘驱动器126,并且可以装载到主存104,通过处理器102执行。
在本领域中具有一般技能的人将知道图1中的硬件可以随装备而变化。其它内部硬件或外围设备,例如闪速存贮器ROM(或类似的不挥发存贮器)或光盘驱动器之类可以附加或替代图1中所描述的硬件。还有,本发明的处理过程可以用于多处理器数据处理系统。
例如,数据处理系统100,如果选择的配置用作网络计算机,可以不包括SCSI主机总线适配器112,硬盘驱动器126,磁带机128和CD-ROM130,如图1中表示可选物的虚线框132所示。在那种情况下,被合适地称做客户计算机的计算机必须包括某些类型的网络通信接口,例如局域网(LAN)适配器110,调制解调器122之类。作为另一例子,数据处理系统100可以是一独立系统,不依靠某些类型的网络通信接口被配置成可引导。不管怎样数据处理系统100包括某些类型的网络通信接口。还有一例子,数据处理系统100可以是一个人数字助理(PPA)设备,用ROM和/或闪速ROM被配置,以便提供不挥发存贮器,存贮操作系统文件和/或用户生成的数据。
图1冲描述的例子及上面所述的例子并不意味着关于本发明包含的结构上的限制。
本发明提供一方法,装置和指令,用以只要向JVM附加极小的代码就可为JVM解释器提供性能的提高。本发明特别能用于小型计算设备,其中JIM缩译器增加性能的额外开销性能是太大了。本发明利用许多不同调用程序,它们对方法的特殊需要作了专门处理。此外,本发明利用返回字节码返回控制调用程序,而不是控制方法。合适的调用程序在类装入时间根据方法的特性被选择。该调用程序实现需要的步骤或函数。调用程序对方法类型的修改免除了根据方法特性作运行时决定的需要。
现参照图2,其中按照本发明优选实施例的处理方法所用部件的方块图作了说明。在所描述的例子中,JVM 200包括类装入器202,解释器204和编译器206。通过调用专门的类方法,JVM 200将开始执行过程。在所述例子中,方法例如可以是一主程序main。此方法可被当做单个参数以串陈列的形式通过。这就造成专门的类被装入,被链接到使用的其它类型上,并且被初始化、类的装入包括寻找二进制形式的类或特定名字的接口类型。
在所描述的例子中,装入过程通过类装入器202来实现,在本例中类装入器包含ClassLoader类,它包括装入新的类到Java运行时间环境的方法。类装入器应对装入类的对象负责。给定类的名字,类装入器将力图定位或产生构成类的定义的数据。通常,类装入器将类的名字转为文件名,然后从文件系统读出此名字的“类文件”。解释器204是一程序,它使用字节码,在实现字节码功能的解释器中标识本地指令序列,并执行本地指令序列从而实现字节码的功能。在此情况下,解释器204包含用以解释在数据处理系统中执行的方法208中的字节码的处理和数据结构。解释器由字节码指引以执行本地码,实现由字节码所表明的功能。
编译器206结合编译类,它包含在执行之前将方法编译成本地指令的方法。编译器206是JVM 200中的可选件。在许多情况下其中JVM200用小型计算设备来实现,JIT编译器的开销过大,所以JVM 200不包括编译器206。本发明中用的处理器可以有,也可以没有编译器206。
当解释器204遇到调用的字节码,解释器204将定位一合适的方法,例如方法208。另外,由编译器206产生的本地指令试图访问方法时,这些本地指令也将定位一合适的方法,例如方法208。此后,处理将转移到调用者210,它将完成为执行方法208所必要的设置。调用程序210是把控制传递到方法208之前完成实际设置的程序。
现在参看图3,按照本发明的优选实施例一方法块的示意图被描述。方法块300包含调用程序指针302、调用程序指针302是指向调用程序的指针,它是一程序用以完成执行方法所要求的设置,然后通过转移到编译代码,或对于非编译代码通过把控制传递到解释器,以使方法执行。
方法块300还包含由JVM 200用以执行图2的方法208所用的其它信息。例如,方法块还包含参数的数目,本地变量,栈的最大容量,以及用于处理或执行方法的其它信息。方法的描述,查错信息以及异常表定义是亦可被包含在方法块300中的其它信息例子。
按照本发明的优选实施例,调用程序指针302可能是专门的调用程序指针,它指向根据该方法的特性为特定的方法,执行各种步骤或其它设置工作的代码或程序,这种代码或程序也称作调用程序,它履行执行方法所必须的步骤和函数,并专门的执行与调用程序有关的特定方法的设置。按这种方式,可避免在运行期间检查方法的特性。代之以在类装入和初始化期间,根据方法的特性,调用程序被分配一方法。按此方法式,排除了运行时根据方法特性进行判定的必要。
在分配或关联方法与调用程序时用到的某些特性例如包括:是否方法被同步,方法的返回类型,是否方法使用影响函数激活的字节码,以及是否方法可以采用某些参数类型,这些类型在方法访问期间要求特别的控制。当然,在本发明中使用的调用程序也可以满足特定的其它类型的方法特性。方法的返回结果或返回类型可能包括:例如byte(8位带符号整数),char(16位无符号整数),short(16位带符号整数),int(32位带符号整数),long(64位带符号整数),float(32位IEEE 754浮点数),double(64位IEEE 754浮点数),boolean(真值,真或假),以及Object(称作对象)。Java方法可被表明返回上述数据类型之一的值或者是空白(void),空白表示该方法没有任何值返回。对于本发明的优选实施例(注意:本实施例和这些示例是专门针对Intel IA32结构,即X86的32位JVM,它与其它的32位结构或对于64位的JVM的略有不同),这些数据类型可按如下分组以作为传递的参数和返回值:32位整数(byte,char,short,int,boolean,object),64位整数(long),32位浮点(float),和64位浮点(double)。正是这些分组对特殊目的的调用程序很重要。此分组可根据基于CPU结构(在此情况下是Intel IA32)的自然数据类型而得到,这些将作为返回给访问方法的结果。
影响函数激活的字节码包括,例如访问常数池的字节码。常数池是在Java类文件中常数池表per-类或per-接口的运行表示。常数池可能包括几种常数,范围从编译时已知的数字字母到运行时决定的方法和字段依据。常数池从事的功能类似于通常编程语言中的符号表,尽管它比通常的符号表包含更宽的数据范围。因为有了存储在函数激活记录中的常数池指针,也称作“框架(frame)”而能获得好处。JVM中的框架用来支持数据和部分结果,同时执行动态连接,支持方法的返回值,以及处理异常。Java方法每次被调用就产生一新的框架。当方法完成,不论正常或非正常完成,框架就被毁掉。框架从产生框架的线程的Java堆栈中分配。
基于这些和其它可能的特性,专门调用程序为这些类型的方法可被写入。在类装入和初始化期间,每个方法被检查,而合适的专门调用程序通过正要存储到该方法的方法块中的调用程序的地址而被选择。在运行时,解释器应转移到专门的调用程序,并且只有合适访问此方法的必要的指令才会被执行。结果,运行时的方法检查是不必要的。
专门的调用程序的某些例子包括Java Syncint,它是一调用程序,专门把控制从Java方法转为同步Java方法,同步Java方法返回32位整型或浮点值给访问程序,此调用程序没有必要执行目标方法的运行检查,以确定是否此方法已被同步,不必设置一标志以表示要求释放监控器。在类装入时间当此方法的调用程序已选中时,方法的检查就被执行,调用程序知道此方法被同步,并且在方法启动之前获取监控器。因方法的返回重新取得控制的调用程序还知道,当方法完成以及方法的返回结果是32位整型或浮点值时,释放监控器,并且将目标方法的结果,在去消函数激活记录以后,放到调用程序的堆栈中。
NativeLong是一调用程序,它专门把控制从Java方法转为非同步的本地方法,它返回-64位整型值给访问程序。此调用程序将为本地方法访问合适地准备参数,由于方法不是同步的,既不需要获取监控器,也不需要设置标志以表示由于返回而不必释放监控器。当本地方法返回时,调用程序将去除函数激活记录,并将64位整型值的返回结果放入堆栈中。
本发明免除了运行时要检查以确定在函数激活/去激活期间哪些任务必需执行,代之以根据装入或初始化检查选择专门的调用程序。在所描述的例子中调用程序根据执行方法的方法特性,仅执行特定方法所必需的指令。
现转到图4,图中按照本发明的优选实施例,对选择的专门调用程序的高层处理流程做了描述。在所描述的例子中,此处理在类装入期间被JVM所使用。此处理开始于检查方法的特性(步400),根据上述特性为特定方法,关于专门调用程序是否存在或可以得到的判断被做出(步402)。如果专门调用程序存在,指向专门调用程序的指针被放入特定方法的方法块中(步404)。接着做出判断是否存在用以处理的更多的方法(步406)。如果存在用于处理的更多的方法,则处理获得下一个方法(步408)并返回到步400,以检查此方法的特性。否则,此处理则结束。
再参看步402,如果没有支持该方法的专门调用程序存在,指向一般调用程序的指针放置到方法块中(步410)并如上所述,处理进入到步406。一般调用程序是一调用程序,它不专门针对方法的特性,它执行运行检查,在方法的函数激活和非激活期间合适地确定哪些任务必需执行。
现参照图5A-5E,图中按照本发明的优选实施例,描述了选定的专门调用程序的处理流程图。此处理在类装入和/或初始化期间由JVM执行,它用于根据方法的特性选择为该方法的专门的调用程序。处理开始于确定此方法是否为本地方法(步500)。本地方法是以平台有关代码实现的方法。本地方法通常是用其它编程语言,例如象C,C++,Fortran或汇编语言写成。如果方法是本地方法,则处理确定方法是否为同步方法(步501)。同步方法是一方法,一般地要求与一对象相关的锁。锁也称作“监控器”,该机制用于同步由JVM执行的同时激活的各个线程,JVM在同一时间可以支持许多线程的执行。
如果方法是一同步方法,则要作出判断是否方法采用64位参数(步502)。如果方法采用64位参数,则还要判断该方法有无返回值(步503)。换句话说,没有值被函数返回。如果方法没有返回值,此方法的调用程序被设置等于NativeSyncQwordVoid(步504)。NativeSyncQwordViod是一调用程序,以把控制从Java方法转为同步的本地方法,它至少采用一个64位参数并且无返回值。否则,判断此方法是否返回“float”(步505),如果方法是返回“float”,调用程序被设置等于NativeSyncQwordFloat(步506)。NativeSyncQwordFloat是一调用程序,用于把控制从Java方法转为同步的本地方法,它采用至少一个64位参数及返回一32位浮点值。如果方法不返回“float”,则确定方法的返回是否为“long”(步507),如果方法返回“long”,调用程序被设置等于NativeSyncQwordLong(步508)。NativeSyncQwordLong是一调用程序,用于把控制从Java方法转为同步的本地方法,它采用至少一个64位参数并返回一64位整型值。否则,就要判断方法是否返回“double”(步509)。如果方法返回“double”,调用程序被设置等于NativeSyncQwordBouble(步510)。NativeSyncQwordBouble是一调用程序,用于把控制从Java方法转为同步的本地方法,它采用至少一个64位参数并且返回一64位浮点值。不然,此调用程序被设置等于NativeSyneQwordInt(步511)。NativeSyncQwordInt是一调用程序,用于把控制从Java方法转为同步的本地方法,它采用至少一个64位参数并返回一32位整型值。
再参看步502,如果方法不采用64位参数,则判断是否方法没有返回值(步512)。如果方法没有返回值,则调用程序被设置等于NativeSyncVoid(步513)。NativeSyncVoid是一调用程序,用于把控制从Java方法转为同步的本地方法,它不用64位参数也没有返回值。不然,判断是否方法返回“float”(步514)。如果方法返回“float”,调用程序被设置等于NativeSyncFloat(步515)。NativeSyncFloat是一调用程序,用于把控制从Java方法转为同步的本地方法,它不取用64位参数但返回一32位浮点值。
如果方法不返回“float”,则要确定方法是否返回“long”(步516)。如果是返回“long”,调用程序被设置等于NativeSyncLong(步517)。NativeSyncLong是一调用程序,用于把控制从Java方法转为同步的本地方法,它不取用64位参数但返回64位整型值。否则,确定是否方法返回“double”(步518),如果方法返回“double”,调用程序被设置等于NativeSyncDouble(步519)。NativeSyncDouble是一调用程序,用于把控制从Java方法转为同步的本地方法,它不取用64位参数但返回64位浮点值。如果在步518不返回“double”,则调用程序被设置等于NativeSyncInc(步520)。NativeSyncInc是一调用程序,用于把控制从Java方法转为同步的本地方法,它不取用64位参数但返回32位整型值。
再参照步501,如果方法不是同步方法,则判断方法是否是64位参数(步521)。如果方法取64位参数,则判断是否方法无返回值(步522)。如方法无返回值,调用程序设置等于NativeQwordVoid(步523),NativeQwordVoid是一调用程序,用于把控制从Java方法转为非同步本地方法,它取至少一个64位参数但无返回值。否则,确定是否方法返回“float”(步524)。如果是返回“float”,调用程序设置等于NativeQwordFloat(步525)。NativeQwordFloat是一调用程序,用于把控制从Java方法转为非同步本地方法的调用程序,它取用至少一个64位参数并且返回32位浮点值。
不然,要做出判断方法是否返回“long”(步526)。如果其答案是肯定,调用程序设置等于NativeQwordLong(步527)。NativeQwordLong是一调用程序,用于把控制从Java方法转为非同步本地方法,它取用至少一个64位参数并返回64位整型值。否则,确定是否方法返回“double”(步528)。如果是返回“Double”,调用程序设置等于NativeQwordDouble(步529)。NativeQwordDouble是一调用程序,用于把控制从Java方法转为非同步本地方法,它取用至少一个64位参数并且返回64位浮点值。如果不是返回“double”,则调用程序被设置等于NativeQWordInt(步530),NativeQwordInt是一调用程序,用于把控制从Java方法转为非同步本地方法,它取用至少一个64位参数并且返回32位整型位。
再看步521,如果方法不取用64位参数,处理过程则确定方法是否无返回值(步531)。如果调用程序无返回值,此调用程序被设置等于NativeVoid(步532)。NativeVoid是一调用程序,用于把控制从Java方法转为非同步本地方法,它不用64位参数也没有返回值。不然,判断是否方法返回“float”(步533)。如果返回“float”,调用程序被设置等于NativeFloat(步534)。NativeFloat是一调用程序,用于把控制从Java方法转为非同步本地方法,它不用64位参数且返回32位浮点值。
再参看步533,如果不是返回“float”,则判断是否方法返回“long”(步535),如是返回“long”,调用程序被设置等于NativeLong(步536)。NativeLong是一调用程序,用于把控制从Java方法转为非同步本地方法,它不用64位参数,但返回64位整型值。否则,确定是否方法返回“double”(步537)。如方法返回“double”,调用程序被设置等于NativeDouble(步538),NativeDouble是一调用程序,用于把控制从Java方法转为非同步本地方法,它不同64位参数但返回64位浮点值。不然,则调用程序被设置等于NativeInt(步539)。NativeInt是一调用程序,用于把控制从Java方法转为非同步本地方法,它不同64位参数并返回32位整型值。
再返回到步500,如果方法不是本地方法,则判断是否方法为同步方法(步540),如果方法是同步方法,则判断方法是否要求框架中的常数池指针(步541),框架这个述语是函数激活记录的同义词。如果方法要求框架中的常数池指计,则确定是否方法无返回值(步542)。如果方法没有返回值,调用程序被设置等于JavaSyncCPoolVoid(步543)。JavaSyncCPoolVoid是一调用程序,用于把控制从Java方法转为同步Java方法,它要求函数激活记录中的常数池指针并且没有返回值。否则,判断是否方法返回“long”(步544)。如果方法是返回“long”,调用程序被设置等于JavaSyncCPoolLong(步545)。JavaSyncCPoolLong是一调用程序,用于把控制从Java方法转为同步的Java方法,它要求函数激活记录中的常数池指针并返回64位整型或浮点值。否则确定是否方法返回“double”(步546)。如果方法确是返回“double”,处理过程也进到如上所说的步545。不然,调用程序被设置等于JavaSyncCPoolInt(步547)。JavaSyncCPoolInt是一调用程序,用于把控制从Java方法转为同步的Java方法,它要求函数激活记录中的常数池指针并返回32位整型或浮点值。
返回到步541,如果方法不要求框架中的常数池指针,则判断是否方法没有返回值(步548)。如果回答是肯定,调用程序被设置等于JavaSyncVoid(步549)。JavaSyncVoid是一调用程序,用于把控制从Java方法转为同步的Java方法,它不要求函数激活记录中的常数池指针也没有返回值。不然则确定方法的返回是否为“long”(步550)。如果“long”被返回,调用程序被设置为JavaSyncLong(步551)。JavaSynCLong是一调用程序,用于把控制从Java方法转为同步Java方法,它不要求函数激活记录中的常数池指针,并且返回64位整型或浮点值。否则,确定是否方法返回“double”(步552)。如果是返回“double”,过程也进入到上面所说的步551。不然,调用程序被设置等于JavaSyncInc(步553)。JavaSyncInc是一调用程序,用于把控制从Java方法转为同步的Java方法,它不要求函数激活记录中的常数池指针,但返回32位整型或浮点值。
再次参看步540,如果方法不是同步方法,则判断是否方法要求框架中的常数池指针(步554)。如果方法确实要框架中的常数池指针,则判断是否方法无返回值(步555)。如果回答是肯定,调用程序则被设置等于JavaCPoolVoid(步556)。JavaCPoolVoid是一调用程序,用于把控制从Java方法转为非同步Java方法,它要求函数激活记录中的常数地指针并且无返回值。不然,确定方法是否返回“long”(步557),如果是返回“long”,调用程序被置为等于JavaCPoolLong(步558)。JavaCPoolLong是一调用程序,用于把控制从Java方法转为非同步Java方法,它要求函数激活记录中的常数池指针,并且返回64位整型或浮点值。否则,确定是否方法返回“double”(步559)。如果方法是返回“double”,过程也进入上面所说的步558。不然,调用程序被设为等于JavaCPoolInt(步560),JavaCPoolInt是一调用程序,用于把控制从Java方法转为非同步Java方法,它要求函数激活记录中的常数池指针,并且返回32位整型或浮点值。
再参看步554,如果方法不要求框架中的常数池指针,则判断是否方法无返回值(步561)。如果方法没有返回值,调用程序设为等于JavaVoid(步562)。JavaVoid是一调用程序,用于把控制从Java方法转为非同步Java方法,它不要求函数激活记录中的常数池指针而且无返回值。否则,判断是否方法返回“long”(步563)。如果方法是返回“long”,调用程序被设置等于JavaLong(步564)。JavaLong是一调用程序,用于把控制从Java方法转为非同步Java方法,它不要求函数激活记录中的常数池指针。并且返回64位整型或浮点值。不然则确定是否方法返回“double”(步565)。如果方法返回“double”,过程也进入上面所说的步564。否则,调用程序被设为等于JavaInt(步566)。JavaInt是一调用程序,用于把控制从Java方法转为非同步Java方法,它不要求函数激活记录中的常数池指针并且返回32位整型或浮点值。
现转到图6,图中给出了按照本发明的优选实施例,使用专门调用程序的方法调用的方法流程图。图6的处理过程包括方法的调用,其中的方法与专门的调用程序有关或已经赋予了专门的调用程序,以便考虑方法的特性而执行特定的函数。调用程序被标识在与方法关联的方法块中,所描述的例子中的方法块包括指向专门调用程序的指针。
图6中的处理过程从调入用以执行调用的字节码的方法开始(步600),此后,目标方法的方法块被定位(步602)。处理过程转移到方法块中专门的调用程序(步604)。专门的调用程序执行必要的任务准备访问目标方法(步606),然后调用程序则调用目标方法(步608),此目标方法运行(步610),以后,目标方法执行一返回字节码(步612),返回字节码返回到调用目标方法的专门调用程序(步614)。此调用程序现在执行必要的任务以清理从调用到目标方法(步616)。目标方法的结果放在调用方法的Java堆栈中(步618)。调用方法则再去执行下一字节码(步620),然后过程结束。
现在参看图7A-7C,由专门调用程序在准备调用目标方法时执行的任务流程或步骤,按照本发明的优选实施例作了说明。流程图中所示的处理过程在图6的步606做了更详细的描述。
在图7A中,JavaInt调用程序生成函数激活记录(步700)此步骤是当作准备调用目标方法的部分而被执行。
在图7B中,JavaSyncCPoolVoid调用程序生成包含用于常数池指针的空间的函数激活记录(步702)。此后,常数池指针被存放在函数激活记录中(步704)。接着,获得对象监控器然后过程结束。
对于JavaSyncCPoolVoid调用程序,图7B中的步骤更详细地描述了图6中的步606。关于NativeDouble调用程序,在图7C中,所描述的步骤更详细地描述了图6中对调的步606。处理过程开始于逆序复制参数(步708)。此后,函数激活记录生成(步710),接着处理过程结束。
下面在图8A-8C中,根据本发明的优选实施例,说明了由专门调用程序从调用到目标方法的清理时执行的必要任务的更详细处理流程。在这些流程中的处理更详尽地描述了图6中的步616。
在图8A,JavaInt调用程序,在目标方法只完全执行后毁掉函数激活记录(步800)。在图8B,JavaSyncCPoolViod调用程序毁掉函数激活记录(步802),此后,对象监控器被释放(步804)而后过程结束。在图8C,NativeDouble调用程序毁掉函数激活记录(步806)而后过程结束。
下面转到图9A-9C,放置目标方法的结果到调用方法的Java栈的流程图,按照本发明的优选实施例作了描述,示于这些流程中的步骤更详细的说明了图6中步618。
在图9A,JavaInt调用程序放置返回的32位整型或浮点值到调用方法和Java栈(步900)。在图9B,JavaSyncCPoolVoid没有返回值(步902)。在图9c,NativeDouble调用程序存储从浮点部件(FPU)返回的浮点值到调用程序的Java栈作为64位的浮点值(步904)。
指出以下一点是重要的:在本发明对整个操作数字处理系统情况已被说明的同时,熟悉本专业的一般人都会了解。本发明的处理过程可按计算机可读介质指令形式以及多样化的形式被分发,并且不管信号的具体类型,本发明合适地应用实际习惯实现分发的承载介质。计算机可读介质的例子包括可重写类介质如软盘,硬盘驱动器,RAM,CD-ROM及传输类介质如数字的或模拟的通信链路。
为例证和说明的目的已经给出了本发明的描述,但并不打算包罗无遗或限制于本发明公开的形式,许多修改和改变对于在本领域具有一般技能的人将是明显的。例如,尽管所描述的实施例是直接针对Java中处理字节码,本发明的处理过程可被用于其它的编程语言和处理指令的环境,这些都不是专门针对在上执行指令的-计算机的。在这种情况下,计算机中的虚拟机可以解释这些指令,或将指令送到编译器以产生适合于虚拟机所处的计算机执行的代码。被选取和描述的实施例为的是更好地解释本发明的原理,其实际应用,以及让非熟悉本领域技术的人懂得本发明,带有各种修改的各种实施例可满足所注视的具体应用。
Claims (25)
1.一种用于执行一个方法的过程,该过程包括:
检测调用一方法的字节码;
确定与方法有关的方法块,其中方法块包括调用程序的标识符;
调用调用程序,其中调用程序为方法的执行进行设置;
检测该方法的完成;及
返回控制到调用程序,其中调用程序完成方法的处理。
2.权利要求1的过程,其中为执行方法的设置被完成以后,调用程序访问该方法。
3.权利要求1的过程,其中方法的完成通过返回字节码的执行而被检测出。
4.权利要求1的过程,其中方法是一被访问的方法,及其中调用程序通过调用的方法,在调用方法栈中放置返回的结果。
5.权利要求1的过程,其中方法是一被访问的方法,还包括:
由调用程序负责方法处理的完成,重新启动访问过被访问方法的调用方法垢执行。
6.权利要求1的过程,其中方法包括大量Java字节码。
7.一种用来执行非具体针对一数据处理系统的一组指令的过程,该方法包括:
负责检测指令组的调用,标识与指令组有关的调用程序;
调用调用程序,其中调用程序为指令组的执行进行设置;及
执行指令组,其中在指令组的执行完成以后,控制返回到调用程序。
8.权利要求7的过程,其中指令组是一字节码组。
9.权利要求8的过程,其中字节码组形成一方法。
10.权利要求9的过程,其中方法包括一返回字节码,在方法的执行完成以后,把控制返回给调用程序。
11.一种执行一个方法的过程,该过程包括计算机实现的步骤为:
检测方法的装入和初始化;及
选择性地把专门的调用程序同方法联系起来,其中专门的调用程序在运行时期间被使用。
12.权利要求11的过程,其中方法是与方法块有关,及其中选择的有关步骤包括:
在方法块中存贮调用程序的标识符。
13.权利要求12的过程,其中标识符是调用程序的地址。
14.权利要求11的过程,其中调用程序被用于执行访问方法所需的指令。
15.一数据处理系统,用于执行一方法,该数据处理系统包括:
第一检测装置,用来检测调用一方法的字节码;
定位装置,用来定位同方法有关的方法块,其中方法块包括调用程序的标识符;
调用装置,用来调用调用程序,其中调用程序为方法的执行进行设置;
第二检测装置,用于检测一方法的完成;及
返回装置,用于把控制返回给调用程序,其中调用程序完成方法的处理。
16.权利要求15的数据处理系统,其中为方法的执行进行的设置完成以后,调用程序访问该方法;
17.权利要求15的数据处理系统,其中方法的完成,通过返回字节码的执行而被检测。
18.权利要求15的数据处理系统,其中方法是一被访问的方法,及其中调用程序通过调用的方法在调用方法栈中放置返回的结果。
19.权利要求15的数据处理系统,其中方法是一被访问的方法,还包括:
由调用程序负责方法处理的完成,重新启动访问过被访问方法的调用方法的执行。
20.权利要求15的数据处理系统,其中该方法包括大量Java字节码。
21.一数据处理系统,用来执行非具体针对一数据处理系统的一组指令,该数据处理系统包括:
标识装置,负责检测指令组的调用,以便标识同指令组相关的调用程序;
调用装置,用来调用调用程序,调用程序对指令组的执行进行设置;及
执行装置,用来执行指令组,其中在指令组的执行完成以后,控制被返回给调用程序。
22.权利要求21的数据处理系统,其中指令组是一组字节码。
23.权利要求22的数据处理系统,其中字节码组形成一方法。
24.权利要求23的数据处理系统,其中,方法包括一返回字节码,在方法的执行完成以后,它返回控制给调用程序。
25.一种用于执行一个方法的计算机程序产品,该计算机程序产品包括:
检测调用一方法的字节码;
定位与方法有关的方法块,其中方法块包括调用程序的标识符;
调用调用程序,其中调用程序为方法的执行进行设置;
检测方法的完成;及
返回控制到调用程序,其中调用程序完成方法的处理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/240,013 | 1999-01-29 | ||
US09/240,013 US6385764B1 (en) | 1999-01-29 | 1999-01-29 | Method and apparatus for improving invocation speed of Java methods |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1265487A true CN1265487A (zh) | 2000-09-06 |
CN100378657C CN100378657C (zh) | 2008-04-02 |
Family
ID=22904735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB991270789A Expired - Lifetime CN100378657C (zh) | 1999-01-29 | 1999-12-28 | 用于改进java方法调用速度的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6385764B1 (zh) |
JP (1) | JP2000235492A (zh) |
CN (1) | CN100378657C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1311343C (zh) * | 2004-01-17 | 2007-04-18 | 三星电子株式会社 | 用于改进爪哇虚拟机性能的方法和系统 |
CN100583032C (zh) * | 2005-10-27 | 2010-01-20 | 国际商业机器公司 | 用于动态提供本地库及其相关性的方法和系统 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6671875B1 (en) * | 2000-09-21 | 2003-12-30 | International Business Machines Corporation | Manipulation of an object-oriented user interface process to provide rollback of object-oriented scripts from a procedural business logic debugger |
US20040015912A1 (en) * | 2000-11-20 | 2004-01-22 | Bottomley Thomas Mark Walter | Method of byte code quickening: quick instructions for method invocation |
CA2346762A1 (en) * | 2001-05-07 | 2002-11-07 | Ibm Canada Limited-Ibm Canada Limitee | Compiler generation of instruction sequences for unresolved storage devices |
US20030041319A1 (en) * | 2001-08-24 | 2003-02-27 | Sun Microsystems, Inc. | Java bytecode instruction for retrieving string representations of java objects |
US7032230B2 (en) * | 2001-08-27 | 2006-04-18 | International Business Machines Corporation | Efficient virtual function calls for compiled/interpreted environments |
WO2003027842A2 (en) * | 2001-09-25 | 2003-04-03 | Koninklijke Philips Electronics N.V. | Software support for virtual machine interpreter (vmi) acceleration hardware |
US7039911B2 (en) * | 2002-05-17 | 2006-05-02 | Naturalbridge, Inc. | Hybrid threads for multiplexing virtual machine |
US20040083467A1 (en) * | 2002-10-29 | 2004-04-29 | Sharp Laboratories Of America, Inc. | System and method for executing intermediate code |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7861234B1 (en) * | 2005-02-23 | 2010-12-28 | Oracle America, Inc. | System and method for binary translation to improve parameter passing |
US7716646B2 (en) * | 2006-05-11 | 2010-05-11 | Rekha Kaushik | Loading a chain of processors from an XML file |
US8176491B1 (en) * | 2006-08-04 | 2012-05-08 | Oracle America, Inc. | Fast synchronization of simple synchronized methods |
US7949826B2 (en) * | 2007-07-05 | 2011-05-24 | International Business Machines Corporation | Runtime machine supported method level caching |
US8132162B2 (en) * | 2007-07-05 | 2012-03-06 | International Business Machines Corporation | Runtime machine analysis of applications to select methods suitable for method level caching |
US9183021B2 (en) * | 2011-05-31 | 2015-11-10 | Red Hat, Inc. | Runtime optimization of application bytecode via call transformations |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5226161A (en) * | 1987-08-21 | 1993-07-06 | Wang Laboratories, Inc. | Integration of data between typed data structures by mutual direct invocation between data managers corresponding to data types |
JPH0695312B2 (ja) * | 1991-11-21 | 1994-11-24 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータプログラムを処理する方法およびシステム |
US5715463A (en) * | 1992-03-31 | 1998-02-03 | International Business Machines Corporation | Installation utility for device drivers and utility programs |
US5970252A (en) * | 1997-08-12 | 1999-10-19 | International Business Machines Corporation | Method and apparatus for loading components in a component system |
US6295643B1 (en) * | 1998-12-10 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for improving java virtual machine performance using persistent execution information |
-
1999
- 1999-01-29 US US09/240,013 patent/US6385764B1/en not_active Expired - Lifetime
- 1999-12-28 CN CNB991270789A patent/CN100378657C/zh not_active Expired - Lifetime
-
2000
- 2000-01-27 JP JP2000019037A patent/JP2000235492A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1311343C (zh) * | 2004-01-17 | 2007-04-18 | 三星电子株式会社 | 用于改进爪哇虚拟机性能的方法和系统 |
CN100583032C (zh) * | 2005-10-27 | 2010-01-20 | 国际商业机器公司 | 用于动态提供本地库及其相关性的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
JP2000235492A (ja) | 2000-08-29 |
US6385764B1 (en) | 2002-05-07 |
CN100378657C (zh) | 2008-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1149478C (zh) | 从本地码有效调用Java方法的方法和设备 | |
US11175896B2 (en) | Handling value types | |
CN100378657C (zh) | 用于改进java方法调用速度的方法和装置 | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
Alpern et al. | Implementing jalapeño in java | |
US6363522B1 (en) | Method and apparatus for handling exceptions as normal control flow | |
CN100370425C (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN1119756C (zh) | 用于进行静态初始化的方法和系统 | |
US6868488B2 (en) | Binned remembered sets | |
US6799173B2 (en) | Method and apparatus for sharing code containing references to non-shared objects | |
US20040205740A1 (en) | Method for collection of memory reference information and memory disambiguation | |
CN1848088A (zh) | 将本机接口函数调用转换为更简单操作的方法和系统 | |
CN106033370B (zh) | 64位Java虚拟机的实现方法及装置 | |
CA2434280A1 (en) | Method and apparatus to guarantee type and initialization safety in multihreaded programs | |
CN1143212C (zh) | 实现快速子类和子类型检查的方法与设备 | |
US6941550B1 (en) | Interface invoke mechanism | |
US6883165B1 (en) | Apparatus and method for avoiding deadlocks in a multithreaded environment | |
US6553426B2 (en) | Method apparatus for implementing multiple return sites | |
US7743377B2 (en) | Cooperative threading in a managed code execution environment | |
CN1287280C (zh) | 用于在运行时提高函数的执行性能的方法和计算系统 | |
US7194736B2 (en) | Dynamic division optimization for a just-in-time compiler | |
US20060101439A1 (en) | Memory management in a managed code execution environment | |
WO2003001371A2 (en) | Storing and retrieving of field descriptors in java computing environments | |
KR100649799B1 (ko) | 고속 서브-클레스 검사 및 서브-타입 검사를 컴퓨터에 의해 구현하는 방법 그 시스템 | |
US6996825B2 (en) | Method and apparatus for efficient object sub-typing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20080402 |
|
CX01 | Expiry of patent term |