CN1149478C - 从本地码有效调用Java方法的方法和设备 - Google Patents
从本地码有效调用Java方法的方法和设备 Download PDFInfo
- Publication number
- CN1149478C CN1149478C CNB001081608A CN00108160A CN1149478C CN 1149478 C CN1149478 C CN 1149478C CN B001081608 A CNB001081608 A CN B001081608A CN 00108160 A CN00108160 A CN 00108160A CN 1149478 C CN1149478 C CN 1149478C
- Authority
- CN
- China
- Prior art keywords
- parameter
- handling system
- data handling
- java
- local
- 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/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)
- Stored Programmes (AREA)
Abstract
用来从本地码执行Java方法的数据处理系统中的方法和设备。在首次执行该方法之前检查该方法,来确认从该方法的参数集中选择的参数的出现。生成位掩码来描述被选参数。用位掩码拷贝参数集至帧。而且,使用一个新的返回字节码来处理本地调用方法的返回。用确认有关该方法的信息的方法处理方法块的位置。
Description
技术领域
本发明一般涉及数据处理系统,特别是涉及用来执行数据处理系统中的指令的方法和设备。更特别的是,本发明涉及从本地码调用Java方法的方法和设备。
背景技术
Java是面向对象的编程语言和环境,主要是定义数据为可对象和应用于这些对象的方法。“Java”是太阳微系统公司的商标。Java只支持单一继承,意味着在任意给定时间每一类只能继承于一个其它的类。Java也容许生成完全抽象的类,作为接口,它容许定义方法,该方法与几个类共享不考虑其它的类如何处理该方法。Java提供发布软件至不同计算平台的机制。
Java能够支持许多类型的数据处理系统的应用,它可包括各种各样的中央处理单元和操作系统结构。Java虚拟机(JVM)是驻留在存储器中的虚拟计算元件。JVM容许Java程序执行在不同平台上,与之相反的是只为一个平台来编译代码。为JVM编译Java程序。在这种方式下,Java能够支持许多类型的数据处理系统的应用,它包含各种各样的中央处理单元和操作系统结构。为了使得Java应用执行在不同类型的数据处理系统上,编译器一般生成与结构无关的文件格式。假如出现Java运行系统,编译码在许多处理器上是可执行的。Java编译器生成不特定于特殊计算结构的字节码指令。字节码是由Java编译器生成并由Java解释器执行的机器独立码。Java解释码在JVM中是一个模块,它或解码或执行一个或多个字节码。这些字节码指令设计为在任何机器上容易解释并且容易翻译成本地机器码。
开发环境,如从太阳微系统公司可得到的Java开发包(JDK),可用来从Java语言源代码和库生成Java字节码。这种Java字节码可以作为网络服务器上的Java应用或小应用(applet)保存,这里它能通过网络下载到用户机且执行在本地JVM上。
当在执行Java程序需要额外速度时,及时(JIT)编译器可用来将方法和类的字节码,在执行它们之前,翻译成本地机器指令。一般地,这种编译方法每种方法只出现一次。一些JIT编译器在某一时间可以编译全部类,而不是一种方法。
Java方法通常从本地码中调用,并且从本地码中调用Java方法当时可用的方法严重缺乏。对于每个这样的调用,控制传给JVM,JVM在不同的家务管理步骤后,产生由目标方法调用和返回组成的临时Java方法。这种必备常量池也被生成,且一般包括4个实体:CONSTANT-MethodRef,它指向CONSTANT-NameAndType,CONSTANT-NameAndType依次指向二个CONSTANT-Utf8字符串,CONSTANT-Utf8确定目标方法名和签名。JVM也生成Java堆栈上的Java帧,在方法签名的控制下,从本地堆栈拷贝目标Java方法的参数至Java堆栈。然后标记Java帧表示当目标Java方法完成时,需要返回本地码。然后控制传递给解释器来执行刚刚生成的临时方法。当解释调用字节码时,它经历过程“quickification”,该过程涉及开销大的Methodref操作数的常量池的决定和调用字节码的修改。然后新的“quickified”字节码被解释,最终使得原来的目标方法被调用。当目标Java方法完成时,用执行一个标准返回字节码的方法,解释器必须检查Java帧来判断方法是返回Java码还是返回本地码。当从本地码调用时,执行以上所有步骤需要相当的时间并且减缓Java方法的调用。另外,在所有Java方法调用上承担轻微的性能损失,在该调用中返回字节码的解释必须包括返回本地码的检查步骤。因此,有从本地码调用Java方法的改进的方法和设备是有利的。
发明内容
本发明提供在数据处理系统中从本地码调用Java方法的方法和设备。在首次执行该方法之前确认该方法的参数集中被选参数的出现,检查该方法。产生位掩码来描述被选参数。使用该掩码拷贝参数集至帧。而且,新的返回字节码用来处理返回本地调用方法。用确认有关该方法信息的方法来处理方法块位置。
根据本发明的一个方面,提供一种从用本地码编写的方法调用可解释方法的过程,包括:
当被本地码调用时,在使用方法的类装载时收集可解释方法的参数信息;和
装载已收集的参数信息至由解释可解释方法的解释器使用的帧,生成已解释的方法。
从本地方法执行可解释方法的数据处理系统中的过程,该过程包括下列步骤:
在首次执行方法之前检查方法来确认从该方法的参数集之中选择的参数的出现;
生成位掩码来描述被选择的参数;并且
用掩码拷贝参数集至帧。
根据本发明的一个方面,提供一种数据处理系统中的过程,从特定于数据处理系统的本地方法调用不特定于数据处理系统的多个指令,该过程包括下列步骤:
在首次执行指令之前检查非特定于数据处理系统的多个指令来确认从多个指令的参数集中被选参数的出现;
生成位掩码描述被选参数;和
用掩码拷参数集。
根据本发明的一个方面,提供一种数据处理系统中的过程,从非特定于数据处理系统返回至本地码,该过程包括下列步骤:
从本地调用者接收调用来执行可解释方法;
响应接收调用,生成指向被选返回字节码的指针;和
响应在java方法中遇到的返回,执行被选返回字节码,其中被选返回字节码将作为执行可解释方法的结果的任何出现的返回值移动到被本地调用者使用的地点,并返回控制给本地调用者。
根据本发明的一个方面,提供一种从用本地码编写的方法调用可解释方法的数据处理系统,包括:
收集装置,它用来在用本地码编写的方法的类装载时,收集可解释方法的参数;和
使用装置,它用来使用被收集的参数来装载由解释可解释方法的解释器使用的帧,生成可解释的方法。
从本地码执行可解释方法的数据处理系统,数据处理系统包括:
检查装置,用来在首次执行方法之前检查方法来确认从方法的参数集之中选择的参数的出现;
生成装置,用来生成位掩码来说明已选择的参数;和
拷贝装置,用来使用掩码拷贝参数集至帧。
根据本发明的一个方面,提供一种数据处理系统,从特定于数据处理系统的本地方法调用不特定于数据处理系统的多个指令,数据处理系统包括:
检查装置,用来在首次执行指令之前检查非特定于数据处理系统的多个指令,来确认从多个指令的参数集中选择的参数的出现;
生成装置,用来生成位掩码来说明被选参数;
拷贝装置,用来使用掩码拷贝参数集。
根据本发明的一个方面,提供一种从非特定于数据处理系统的代码返回至本地码的数据处理系统,该数据处理系统,包括:
接收装置,从本地调用者接收调用来执行可解释方法;
生成装置,响应接收调用,生成指向被选返回字节码的指针;和
执行装置,响应可解释方法中遇到的返回,执行被选返回字节码,
其中被选返回字节码将作为执行可解释方法的结果的任何出现的返回值移动到被本地调用者使用的位置,并返回控制给本地调用者。
附图说明
被认为是本发明特征的新颖功能在后面的权利要求书中提出。然而发明本身与使用的优先模式,还有其中的对象和优点,将参照下面示范实施例的详细说明,结合附图阅读理解起来最好,其中:
图1是描述处理系统的图形表示,在这里,本发明依照本发明的优先实施例可以实现;
图2是说明数据处理系统的方框图,在这里,本发明依照本发明的优先实施例可以实现;
图3是依照本发明的优先实施例,Java虚拟机的方块图;
图4是依照本发明的优先实施例,描述的方法块的方框图;
图5是依照本发明的优先实施例,描述的生成Java功能参数的位掩码的处理流程图;
图6A-6C是依照本发明的优先实施例,描述从本地帧拷贝参数制java帧的处理流程图;
图7是依照本发明的优先实施例,描述由本地返回字节码使用的处理流程图;以及
图8是依照本发明的优先实施例,描述定位方法块的处理流程图。
现在参照图特别是参照图1,描述数据处理系统的图形表示,在该系统中根据本发明的优先实施例,本发明可以实现。个人计算机100描述为包括系统单元110,视频显示终端102,键盘104,可以包括软盘驱动器和其它类型的永久和可移动存储介质的存储设备108,鼠标106。附加的输入设备可以包括在个人计算机100中。个人计算机100能用任何合适的计算机来实现,如IBM AptivaTM计算机,它是纽约Armonk的国际商业机器公司的产品。尽管被描述的表示显示为个人计算机,但本发明的其它实施例可用其它类型的数据处理系统来实现,如网络计算机,基于网络的电视顶置盒,因特网应用产品等等。计算机100也更适宜地包括图形用户界面,它可用驻留在计算机100中操作中的计算机可读媒体中的系统软件的方法来实现。
现在参照图2,说明可实现本发明的数据处理系统的方块图。数据处理系统200是计算机的一个实例,如在图1中的计算机100,在图1中可以定位JVM完成本发明的过程。数据处理系统200使用外部元件互联(PCI)本地总线结构。虽然被描述的实例使用PCI总线,也可使用其它的总线结构,如微通道和ISA。处理器202和主存储器204通过PCI桥208连接至PCI本地总线206。PCI桥208也可包括集中存储器控制器和处理器202的缓存。可以通过直接元件互联或通过附加功能板与PCI本地总线建立附加连接。在描述的实施例中,局域网(LAN)适配器210,SCSI主总线适配器212和扩展总线接口214用直接元件连接的方法与PCI本地总线连接。相反,音频适配器216,图形适配器218和音频/视频适配器219由插到扩展槽中的附加功能板连接至PCI本地总线206。扩展总线接口214提供键盘和鼠标适配器220,调制解调器222和附加存储器224的连接。SCSI主总线适配器212提供硬盘驱动器226,磁带驱动器228和CD-ROM驱动器230的连接。典型的PCI本地总线执行支持三个或四个PCI扩展槽或附加功能连接器。
操作系统在处理器202上运行并且在图2中的数据处理系统200内用来协调和提供不同元件的控制。操作系统可以是商用操作系统,如OS/2,它来自国际商业机器公司。“OS/2”是国际商业机器公司的商标。面向对象的编程系统如Java可以与操作系统一起运行且从执行在处理系统200上Java程序或应用向操作系统提供调用。“Java”是太阳微系统公司的商标。操作系统指令,面向对象的操作系统和应用或程序位于存储设备上,如硬盘驱动器226,并且可以装载到主存储器204,由处理器202执行。
本领域的技术人员将理解图2中的硬件可根据执行的不同而不同。其它的内部硬件或外部设备,如闪ROM(或相当的非易失存储器)或光盘驱动器之类,可以用来附加或替代图2中描述的硬件。本发明的处理也可以应用到多处理器数据处理系统。
例如,数据处理系统200,如果有选择的配置为一个网络计算机,可以不包括SCSI主总线适配器212,硬盘驱动器226,磁带驱动器228和CD-ROM230,在图2中用点线232注释表示可选内含物。在那种情况下,计算机,应该称之为客户计算机,必须包括某些类型的网络通信接口,如LAN适配器10,调制解调器222或诸如此类。作为另一个实例,无论数据处理系统200是否包含某种类型的网络通信接口,数据处理系统200可以是配置为不依靠某种类型的网络通信接口可启动的单机系统。还是作为另一个实例,数据处理系统200可以是一个个人数字助理(PDA)设备,为了提供保存操作系统文件和/或用户生成的数据的非易失存储器,PDA设备用ROM和/或闪ROM来配置。
图2中描述的实例和上述例子并不意味着结构上的限制。
本发明提供从本地码调用Java方法的方法,设备和指令,在该本地码中避免生成临时Java方法和对应的常量池。而且,本发明的机制避免方法调用过程中在JVM中不必要的家务管理(housekeeping),也避免标识和检查“返回本地”的java帧和必须在对应的常量池中解决实体的临时Java方法的“quickification”。而且,本发明也提供从本地码拷贝参数至javastack堆栈的一个更有效的方法。例如,使用原有方法,860指令用来从本地码调用特殊的Java方法,同时本发明的处理用50条指令完成同样的结果。
本发明提供在Java类中定位某方法的方法块的机制。以前,使用临时Java方法和代表目标Java方法的一个“调用”的对应的常量池。决定由临时Java方法引用的常量池入口使得目标方法的方法块被定位。本发明用检查已引用的Java类的方法直接定位目标方法的方法块。在许多情况下,Java方法的方法块对本地码是已知的并且能直接使用。在其它情况下,提供方法名和签名以及对象或类引用,并且本发明的机制用一种简单直接查找来找到方法块。
而且,本发明的机制从本地堆栈拷贝参数制javastack堆栈为目标方法使用。本地码按从右向左的顺序放置参数在本地堆栈上。本地码,一般用ANSI C编程语言编写,有这种本地调用习惯。按照Java调用惯例所需的从左至右的顺序,这些参数被放置在javastack堆栈上。对于64位参数,Java赋予类型为长和双精度,有必要按照正确顺序拷贝二个32位字。32浮点参数,Java赋予类型浮点,当从本地堆栈拷贝至javastack堆栈上时也需要特别注意。ANSI C有关传送32位浮点参数制变量参数列函数的规则(在JVM中被本地码调用来执行Java方法的本地函数为变量参数列函数)需要32位浮点参数提升至64位浮点值。因此,该参数作为64位浮点值存在于本地堆栈上,并且在拷贝到javastack堆栈上之前必须转换成32位浮点值。以前,Java方法签名为ASCII字符串,在每个参数方法调用过程中被检查,然后根据签名中的参数类型参数被拷贝。相反,本发明使用在类装载时收集的信息在方法调用时避免昂贵的签名检查。在类装载时,本发明的机制检查方法签名来判断当参数从本地堆栈拷贝至javastack堆栈时,参数是否传送给需要特殊处理的方法。如果出现任何这样的参数类型,产生32位掩码表示需要特别处理的参数的位置。当从本地码调用该方法时,于是位掩码被检查以控制参数拷贝。
使用本发明的机制的方法调用涉及直接传递控制至在方法块中确定的调用者,而不是执行临时Java方法。在描述的实施例中,本地方法堆栈是C堆栈。本地堆栈中的参数为从右至左顺序,但Java堆栈需要它们为从左至右顺序,因此它们必须被拷贝且参数顺序逆转。然而,长,双精度和浮点类型因简单地按逆序拷贝字产生问题。“长”为64位带符号位的两个整数(-263至263-1,兼容)。“浮点”是32位IEEE 754单精度浮点数。“双”是64位IEEE 754双精度浮点数。二个字组成64位参数的顺序必须保存起来。由于ANSI C有关传递浮点参数至变量参数列函数的规则,浮点参数提升到双精度,然后在本地堆栈上占用二个字。然而,该参数在放置在javastack堆栈上之前必须转换回浮点。如果这些类型在参数列中不被使用,可以使用“简单拷贝”,即不管参数类型只某一段时间一个字地拷贝这些参数。如果这些类型出现在参数列中,那么为了正确拷贝,拷贝逻辑需要知道每个参数的类型。如果列中不超过16个参数,那么在位掩码的控制下,能够使用“掩码拷贝”。该位掩码表示在本地堆栈上一个参数是否占用而个字,另外还表示参数是否为浮点类型。每个参数在32位掩码中用2位来描述。因此,掩码至多能描述16个参数。如果这些类型出现在参数列中且有多于16个参数,那么掩码中没有足够的空间来描述所有参数,因此为了正确拷贝这些参数,必须使用检查方法签名的缓慢的现有技术。这种情况是很罕见的。
在最终返回本地码的准备过程中,当前可用的方法根据调用标记Java帧表示需要返回本地。这种标记必须由所有Java返回字节码的逻辑来检查。相反,本发明引入了一个新字节码NativeReturn,它能避免这种检查的需要。这个新字节码的使用减少需要从Java方法返回本地码或Java码的指令的数量。在方法调用之前设置Java帧的域returnPC指向NativeReturn字节码。当目标方法最后执行它的返回字节码时,返回的“自然”过程将控制传递给完成返回本地调用者的NativeReturn字节码。
现在参考图3,根据本发明的优先实施例描述了Java虚拟机的方框图。Java虚拟机(JVM)300包括类装载子系统302,它是装载诸如已赋予完全合格名的类和接口的类型的机构。JVM300也包括运行时间数据区304,执行引擎306和本地方法接口308。
执行引擎306是执行包含在由类装载子系统302装载的类的任何方法中的指令的机构。在描述的实例中,执行引擎306包括及时(JIT)编译器310和解释器312。字节码组成方法且为JVM300的一系列指令。每个指令由后面跟随0或更多的固定操作数的1-字节操作码组成。该操作码表示将要执行的操作。变量操作数和数据出现在Java操作数堆栈327上,327出现在Java堆栈316中。解释器312响应该字节码将引发必须的代码或指令的执行。
编译器310是及时(JIT)编译器,在编译器里,当方法被选为候选编辑后,方法的字节码一般在本方法被调用的第一次被编译成本地机器码。选择可以根据方法的先前CPU的消耗,调用次数或一些其他标准。也可能所有方法可被选作编辑而不考虑标准。然后该方法的本地机器码被缓存或保存在缓冲区内,这样该代码能在调用同一方法的下一次重新使用。在描述的实例中,本发明的机制容许部分及时编译或方法的及时化。
本地方法接口308用作一个接口,容许Java程序用调用本地方法的方法与主机交互。本地方法一般保存在动态连接库中。特殊的本地方法接口的例子是Java本地接口(JNI)。基本上,本地方法接口308容许在下面的操作系统中访问资源。
运行时间数据区304包括本地方法堆栈314,Java堆栈316,PC寄存器318,方法区320,堆322和JIT站324。这些不同的数据区代表由JVM300需要的执行程序的存储器组织。本地方法堆栈314存储本地方法和其他本地码的调用状态。Java堆栈316用作保存Java方法调用的状态,同时PC寄存器318用作表示将执行的下一个指令。本地方法堆栈314和Java堆栈316都分为多个帧保存在Java方法和本地码执行过程使用的信息。方法区320包含类数据同时堆322包含所有的初始化对象。JIT站324用来保存诸如流控制信息,寄存器分配和虚拟操作数堆栈目录的方法编辑所需的所有信息。JIT站可被定位为存储器的单一的邻近区,或者可以是存储器的多个非邻近区,或者动态分配或可重用。
现在参照图4,根据本发明的优先实施例描述方法块的方框图。方法块400包含有关方法的信息。例如,类对象指针,方法签名和字节码指针包含在方法块400中。在描述的实施例中,掩码402也是包含在方法块400中。特别地,掩码402是位掩码用来决定参数应该如何从本地方法堆栈中的帧拷贝至Java堆栈中的帧。方法块400可以在图3中的方法区320中找到。
现在参照图5,根据本发明的优先实施例,描述了生成Java函数参数的位掩码的过程的流程图。过程开始时,设置变量mask等于0,设置变量count等于0,且设置变量special为0(步骤500)。接着,对于方法是否为静态方法作出判断(步骤502)。如果该方法不是静态方法,作为第一个参数传递给非静态方法的“隐藏”对象引用必须计数且过程进行到步骤528,变量count加一,过程然后进行到步骤504。另一方面,如果方法是静态方法,然后对于将要检查的附加参数是否出现作出判断(步骤504)。如果将要检查的附加参数出现,就获得下一个参数(步骤506)。下一步,掩码右移2位(步骤508)。该例中的掩码分成几个位对。在本例中,对中的第一个位用来确认参数是否为需要特殊处理的参数,同时对中的第二个位用来确认或指定处理类型或参数类型。掩码移动二位达到用来确认参数的下一对位。然后,对于参数是否为浮点类型作出判断(步骤510)。如果参数为浮点类型,值0xc0000000是按位顺序进行或操作进入掩码(步骤512)。然后变量special设置等于true(步骤514),表示已经找到需要特殊处理的参数,然后过程返回到步骤528给变量count加一。
再参考步骤510,如果参数不是浮点类型,然后对于参数是否为双精度类型作出判断(步骤516)。如果参数为双精度类型,值0x80000000按位顺序或操作进入掩码(步骤518),然后过程进行到步骤514,如上所述。
再参考步骤516,如果参数不是双精度类型,那么对于参数是否为长类型作出判断(步骤520)。如果参数为长类型,过程进行到步骤518,如上所述。否则,过程返回步骤528。
再参考步骤504,如果已经检查了方法的所有参数,那么对于变量special是否设为真且变量count是否大于16作出判断(步骤522)。如果变量special为真且变量count是否大于16,那么方法有需要特殊处理的参数,而且掩码中没有足够空间来描述所有参数。掩码设为0xffffffff(步骤524)来指明该条件。然后掩码保存在方法块中(步骤526),过程接着中止。如果变量special非真或变量count小于17,在步骤526掩码也保存在方法块中。
现在参考图6A-6C,根据本发明的优先实施例,描述了从本地帧拷贝参数至Java帧的过程的流程图。在图6A,过程开始时,从方法块获得掩码值(步骤600)。接着,对于方法是否为静态方法作出判断(步骤6 02)。如果方法不是静态方法,那么方法应用到特殊对象,且引用该对象的对象作为“隐藏”的第一个参数放置在Java帧中,过程进行到步骤604。如果方法是静态方法,那么对于掩码是否设为0作出判断(步骤604)。如果掩码不等于0,那么对于掩码是否等于0xffffffff作出判断(步骤605)。0xffffffff的掩码值可以由图5中的步骤524来设置,表示掩码不能描述参数。如果掩码不等于0xffffffff,那么执行“掩码复制”,过程进行到图6B。在这种情况下,该方法的参数包括64位或浮点参数,而且少于17个参数。在这种情况下,对于更多参数是否出现在本地帧中来拷贝作出判断(步骤608)。
如果没有更多的要拷贝的参数,过程中止。否则,对于掩码的最重要位“MSB”是否设为1作出判断(步骤610)。如果掩码的MSB设为1,那么掩码左移一位。在步骤612掩码左移一位移到位对的第二位,用来确认处理参数所要采用的参数类型或动作类型。然后对于掩码的MSB是否设为1作出判断(步骤614)。如果掩码的MSB设为1,那么从本地帧获得下二个字(步骤616)。这二个字从双精度转换为浮点(步骤618)。然后浮点放置Java帧中(步骤620)。接着,掩码左移一位(步骤622),过程接着返回步骤608,如上所述。
再参考步骤614,如果掩码的MSB不设为1,那么从本地帧获得下二个字(步骤624),这二个字放置Java帧中保持找到他们时的顺序(步骤626)。接着,过程进行到步骤622,如上所述。
再参考步骤610,如果掩码的MSB不设为1,那么从本地帧获得下一个字(步骤628)。然后,这二个字放置Java帧中(步骤630)。然后掩码左移2位(步骤632),过程接着返回步骤608,如上所述。掩码左移2位,移到与下一个参数有关的下一个位对。
再参照图6A中的步骤605,如果掩码设为等于0xffffff,那么执行“签名复制”,过程进行到图6C。在这样情况下,方法的参数包括64位或浮点参数,并且有不只16个参数。然后对于在本地帧中是否出现更多的要拷贝的参数作出判断(步骤634)。如果有更多的要拷贝的参数,过程中止。否则,检查方法签名来判断下一个参数的类型(步骤636)。接着,对于下一个参数是否为双精度类型或长类型作出判断(步骤638)。如果下一个参数不是双精度类型或长类型,那么对于下一个参数是否为浮点类型作出判断(步骤640)。如果下一个参数不是浮点类型,那么从本地帧中获得下一个字(步骤642)。该字放置到Java帧中,过程接着返回步骤634,如上所述。
再参照步骤640,如果下一个参数为浮点,从本地帧获得下2个字(步骤646)。接着,这2个字从双精度转换成浮点(步骤648)。然后,该浮点放置在Java帧中(步骤650),过程接着返回步骤634。
再参照步骤638,如果下一个参数为双精度或长类型,那么从本地帧获得下2个字(步骤652)。这2个字放置在Java帧中,保持他们原来的顺序(步骤654),过程接着返回步骤634,如上所述。
再参照图6A中的步骤604,如果掩码设为0,那么将发生“简单复制”,因为没有出现64位或浮点参数。然后对于在本地帧中是否出现更多的要拷贝的参数作出判断(步骤656)。如果没有更多的要拷贝的参数,过程中止。否则,从本地帧中获得下一个字(步骤658)。该字放置在本地帧中(步骤660),过程接着返回步骤656,如上所述。
现在参照图7,根据本发明的优先实施例,描述了本地返回字节码使用的过程的流程图。当本地码调用Java方法时执行该过程。过程开始时,调用JVM的本地调用者执行Java方法(步骤700)。本例中的本地调用者是生成Java方法调用的本地码或指令。然后JVM定位目标Java方法的方法块(步骤701)。然后JVM保存本地调用者寄存器,并且产生该方法的Java帧,从本地帧拷贝参数(步骤702)。在描述的实施例中,本地帧是C帧。接着,JVM将NativeReturn字节码的地址放置到Java帧的域returnPC上(步骤704)。然后JVM调用方法的调用者,开始执行Java方法(步骤706)。接着,方法正常执行,并且用执行标准返回字节码的方法逐渐返回给其调用者(标准708)。响应执行标准返回字节码,JVM毁灭Java帧,从Java方法转移控制并且在Jav帧的域returnPC中的地址继续解释(步骤710)。NativeReturn字节码被解释,并且控制与目标Java方法的返回值一起转移回原来的本地调用者(步骤712)。特别地,如果有Java方法的返回值的话,它被移到合适的寄存器上,由本地调用者接收。然后,先前保存的本地调用者的寄存器被恢复,控制返回给本地调用者,然后过程中止。
现在参考图8,根据本发明的优先实施例描述了定位方法块的过程的流程图。过程开始时,输入调用者传递给它的参数(步骤800)。这些输入参数包括2组。组1是一对象或类,在它上面定位方法,而组2包括要定位的方法名和签名。
然后对于组1参数是否为对象作出判断(步骤802)。如果组1是对象,变量class设为等于该对象的类,过程进行到步骤806,如下所述。
再参照步骤802,如果组1不是对象,那么它是类并且变量class设为等于组1(步骤804)。然后,对于在由变量class引用的类中还有没有剩下要检查的方法作出判断。如果在类中没有要检查的方法,那么对于该类是否有超级类作出判断。如果该类有超级类,那么变量class设为等于超级类(步骤810),然后过程返回至步骤806。否则,过程返回0,因为没有找到方法块(步骤812),然后过程中止。
再参考步骤806,如果附加方法在由变量class引用的类中仍然要检查,获得类中的下一个方法(步骤814)。然后对于已获得的方法的方法名和签名是否匹配组2作出判断。如果不匹配,过程返回步骤806,如上所述。否则,对于方法是否为组1的超级类的构造器作出判断。在Java语言中从超级类继承构造器是不合法的。如果方法不是组1的超级类的构造器,返回该方法的方法块,然后过程中止。否则,过程进行到步骤812,如上所述。
必须注意到,根据全功能数据处理系统的上下文,描述本发明备的同时,本领域的一般技术人员应该理解,本发明的过程能够按计算机可读指令媒体的形式和不同形式发布,并且本发明同样应用,不考虑信号的特殊类型,该信号带有实际上用来执行发布的媒体。计算机可读媒体的例子包括可记录类媒体,如软盘,硬盘驱动器,RAM和CD-ROM,以及传输类媒体,如数字和模拟通信链接。
描述本发明用作说明,不意味着没有遗漏或将它限制在已披露的形式。对于本领域的技术人员能作出许多修改和变化。例如,虽然指导描述的实施例来处理Java中的字节码,本发明的处理可以应用到其他处理指令的编程语言和环境,它不特定为将在其上执行指令的计算机。在这种情况下,计算机上的虚拟机可以解释指令或发送指令至编译器来生成虚拟机位于其中的计算机适合执行的代码。特别地,本发明可以用其他的可解释的方法而不是java方法使用。选择和说明实施例是为了更好解释本发明的主旨,实际应用,以及使得本领域的其他的一般技术人员理解有各种各样的修改的不同实施例的发明,这些习惯适合于所希望的特殊应用。
Claims (48)
1.一种从用本地码编写的方法调用可解释方法的过程,包括:
当被本地码调用时,在使用方法的类装载时收集可解释方法的参数信息;和
装载已收集的参数信息至由解释可解释方法的解释器使用的帧,生成已解释的方法。
2.如权利要求1的过程还包括:
在解释器中用已知方法块调用可解释方法;和
用在已知方法块中确认的调用者调用已解释方法。
3.如权利要求1的过程还包括:
产生字节码表示返回本地码。
4.从本地方法执行可解释方法的数据处理系统中的过程,该过程包括下列步骤:
在首次执行方法之前检查方法来确认从该方法的参数集之中选择的参数的出现;
生成位掩码来描述被选择的参数;并且
用掩码拷贝参数集至帧。
5.如权利要求4中的过程,其中可解释的方法是Java方法。
6.如权利要求4中的过程,其中参数从C帧拷贝至Java帧。
7.如权利要求4中的过程,其中掩码是32位掩码。
8.如权利要求4中的过程,其中被选择的参数是64位参数和32位浮点参数。
9.如权利要求4的过程,其中掩码是包括多个位的位掩码,其中多个位编组成对,在对中的第一位表示与该对相关的参数是否为被选择的参数,对中的第二位表示被选择的参数如何被处理。
10.如权利要求9中的过程,其中在第一位中的逻辑1位值表示被选参数的出现。
11.如权利要求4中的过程,其中在类装载时执行检查步骤。
12.一种数据处理系统中的过程,从特定于数据处理系统的本地方法调用不特定于数据处理系统的多个指令,该过程包括下列步骤:
在首次执行指令之前检查非特定于数据处理系统的多个指令来确认从多个指令的参数集中被选参数的出现;
生成位掩码描述被选参数;和
用掩码拷参数集。
13.如权利要求12的过程,其中非特定于数据处理系统的多个指令是java字节码。
14.如权利要求12的过程,其中java字节码形成方法。
15.如权利要求12的过程,其中被选参数是浮点类型。
16.如权利要求12的过程,其中被选参数是双精度类型。
17.如权利要求12的过程,其中被选参数是长类型。
18.如权利要求12的过程,其中掩码是包含多个位的位掩码,其中多个位编组成对,在对中的第一位表示与该对相关的参数是否为被选择的参数,对中的第二位表示被选择的参数如何被处理。
19.如权利要求18中的过程,其中在第一位中的逻辑1位值表示被选参数的出现。
20.如权利要求14中的过程,还包括:
用确认java方法的方法来定位java方法的方法块。
21.如权利要求20中的过程,其中确认包括方法名,签名和对象引用或类引用。
22.一种数据处理系统中的过程,从非特定于数据处理系统返回至本地码,该过程包括下列步骤:
从本地调用者接收调用来执行可解释方法;
响应接收调用,生成指向被选返回字节码的指针;和
响应在java方法中遇到的返回,执行被选返回字节码,其中被选返回字节码将作为执行可解释方法的结果的任何出现的返回值移动到被本地调用者使用的地点,并返回控制给本地调用者。
23.如权利要求22的数据处理系统中的过程,其中可解释方法是java方法。
24.如权利要求22的数据处理系统中的过程,其中被选返回字节码恢复本地调用者的寄存器。
25.一种从用本地码编写的方法调用可解释方法的数据处理系统,包括:
收集装置,它用来在用本地码编写的方法的类装载时,收集可解释方法的参数;和
使用装置,它用来使用被收集的参数来装载由解释可解释方法的解释器使用的帧,生成可解释的方法。
26.如权利要求25的数据处理系统,还包括:
使用装置,它用已知方法块调用解释器中的可解释方法;和
调用装置,它使用在已知方法块中确认的调用者调用已解释方法。
27.如权利要求25的数据处理系统,还包括:
生成装置,它生成字节码以表示至用本地码编写方法的返回。
28.如权利要求24的数据处理系统,其中可解释方法是java方法。
29.从本地码执行可解释方法的数据处理系统,数据处理系统包括:
检查装置,用来在首次执行方法之前检查方法来确认从方法的参数集之中选择的参数的出现;
生成装置,用来生成位掩码来说明已选择的参数;和
拷贝装置,用来使用掩码拷贝参数集至帧。
30.如权利要求29的数据处理系统,其中参数从C帧拷贝至Java帧。
31.如权利要求29的数据处理系统,其中掩码是32位掩码。
32.如权利要求29的数据处理系统,其中被选择的参数是64位参数和32位浮点参数。
33.如权利要求29的数据处理系统,其中掩码是包括多个位的位掩码,其中多个位编组成队,在对中的第一位表示与该对相关的参数是否为被选择的参数,对中的第二位表示被选择的参数如何被处理。
34.如权利要求33的数据处理系统,其中在第一位中的逻辑1位值表示被选参数的出现。
35.如权利要求29中的数据处理系统,其中在类装载时,检查装置被执行。
36.一种数据处理系统,从特定于数据处理系统的本地方法调用不特定于数据处理系统的多个指令,数据处理系统包括:
检查装置,用来在首次执行指令之前检查非特定于数据处理系统的多个指令,来确认从多个指令的参数集中选择的参数的出现;
生成装置,用来生成位掩码来说明被选参数;
拷贝装置,用来使用掩码拷贝参数集。
37.如权利要求36的数据处理系统,其中非特定于数据处理系统的多个指令是java字节码。
38.如权利要求36的数据处理系统,其中java字节码形成方法。
39.如权利要求36的数据处理系统,其中被选参数是浮点类型。
40.如权利要求36的数据处理系统,其中被选参数是双精度类型。
41.如权利要求36的数据处理系统,其中被选参数是长类型。
42.如权利要求36的数据处理系统,其中掩码是包含多个位的位掩码,其中多个位编组成对,在对中的第一位表示与该对相关的参数是否为被选择的参数,对中的第二位表示被选择的参数如何被处理。
43.如权利要求42的数据处理系统,其中在第一位中的逻辑1位值表示被选参数的出现。
44.如权利要求38的数据处理系统,还包括:
定位装置,使用确认java方法的方法来定位java方法的方法块。
45.如权利要求44的数据处理系统,其中确认包括方法名,签名和对象引用或类引用。
46.一种从非特定于数据处理系统的代码返回至本地码的数据处理系统,该数据处理系统,包括:
接收装置,从本地调用者接收调用来执行可解释方法;
生成装置,响应接收调用,生成指向被选返回字节码的指针;和
执行装置,响应可解释方法中遇到的返回,执行被选返回字节码,
其中被选返回字节码将作为执行可解释方法的结果的任何出现的返回值移动到被本地调用者使用的位置,并返回控制给本地调用者。
47.如权利要求46的数据处理系统,其中可解释的方法为java方法。
48.如权利要求46的数据处理系统,其中被选择的返回字节码恢复本地调用者的寄存器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/306,193 US6481006B1 (en) | 1999-05-06 | 1999-05-06 | Method and apparatus for efficient invocation of Java methods from native codes |
US09/306193 | 1999-05-06 | ||
US09/306,193 | 1999-05-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1273390A CN1273390A (zh) | 2000-11-15 |
CN1149478C true CN1149478C (zh) | 2004-05-12 |
Family
ID=23184232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB001081608A Expired - Fee Related CN1149478C (zh) | 1999-05-06 | 2000-05-08 | 从本地码有效调用Java方法的方法和设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6481006B1 (zh) |
CN (1) | CN1149478C (zh) |
TW (1) | TW484099B (zh) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1088270B1 (de) * | 1998-06-26 | 2002-10-02 | Deutsche Telekom AG | Verfahren zur prüfung von java-bytecode-programmen auf sicherheitseigenschaften |
US6604167B1 (en) * | 2000-09-28 | 2003-08-05 | International Business Machines Corporation | Method and apparatus traversing stacks for just-in-time compilers for Java virtual machines |
US7080387B2 (en) * | 2000-09-28 | 2006-07-18 | Sun Microsystems, Inc. | System and method for mediating communication between software applications |
US6834391B2 (en) * | 2000-11-28 | 2004-12-21 | Sun Microsystems, Inc. | Method and apparatus for automated native code isolation |
US6978447B1 (en) * | 2001-02-28 | 2005-12-20 | Cisco Technology, Inc. | Method and system for efficiently interpreting a computer program |
US6931638B2 (en) * | 2001-03-15 | 2005-08-16 | Sun Microsystems, Inc | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine |
US6934946B2 (en) * | 2001-05-15 | 2005-08-23 | Sun Microsystems, Inc. | Lightweight native method invocation interface for java computing environments |
US20030041319A1 (en) * | 2001-08-24 | 2003-02-27 | Sun Microsystems, Inc. | Java bytecode instruction for retrieving string representations of java objects |
US20040003018A1 (en) * | 2002-06-26 | 2004-01-01 | Pentkovski Vladimir M. | Method and system for efficient handlings of serial and parallel java operations |
US7103881B2 (en) * | 2002-12-10 | 2006-09-05 | Intel Corporation | Virtual machine to provide compiled code to processing elements embodied on a processor device |
US7089340B2 (en) * | 2002-12-31 | 2006-08-08 | Intel Corporation | Hardware management of java threads utilizing a thread processor to manage a plurality of active threads with synchronization primitives |
US20040157593A1 (en) * | 2003-02-07 | 2004-08-12 | Sun Microsystems, Inc | Modularization for J2ME platform implementation |
US7360206B1 (en) * | 2003-03-13 | 2008-04-15 | Network Appliance, Inc. | Method for an interpreter to control a native function call based on a signature of the native function |
US7941807B2 (en) * | 2004-04-30 | 2011-05-10 | International Business Machines Corporation | Transitional resolution in a just in time environment |
US20060080644A1 (en) * | 2004-10-07 | 2006-04-13 | International Business Machines Corporation | Parameterization of programming structures |
GB2426840A (en) * | 2005-06-04 | 2006-12-06 | Transitive Ltd | Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion. |
KR100763199B1 (ko) * | 2006-02-20 | 2007-10-04 | 삼성전자주식회사 | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 |
WO2007109921A1 (en) * | 2006-03-28 | 2007-10-04 | Intel Corporation | Methods and apparatus to implement annotation based thunking |
KR101407629B1 (ko) * | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US8707257B2 (en) * | 2007-11-28 | 2014-04-22 | Red Hat, Inc. | Automatic object instantiation |
US8504986B2 (en) * | 2008-01-23 | 2013-08-06 | Red Hat, Inc. | Calling functions as methods |
CN101948548B (zh) * | 2010-07-20 | 2012-06-06 | 长春工业大学 | 一种光催化氧化玉米淀粉制备双醛淀粉的装置和方法 |
US8776033B2 (en) * | 2010-12-23 | 2014-07-08 | International Business Machines Corporation | Batch dispatch of java native interface calls |
US8713166B2 (en) | 2011-05-31 | 2014-04-29 | General Electric Company | Systems and methods for facilitating communication with foundation fieldbus linking devices |
US8762528B2 (en) | 2011-05-31 | 2014-06-24 | General Electric Company | Systems and methods for write protecting foundation fieldbus linking devices |
US8769072B2 (en) | 2011-05-31 | 2014-07-01 | General Electric Company | Systems and methods for identifying foundation fieldbus linking devices |
US9130853B2 (en) | 2011-05-31 | 2015-09-08 | General Electric Company | Systems and methods for identifying foundation fieldbus linking devices |
US8868732B2 (en) * | 2011-05-31 | 2014-10-21 | General Electric Company | Systems and methods for facilitating communication with foundation fieldbus linking devices |
US8819649B2 (en) * | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
CN106254888B (zh) * | 2015-06-09 | 2020-06-02 | 同济大学 | 一种图像编码及解码方法、图像处理设备 |
US11875168B2 (en) | 2020-03-19 | 2024-01-16 | Oracle International Corporation | Optimizing execution of foreign method handles on a virtual machine |
US11513779B2 (en) * | 2020-03-19 | 2022-11-29 | Oracle International Corporation | Modeling foreign functions using executable references |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US6009517A (en) * | 1997-10-06 | 1999-12-28 | Sun Microsystems, Inc. | Mixed execution stack and exception handling |
US6066181A (en) * | 1997-12-08 | 2000-05-23 | Analysis & Technology, Inc. | Java native interface code generator |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6167567A (en) * | 1998-05-05 | 2000-12-26 | 3Com Corporation | Technique for automatically updating software stored on a client computer in a networked client-server environment |
US6269373B1 (en) * | 1999-02-26 | 2001-07-31 | International Business Machines Corporation | Method and system for persisting beans as container-managed fields |
-
1999
- 1999-05-06 US US09/306,193 patent/US6481006B1/en not_active Expired - Fee Related
-
2000
- 2000-02-29 TW TW089103476A patent/TW484099B/zh not_active IP Right Cessation
- 2000-05-08 CN CNB001081608A patent/CN1149478C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1273390A (zh) | 2000-11-15 |
US6481006B1 (en) | 2002-11-12 |
TW484099B (en) | 2002-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1149478C (zh) | 从本地码有效调用Java方法的方法和设备 | |
CN1821964A (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
CN1146788C (zh) | 用于产生平台所特定的编译器的装置和方法 | |
CN1848088A (zh) | 将本机接口函数调用转换为更简单操作的方法和系统 | |
CN1149470C (zh) | 一种分析面向对象的程序的执行的方法和设备 | |
US6704926B1 (en) | Bimodal Java just-in-time complier | |
CN1238500A (zh) | 用于进行静态初始化的方法和系统 | |
CN1305609A (zh) | 实现参数化类型与现有非参数化库兼容的方法 | |
US20060212847A1 (en) | Type checker for a typed intermediate representation of object-oriented languages | |
US6412108B1 (en) | Method and apparatus for speeding up java methods prior to a first execution | |
CN1977241A (zh) | 向量化多条输入指令的方法和装置 | |
CN1577268A (zh) | 共享库系统及构建该系统的方法 | |
US20060248523A1 (en) | Annotation management | |
CN106033370B (zh) | 64位Java虚拟机的实现方法及装置 | |
CN100378657C (zh) | 用于改进java方法调用速度的方法和装置 | |
US20060242635A1 (en) | Method and system for optimizing array sizes in a JAVA virtual machine | |
CN1855053A (zh) | 用于执行java虚拟机的指令的方法和设备 | |
CN1143212C (zh) | 实现快速子类和子类型检查的方法与设备 | |
US6604167B1 (en) | Method and apparatus traversing stacks for just-in-time compilers for Java virtual machines | |
US6883165B1 (en) | Apparatus and method for avoiding deadlocks in a multithreaded environment | |
Leone et al. | Dynamo: A staged compiler architecture for dynamic program optimization | |
CN1287280C (zh) | 用于在运行时提高函数的执行性能的方法和计算系统 | |
Smith et al. | POPLOG's Two-level virtual machine support for interactive languages | |
AU773511B2 (en) | Method and apparatus for producing a sparse interference graph |
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 | ||
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 |