CN1795434A - 程序执行控制设备,程序执行控制方法,控制程序和记录介质 - Google Patents
程序执行控制设备,程序执行控制方法,控制程序和记录介质 Download PDFInfo
- Publication number
- CN1795434A CN1795434A CNA2004800147316A CN200480014731A CN1795434A CN 1795434 A CN1795434 A CN 1795434A CN A2004800147316 A CNA2004800147316 A CN A2004800147316A CN 200480014731 A CN200480014731 A CN 200480014731A CN 1795434 A CN1795434 A CN 1795434A
- Authority
- CN
- China
- Prior art keywords
- bytecode
- collection
- requirement
- compiler
- information
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
当实现了带JIT编译器的常规JVM的配备有处理器的家用电器执行未编译的方法时,因为该方法被在运行时编译,所以执行速度较慢。为了抑制执行速度的降低,在程序执行的过程中调用一个方法时,程序执行控制设备判断被调用的方法之前是否已被编译过。如果该方法未被编译,所述设备通过解释相关联的字节码来执行该方法,还发出对该方法的编译请求。如果该方法已被编译,所述设备执行通过编译该方法生成的本机码。对被请求的方法的编译被作为与例如解释执行或本机码执行这样的指令执行任务独立的任务被执行。
Description
技术领域
本发明涉及一种程序执行控制设备,其用于使处理器执行由字节码(bytecode)集组成的程序。更具体地,本发明涉及一种用于抑制在程序执行的初始阶段执行速度降低的技术。
背景技术
虚拟机是一种独立于平台的执行程序的软件。近年来,虚拟机被实现在例如内置设备(built-in device)这样的各种配备有处理器的家用电器上。
一个示范的虚拟机是Java虚拟机(JVM),其解释并执行Java(注册商标)字节码(以下简称字节码)。关于JVM的详细规范参阅“Java虚拟机规范,第二版”(培生教育出版集团出版,ISBN 4-89471-356-x)。
通常,字节码由例如Javac这样的Java编译器通过对用Java语言编写的源程序进行转换生成。字节码被存放在后缀为“.class”的所谓类文件中。
JVM解释类文件并执行所需的控制以使处理器执行包含在类文件中的方法。方法是用于执行特定过程的字节码集,类似于其他编程语言中的成员函数。
基本上,JVM的工作如同一个在运行时按顺序解释字节码的解释器。正如公知的那样,字节码程序的执行速度要慢于可由处理器直接执行的本机码(native code)程序的执行速度。特别地,执行一个对相同方法进行重复性地调用的程序会带来额外的开销,因为对相同方法的每次调用都需要对其进行重复性地解释。
为了降低上述开销,提出了具有及时(Just-In-Time,JIT)编译器的JVM。如果判定被调用的方法尚未被编译,JIT编译器将该方法转换成本机码。
JIT改进了执行速度,这是因为当相同的方法在第二次被调用的时候,处理器就可以执行之前编译的本机码。
另外,还有一种被称之为Java Hotspot(注册商标)的JIT编译器扩展技术,其能确定要被编译为本机码的方法。更具体地,Java Hotspot在程序执行过程中对每一方法的调用进行计数,并在该数目超过阈值时将该方法编译为本机码。
日本专利申请公开号H4-178734和S64-62705公开了具有解释器和编译器二者功能的程序执行控制设备,类似于具有JIT编译器的JVM。
具有JIT的JVM的一个问题如下。如果一个方法尚未被编译的话,JVM将在该方法被调用时立即开始对该方法进行编译。当编译结束时,所获得的本机码被处理器执行。因此,与解释执行相同的方法相比,未编译方法的执行速度要更慢。在程序执行的初始阶段,因为更多的字节码需要被编译,所以执行速度的降低尤为显著。
类似地,当在调用时对未编译方法进行编译,也使Java Hotspot技术面临执行速度更慢的问题。直到编译完成,才能够执行该方法。
发明内容
为了解决上述问题,本发明旨在提供一种程序执行控制设备,其用于抑制当执行未编译方法时由于在执行该方法时进行编译处理所通常导致的执行速度的降低。本发明还旨在提供与该程序执行控制设备相关的技术。
根据本发明的一个方面,上述目的可以通过一种程序执行控制设备来实现,该程序执行控制设备用于使处理器执行由一个或多个字节码集组成的程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码。该程序执行控制设备包括:判定单元,用于在程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于处理器的本机码;第一单元,用于在目标字节码集被判定为未被编译时,命令处理器以使目标字节码集被顺序地解释和执行,并发出将目标字节码集编译为本机码的请求;第二单元,用于当目标字节码集被判定为待编译时,命令处理器执行通过编译得到的本机码;以及第三单元,用于命令处理器并行于第一单元所进行的字节码解释和执行以及第二单元所进行的本机码执行,对第一单元所发出的编译请求所指示的字节码集进行编译。
在本发明的另一个方面中,提供了一种程序执行控制方法,该程序执行控制方法用于使处理器执行由一个或多个字节码集组成的程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码。该程序执行控制方法包括:判定步骤,用于在程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于处理器的本机码;第一步骤,用于当目标字节码集被判定为未被编译时,命令处理器以使目标字节码集被顺序地解释和执行,并发出将目标字节码集编译为本机码的请求;第二步骤,用于当目标字节码集被判定为待编译时,命令处理器执行通过编译得到的本机码;以及第三步骤,用于命令处理器并行于第一步骤中进行的字节码解释和执行以及第二步骤中进行的本机码执行,对第一步骤中发出的编译请求所指示的字节码集进行编译。
在本发明的另一个方面中,还提供了一个控制程序,该控制程序用于使处理器执行由一个或多个字节码集组成的另一个程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码。该控制程序包括:判定步骤,用于在程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于处理器的本机码;第一步骤,用于当目标字节码集被判定为未被编译时,命令处理器以使目标字节码集被顺序地解释和执行,并发出将目标字节码集编译为本机码的请求;第二步骤,用于当目标字节码集被判定为待编译时,命令处理器执行通过编译得到的本机码;以及第三步骤,用于命令处理器并行于第一步骤中进行的字节码解释和执行以及第二步骤中进行的本机码执行,对第一步骤中发出的编译请求所指示的字节码集进行编译。
在本发明的另一个方面中,还提供了一种存储了控制程序的记录介质,该控制程序用于使处理器执行由一个或多个字节码集组成的另一个程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码。该控制程序包括:判定步骤,用于在程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于处理器的本机码;第一步骤,用于当目标字节码集被判定为未被编译时,命令处理器以使目标字节码集被顺序地解释和执行,并发出将目标字节码集编译为本机码的请求;第二步骤,用于当目标字节码集被判定为待编译时,命令处理器执行通过编译得到的本机码;以及第三步骤,用于命令处理器并行于第一步骤中进行的字节码解释和执行以及第二步骤中进行的本机码执行,对第一步骤中发出的编译请求所指示的字节码集进行编译。
这里,字节码集可以是方法或成员函数。
通过上述结构,当被调用的字节码集(方法)尚未被编译时,字节码集通过顺序化的解释被执行。因此,确保抑制了执行速度降低,其中执行速度降低是常规的具有JIT的JVM所面临问题的且在程序执行初始阶段尤为显著。执行速度降低是由于在执行方法时编译该方法所造成的。此外,通过上述结构,并行于方法的执行对未编译方法进行编译。因此,避免了整个程序的执行速度变得更慢。
这里,程序执行控制设备可以在多任务操作系统控制下工作。第三单元所进行的编译被作为与第一单元所进行的字节码执行和第二单元所进行的本机码执行独立的任务来执行。第一和第二单元的任务被赋予比赋予第三单元的任务的优先级更高的优先级。
通过上述的结构,指令执行任务被基于比编译任务更高的优先权来执行。因此,确保抑制了在程序执行初始阶段通常很显著的执行速度降低。
这里,程序执行控制设备可进一步包括切换单元,用于当第一或第二单元所进行的任务执行被置于待机状态时,切换到第三单元所进行的任务执行。
通过上述结构,当指令执行任务被置于待机状态时,编译任务被执行。这确保了编译被迅速执行。通过迅速执行编译,指令的解释执行需要更少量的时间,这使得整个程序的执行速度得到提高。
这里,程序执行控制设备可进一步包括请求管理单元,用于响应于第一单元所发出的编译请求,将编译请求信息登记到存储单元中,并管理所登记的编译请求信息。每项编译请求信息被用于编译相应的编译请求所指示的字节码集。第三单元命令处理器并行于第一单元所进行的字节码解释和执行以及第二单元所进行的本机码执行,对登记在存储单元中的编译请求信息所指示的每一字节码集进行编译。
通过上述结构,字节码集的编译被根据由请求管理单元在存储单元中登记并管理的编译请求信息来进行。
这里,请求管理单元按照相应的编译请求被接收的顺序将各项编译请求信息置于队列中。第三单元命令处理器按照从第一项排队的编译请求信息所指示的字节码集开始的顺序来编译字节码集。
通过上述结构,字节码集的编译被按照各自的编译请求被接收的顺序来进行。
这里,如果编译请求所指示的字节码集的编译请求信息已被登记在存储单元中,则请求管理单元不再重复地登记编译请求信息。
通过上述结构,避免了当相同的一项编译信息已经被登记的时候,还对该项进行登记。因此,不会重复地登记编译请求信息。
这里,程序执行控制设备可进一步包括:优先权信息获取单元,用于获取表示每一字节码集的优先级的信息。请求管理单元包括:指定子单元,用于响应于第一单元所发出的编译请求,参考所获得的优先权信息,指定编译请求所指示的字节码集的优先级;比较子单元,用于对所指定的优先级和存储单元中的排队的编译请求信息所指示的每一字节码集的优先级进行比较;以及确定子单元,用于确定放置对于编译请求所指示的字节码集的新编译请求信息项的位置,以使所登记的各项编译请求信息被按照优先权的降序来排队。
通过上述结构,具有较高优先级的字节码集被较早地执行。
这里,程序执行控制设备可进一步包括:相关信息获取单元,用于获取表示每一字节码集以及与该字节码集相关的所有字节码集的相关信息;检测单元,用于参考该相关信息,检测与编译请求所指示的字节码集相关的任一字节码集。请求管理单元对检测单元所检测到的相关字节码集的编译请求信息进行登记。
通过上述结构,与被请求进行编译的字节码集相关的字节码集的编译请求信息被附加地进行登记。
这里,程序执行控制设备可进一步包括:优先权信息获取单元,用于获取表示每一字节码集的优先级的信息。参考所获得的优先权信息,第三单元命令处理器按照优先权的降序对登记在存储单元中的各项编译请求信息所指示的字节码集进行编译。
通过上述结构,具有较高优先级的字节码集被较早地执行。
这里,程序执行控制设备可进一步包括:数目记录单元,用于当字节码集的编译被重复请求时,对各个字节码集的编译请求进行计数,并将请求数目作为字节码集的编译请求信息的一部分记录在存储单元中;以及获取单元,用于获取请求数目的阈值。第三单元命令处理器按照各个字节码集的请求数目超过阈值的顺序来编译字节码集。
通过上述结构,字节码集被按照各自的请求数目超过阈值的顺序来编译。
这里,程序执行控制设备可进一步包括:数目记录单元,用于当字节码集的编译被重复请求时,对各字节码集的编译请求进行计数,并将请求数目作为字节码集的编译请求信息的一部分记录在存储单元中;以及顺序更改单元,用于比较各个请求数目,并按照请求数目的降序更改各项排队的编译请求信息的位置。
通过上述结构,字节码集被按照编译请求数量的降序编译。因此,字节码集的解释执行需要更少量的时间,从而整个程序的执行速度得到提高。
这里,请求管理单元可以管理多个具有不同优先级的队列。第三单元可以命令处理器按照从被置于最高优先权队列中的编译请求信息所指示的字节码集开始的顺序来编译字节码集。
通过上述结构,根据其中登记了相应编译请求信息的队列,基于优先权来确定哪些字节码集需要被处理而哪些不需要。
这里,程序执行控制设备可进一步包括:特殊请求信息获取单元,用于在程序执行之前获取表示多个被请求进行编译的字节码集的信息。请求管理单元将特殊请求信息所示出的所有字节码集的编译请求信息成批地登记在最高优先权队列中。
通过上述结构,基于优先权来生成特殊请求信息以指示需要被编译的字节码集。这确保了基于优先权来编译字节码。
这里,程序执行控制设备可进一步包括:第二判定单元,用于当判定单元判定目标字节码集未被编译时,判断是否该目标字节码集当前正被编译;以及第四单元,用于当该目标字节码集被判定为当前正被编译时,进行等待直到编译完成,并接下来命令处理器执行通过编译得到的本机码。
通过上述结构,当执行一个未编译字节码集并且该字节码集已正在被编译时,程序执行控制设备等待直到编译完成,从而使用通过编译得到的本机码来执行该字节码集。
这里,程序执行控制设备可进一步包括:优先权信息获取单元,用于获取表示每一字节码集的优先级的信息;比较单元,用于对作为编译目标的字节码集的优先级和指令执行任务的优先级进行比较;以及优先权更改单元,用于当比较显示字节码集的优先级高于指令执行任务的优先级时,临时地提高编译任务的优先级。
通过上述结构,当编译优先级高于指令执行任务的字节码集时,编译任务的优先级被临时性地提高。从而,特定字节码集的编译被迅速地执行。
附图简述
图1是在指令执行任务和编译任务之间执行转换的视图;
图2是根据实施例1的程序执行控制设备1的功能图;
图3是用Java语言编写的示范源程序的视图;
图4是根据实施例1的登记于队列存储子单元16中的编译请求信息的特定例子的视图;
图5是已编译方法表的例子的视图;
图6是所执行的指令执行任务的流程图;
图7是根据实施例2的程序执行控制设备1A的功能图;
图8是根据实施例2的登记于队列存储子单元16A中的编译请求信息的特定例子的视图;
图9是编译请求信息排序处理的流程图;
图10是根据实施例3的程序执行控制设备1B的功能图;
图11是从类文件获取的优先权信息表23的特定例子的视图;
图12是根据实施例3的登记于队列存储子单元16B中的编译请求信息的特定例子的视图;
图13是编译请求信息放置处理的流程图;
图14是根据实施例4的程序执行控制设备1C的功能图;
图15是批(batch)登记信息表24的特定例子的视图;
图16是根据实施例4的登记于队列存储子单元16C中的编译请求信息的特定例子的视图;
图17是根据实施例5的程序执行控制设备1D的功能图;
图18是相关方法表28的特定例子的视图;
图19是相关方法检测处理的流程图;
图20是根据实施例6的程序执行控制设备1E的功能图;
图21是优先权继承处理的流程图;以及
图22是修改的指令执行任务的流程图。
具体实施方式
概览
根据本发明的程序执行控制设备可被实现为配备有处理器和诸如存储器或硬盘这样的存储介质的计算机设备。具体地,本发明可被实现为移动电话或数字广播接收器。
程序执行控制设备的存储介质存储了多任务操作系统(OS)、JVM、类文件、以及类库。类库是例如类和方法这样的被频繁使用的通用组件的集合。通过按照存储在存储介质中的多任务OS以及运行在多任务OS控制下的JVM来工作的处理器,程序执行控制设备执行各种功能。
当在程序执行过程中调用一个方法时,程序执行控制设备判断所调用的方法是否已经被编译。当判定该方法未被编译时,程序执行控制设备通过解释来执行与该方法相关联的字节码。同时,程序执行控制设备登记编译该方法的请求。另一方面,当判定该方法已被编译时,与该方法相关联的本机码被执行。与所登记的请求相关的方法的编译被作为与指令执行任务独立的任务来执行,其中所述指令执行任务例如通过解释来执行字节码以及执行本机码。
在后文中,执行字节码或本机码的任务被称为指令执行任务,而编译的任务被称为编译任务。本发明的一个特征在于,异步且并行地执行指令执行任务和编译任务。
图1是在指令执行任务和编译任务之间执行转换的视图。
根据本发明的程序执行控制设备根据基于优先权的抢占式任务调度对单个处理器的资源进行分配。
指令执行任务被赋予较高的优先权,而编译任务被赋予较低的优先权。分配给较高和较低优先权的任务的处理时间之比为9∶1。进一步被控制为,当指令执行任务被置于待机状态时,执行被立即切换到编译任务。
通过上述安排,本发明的程序执行控制设备对未编译方法的编译不是在该方法被调用时进行,而是在执行编译任务时进行。因此,确保降低了在程序执行初始阶段频繁需要的编译所引起的启动延迟,从而抑制了执行速度的降低。
在后文中,给出了对根据本发明的程序执行控制设备的实施例的描述。
实施例1
结构1
图2是根据实施例1的程序执行控制设备1的功能图。
如图所示,程序执行控制设备1由以下部分组成:类文件/类库存储单元2、指令执行单元3、编译请求管理单元4、本机码存储单元5、编译单元6、已编译方法表7、以及多任务控制单元19。需要注意的是,图中只显示了与本发明的要点相关的功能块。没有给出对未示出的功能块的描述,虽然在实现了多任务OS和JVM的计算机中通常都会提供那些功能块。
类文件/类库存储单元2是一种存储介质,且存储了类文件和类库。
经由天线21或网络20来获取类文件。
当从类文件/类库存储单元2中读出字节码时,指令执行单元3顺序地解释该字节码,并命令处理器执行所解释的字节码。当调用在之前已被编译的方法的时候,指令执行单元3命令处理器执行与该方法相关联的本机码。
现在,给出对指令执行单元3中包括的功能块的描述。指令执行单元3包括类加载子单元8、指令获取子单元9、指令解释子单元10、指令执行子单元11、方法类型判定子单元12、以及本机码获取子单元13。
类加载子单元8将类文件或类库从类文件/类库存储单元2中加载到存储器。
指令获取单元9基于逐条的指令,获取与加载到存储器的类文件或类库相关联的字节码。
指令解释子单元10将获取的字节码指令解释为本机码。
指令执行子单元11命令处理器执行本机码。
如果被指令执行子单元11作为执行目标的指令是用于调用方法的调用指令,则方法类型判定子单元12参考已编译方法表7,判断作为调用目标的方法之前是否已被编译。Jasmin语法汇编程序码中的调用指令的例子包括如下几条:“invokevirtual”、“invokespecial”、“invokestatic”、以及“invokeinterface”。
当判定目标方法已被编译时,本机码获取子单元13从本机码存储单元5中获取与该方法相关联的本机码,并将所获取的本机码发送给指令执行子单元11。指令执行子单元11命令处理器执行所获取的本机码。
另一方面,当判定目标方法未被编译时,方法类型判定子单元12向编译请求管理单元4发出对该方法的编译请求。此外,指令获取子单元9基于逐条的指令获取与目标方法相关联的字节码。指令解释子单元10顺序地解释所获取的字节码指令。最后,指令执行子单元11命令处理器执行通过解释与目标方法相关联的字节码指令而生成的本机码。
编译管理单元4从方法类型判定子单元12接收编译请求,并管理接收到的编译请求所指示的方法的编译顺序。编译请求管理单元4包括登记请求接收子单元14、队列控制子单元15、以及队列存储子单元16。
登记请求接收子单元14从方法类型判定单元12接收编译请求。通过接收编译请求,登记请求接收子单元14获得关于被请求进行编译的方法的信息,例如用以标识该方法的标识符和与该方法相关联的字节码集的存储地址。
队列存储子单元16是一种存储介质,例如RAM。
队列控制子单元15将多项编译请求信息存储到队列存储子单元16中,并在一个队列中管理所存储的多项编译请求信息。更具体地,当登记请求接收子单元14接收到编译请求时,队列控制子单元15将该编译请求的编译请求信息登记到队列中。当从编译单元6接收到对编译请求信息的获取请求时,队列控制子单元15向编译单元6通知第一项排队的编译请求信息所指示的方法。当该方法的编译完成时,编译单元6向队列控制子单元15通知该完成。作为响应,队列控制子单元15从队列存储子单元16中删除相应的编译请求信息项。
在响应于对编译请求信息的获取请求,向编译单元6通知第一项排队的编译请求信息所指示的方法的时候,队列控制子单元15设置包括在编译请求信息中的一个位标志,以表示该方法的编译状态。当该标志被设置时,该方法当前正在被编译。
队列控制子单元15执行对编译请求信息的登记和删除的互斥控制。也就是,队列控制子单元15不会在同一时间执行对编译请求信息的登记和删除。此外,如果一项编译请求信息已经被登记于队列存储子单元16中,则队列控制子单元15避免登记相同的编译请求信息。
编译单元6由编译请求获取子单元17和方法编译子单元18组成。通过发出获取请求,编译请求获取子单元17从队列控制子单元15获取关于被请求进行编译的方法的信息。方法编译子单元18将与该方法相关联的字节码集编译为本机码。
方法编译子单元18所生成的本机码被存储在本机码存储单元5中。相应地,已编译方法表7用来附加地存储由方法名称和与该方法相关联的本机码的存储地址组成的已编译方法信息项。当编译完成时,编译请求获取子单元17向队列控制子单元15通知该方法现在已经被编译完。
多任务控制单元19是多任务OS的一种功能,通过基于优先权的任务调度,将处理器资源分别分配给指派给指令执行单元3的指令执行任务和指派给编译单元6的编译任务。
数据1
现在,给出对各种数据的描述。
首先,给出对程序执行控制设备1所执行的程序的描述。
图3是用Java语言编写的示范源程序的视图。需要注意的是,对方法“m1”和“m2”不作描述,因为这些方法和本发明没有特别的关联。通过转换图中所示的源程序而生成的字节码被包含于一个类文件A中。类文件A被存储在程序执行控制设备1的类文件/类库存储单元2中。
在程序执行控制设备1执行一个类文件的过程中,用类文件中包含的调用指令来调用方法。对于图3所示的程序的情况,首先,方法“init”被调用了一次。接下来,方法“m1”被调用了10次,然后“m2”方法被调用了5次。
现在,给出对编译请求信息的描述。
图4是登记于队列存储子单元16中的编译请求信息的特定例子的视图。
每项编译请求信息由指向下一项编译请求信息存储位置的指针、方法信息、以及表示编译状态的位标志组成。也就是,每项编译请求信息通过指针与另一项相连,从而形成一条队列。
方法信息通常由标识被请求进行编译的方法的标识符、和与该方法相关联的字节码集的存储地址组成。
位标志指示方法的编译状态。当位标志被设置时,方法正处于编译过程中。当位标志未被设置时,方法的编译尚未开始。在图中,为简单起见,方法被指示为“正在编译”或“未编译”。
在图中,方法“init”的编译请求信息被置于队列顶部,接在其后的是方法“m1”的编译请求信息,然后是方法”m2”的编译请求信息。在本例中,当从编译单元6接收到对关于待编译方法的信息的获取请求时,队列控制子单元15向编译单元6提供关于方法“init”的信息。作为响应,编译单元6编译方法“init”。当完成编译时,编译单元6向队列控制子单元15通知方法“init”已经被编译。
当收到方法“init”已被编译的通知后,队列控制子单元15从队列存储子单元16中删除方法“init”的编译请求信息项。此外,队列控制子单元15更新指向第一项排队的编译请求信息的指针,以指向方法“m1”的那项编译请求信息。
现在,给出对已编译方法信息的描述。
图5是已编译方法表的例子的视图。每一项已编译方法信息由标识已编译信息的标识符(例如方法名称)、和相关联的本机码的存储地址组成。
操作1
现在,给出对程序执行控制设备1的操作的描述。
图6是由指令执行单元3执行的指令执行任务的流程图。
首先,指令执行子单元11使处理器执行所获取的本机码指令(步骤S1)。
如果作为执行目标的指令是程序结束指令(步骤S2:是),处理被终止。如果目标指令不是程序结束指令(步骤S2:否),步骤S3被执行。
在步骤S3中,如果目标指令是调用指令(步骤S3:是),步骤S4被执行。另一方面,在步骤S3中,如果目标指令不是调用指令(步骤S3:否),处理返回到步骤S1。
在步骤S4中,参考已编译方法表7,方法类型判定子单元12判断是否作为调用目标的方法之前已被编译过。如果目标方法已被编译(步骤S4:是),步骤S5被执行。如果目标方法未被编译(步骤S4:否),步骤S6被执行。
在步骤S5中,本机码获取子单元13从本机码存储单元5获取与目标方法相关联的本机码,并将所获取的本机码发送给指令执行子单元11。然后,处理返回到步骤S1。
在步骤S6中,方法类型判定子单元12向编译请求管理单元4发出编译请求。在随后的步骤S7中,指令获取子单元9获取与目标方法相关的字节码,指令解释子单元10解释获取的字节码。然后,处理返回到步骤S1。
编译单元6独立地执行编译任务。在多任务控制单元19分配处理器资源后,编译单元6编译与一个方法相关联的字节码集,该方法是响应于编译单元6发出的获取请求,从队列控制子单元15获得的。
接下来,参考图2、4和5对操作的特定例子进行描述。首先,考虑这样的情况,即:图2所示的指令执行子单元11命令处理器执行对方法“m2”的调用指令。在这种情况下,方法类型判定子单元12参考图5所示的已编译方法表7判断方法“m2”之前是否已被编译过。
已编译方法表7存储了标识方法“m2”作为已被编译方法的信息,以及相关联的本机码的存储地址。相应地,方法类型判定子单元12判定方法“m2”已被编译,并因此命令本机码获取子单元13获取相关联的本机码。然后所获取的本机码被发送到指令执行子单元11并被执行。
现在考虑这样的情况,即:指令执行子单元11命令处理器执行对未示出的方法“m3”的调用指令。在这种情况下,由于在图5所示的已编译方法表7中没有列出方法“m3”,方法类型判定子单元12判定方法“m3”未被编译,并因此向编译请求管理单元4发出对方法“m3”的编译请求。基于逐条的指令,通过顺序地解释相关联的字节码,方法“m3”被独立地执行,即,所谓的解释执行。
编译请求管理单元4在图4所示的队列的尾部登记方法“m3”的编译请求信息。也就是,该编译请求信息被置于紧接在方法“m2”的编译请求信息之后。
实施例2
以下描述了本发明的实施例2的程序执行控制设备。有一种情况是,对编译请求信息已被登记于队列中的相同方法,又做出了编译请求。在这种情况下,实施例2的程序执行控制设备对各个方法的编译请求分别计数,并基于请求数目,对初始时按照登记顺序进行排队的各项编译请求信息进行排序。结果是,各项编译请求信息被按照请求数目的降序进行排队。
通过这样的安排,确保了被调用较频繁的方法比被调用较不频繁的方法更早地被编译。因此,程序执行速度得到改进。
以下描述了关于实施例2的程序执行控制设备的结构、数据和操作。需要注意的是,在这里不再重复与实施例1的程序执行控制设备1所重叠的描述。
结构2
图7是根据实施例2的程序执行控制设备1A的功能图。
程序执行控制设备1A与程序执行控制设备1所不同的是,队列控制子单元15A附加地配备了加法器22。
加法器22保存作为相应的编译请求信息项的一部分的每一方法的请求数目。响应于对其编译请求信息已被登记的方法的一个编译请求,加法器22对该方法的请求数目加“1”。需要注意的是,只有在接收到编译请求时还未开始编译所请求的方法,才执行该增加。队列控制子单元16A随后以增加的请求数目来更新相应的编译请求信息项。
数据2
接下来,给出对登记于实施例2的队列存储子单元16A中的编译请求信息的特定例子的描述。
图8是登记于队列存储子单元16A中的编译请求信息的特定例子的视图。图中所示的编译请求信息与实施例1中的编译请求信息有以下几点不同。根据实施例2,每项编译请求信息包括两个指针,一个指向直接前驱的编译请求信息项而另一个指向直接后继项。此外,每项编译请求信息配备有用于存储请求数目的区域。
图8显示了按照请求数目的降序进行排列的各项编译请求信息。操作2
接下来,给出对排队的编译请求信息的排序处理的描述。
图9是由队列控制子单元15A执行的对编译请求信息的排序处理的流程图。
首先,当登记请求接收子单元14收到编译请求时,队列控制子单元15A参考第一项排队的编译请求信息(步骤S11)。
接下来,将由所接收的编译请求指示的方法与由当前所参考的方法指示的方法进行比较。如果两个方法匹配(步骤S12:是),步骤S13被执行。如果两个方法不匹配(步骤S12:否),步骤S17被执行。
在步骤S17中,判断是否所有的编译请求信息项都已经被参考过。如果所有项已被参考过(步骤S17:是),步骤19被执行。如果不是(S17:否),步骤S18被执行。
在步骤18中,根据当前所参考的编译请求信息的指针,队列控制子单元15现在参考直接后继的排队的编译请求信息项,并转向步骤S12。
在步骤S19中,队列控制子单元15A在队列的尾部登记所接收的编译请求所指示的方法的编译请求信息。
在步骤S13中,队列控制子单元15A使用当前参考的编译请求信息所指示的方法的位标志,判断该方法的编译是否尚未启动或已经在进行。如果编译已经在进行(步骤S13:否),排序处理被终止。如果编译尚未被启动(步骤S13:是),步骤S14被执行。
在步骤S14中,队列控制子单元15A通过加“1”来更新当前参考的编译请求信息的请求数目。接下来,在步骤S15中,队列控制子单元15A将直接前驱的排队的编译请求信息项的请求数目和所更新的请求数目进行比较,来看哪个值更大。
如果比较显示所更新的请求数目比直接前驱的排队的编译请求信息项的请求数目具有更大的值(步骤S15:是),步骤S16被执行。如果不是(步骤15:否),排序处理被终止。
在步骤S16中,队列控制子单元15A用其请求数目已被更新的编译请求信息来更改直接前驱的编译请求信息项的位置。也就是,队列控制子单元15A修改这两项编译请求信息的指针信息。此外,队列控制子单元15A修改在这两项前后的编译请求信息项的指针信息。这就完成了排序处理。
实施例3
根据实施例3的程序执行控制设备从类文件中获得优先权信息表。优先权信息表存储了每一方法的优先级。参考所获得的优先权信息表,程序执行控制设备识别每一待编译方法的优先级,并根据优先级来确定编译请求信息在队列中的顺序。
上述安排确保了较高优先权的方法比较低优先权的方法更早地被编译,从而程序执行速度得到改进。
以下描述了关于实施例3的程序执行控制设备的结构、数据和操作。需要注意的是,在这里不再重复与实施例1的程序执行控制设备1所重叠的描述。
结构3
图10是根据实施例3的程序执行控制设备1B的功能图。
程序执行控制设备1B与程序执行控制设备1所不同的是,获取了优先权信息表23,并且队列控制子单元15B基于相关联的方法的优先级确定在队列中放置编译请求信息的位置。
数据3
接下来,给出对各种数据的描述。
图11是从类文件获取的优先权信息表23的特定例子的视图。优先级信息表23表示了每一方法以及赋予其的优先级。优先级是按照要进行编译的顺序赋予给方法的优先权索引,较大的值指示较高的优先权。按照优先权的降序,方法“m3”、“init”、“m2”、以及“m1”被按照规定的顺序放置。在本实施例中需要注意的是,方法具有不同的优先级。
图12是登记于队列存储子单元16B中的编译请求信息的特定例子的视图。如图所示,具有较高优先权的编译请求信息被置于队列的前端。
操作3
接下来,给出对队列控制子单元15B所进行的编译请求信息放置处理的描述。
图13是队列控制子单元15B所进行的编译请求信息放置处理的流程图。
首先,当登记请求接收子单元14B接收到编译请求后,队列控制子单元15B参考第一项排队的编译请求信息(步骤S21)。
接下来,队列控制子单元15B将由所接收的编译请求指示的方法与由当前所参考的编译请求信息指示的方法进行比较。如果两个方法匹配(步骤S22:是),编译请求信息放置处理被终止。如果两个方法不匹配(步骤S22:否),步骤S23被执行。
在步骤S23中,队列控制子单元15B将其编译请求信息待登记的方法的优先级与由当前所参考的编译请求信息表示的优先级进行比较。作为比较的结果,如果当前正在登记的方法具有较高的优先级(步骤S23:是),步骤S24被执行。另一方面,如果当前参考的编译请求信息显示出较高的优先级(步骤S23:否),步骤S25被执行。
在步骤S25中,判断是否所有的编译请求信息项均被参考过。如果所有项已被参考过(步骤S25:是),步骤26被执行。如果不是(S25:否),步骤S27被执行。
在步骤S27中,根据当前所参考的编译请求信息的指针,队列控制子单元15B现在参考直接后继的排队的编译请求信息项,并返回到步骤S22。
在步骤S26中,队列控制子单元15B将由所接收的编译请求指示的方法的新编译请求信息项登记到队列的尾部。然后,编译请求信息放置处理被终止。
在步骤24中,队列控制子单元15B在当前所参考的编译请求信息的直接前驱位置登记一个新编译请求信息项。然后,编译请求信息放置处理被终止。
考虑这样一种情况,例如,将方法“m3”的编译请求信息登记到图12所示的编译请求信息队列中。方法“m3”的优先级是“2”。在这种情况下,作为编译请求信息放置处理的结果,方法“m3”的编译请求信息被确定置于方法“m2”和“m1”的编译请求信息项之间。更具体地,队列控制子单元15B更新方法“m2”和“m1”的编译请求信息的指针,以使两个指针表示方法“m3”的编译请求信息的存储位置。结果是,方法“m3”的编译请求信息被置于队列中确定的位置。
实施例4
根据实施例4的程序执行控制设备将编译请求信息登记于具有高优先权、中优先权和低优先权的三条队列中的一条,并按照从高优先权队列中的编译请求信息所指示的方法开始的顺序来编译方法。更具体地,第一个被编译的是登记于高优先权队列中的第一项编译请求信息所指示的方法。在编译完高优先权队列中各项编译请求信息所指示的所有方法后,登记于中优先权队列中的第一项编译请求信息所指示的方法被编译。在编译完中优先权队列中各项编译请求信息所指示的所有方法后,低优先权队列中的第一项编译请求信息所指示的方法被编译。
在高优先权队列中,在OS启动时特定的编译请求信息项被成批地登记。在中优先权队列中,具有不同优先权的方法的各项编译请求信息被按照优先权信息表进行登记。低优先权队列用于既没被登记于高优先权队列也没被登记于中优先权队列中的剩下的各项编译请求信息。
以下描述了关于实施例4的程序执行控制设备的结构、数据和操作。需要注意的是,在这里不再重复与实施例1-3中的程序执行控制设备所重叠的描述。
结构4
图14是根据实施例4的程序执行控制设备1C的功能图。
程序执行控制设备1C与程序执行控制设备1的不同之处有以下三点。首先,队列控制子单元15C管理三条具有不同优先级的队列。第二,附加地提供了批登记单元25和批登记信息表24。批登记信息表24存储了表示带有优先权的待编译方法的名称和存储位置的方法信息。当OS启动时,批登记单元25将批登记信息表24中列出的方法的编译请求信息登记于队列存储子单元16C中。如上所述,这些方法的每一项编译请求信息被置于高优先权队列中。最后,采用了在实施例2和3中描述的排序处理和编译请求信息放置处理。
数据4
接下来,给出对各种数据的描述。
图15是批登记信息表24的特定例子的视图。在批登记信息表24中列出的方法包括由用户指定进行编译的方法、以及基于程序执行仿真的结果预计将被频繁调用的方法。
图16是登记于队列存储子单元16C中的编译请求信息的特定例子的视图。如图所示,队列存储子单元16C在三条队列中存储编译请求信息:具有高优先权的第一队列、具有中优先权的第二队列、具有低优先权的第三队列。第一队列存储了在图15所示的批登记信息表24中列出的方法“m4”、“m5”和“m6”的编译请求信息。
第二队列存储了被赋予优先权的方法的编译请求信息,并且编译请求信息被按照优先权的顺序来放置。第三队列存储了除了被置于第一和第二队列中的方法的编译请求信息之外的编译请求信息,并且排队的编译请求信息的顺序通过排序处理而动态改变。
实施例5
根据实施例5的程序执行控制设备从类文件中获取相关方法表。编译单元6参考相关方法表,检测与作为编译目标的方法相关的任何方法。如果检测到任一个相关方法,则发出对所检测到的方法的登记请求。
以下描述了关于实施例5的程序执行控制设备的结构、数据和操作。需要注意的是,在这里不再重复与实施例1中的程序执行控制设备1所重叠的描述。
结构5
图17是根据实施例5的程序执行控制设备1D的功能图;
程序执行控制设备1D与程序执行控制设备1所不同的是附加地提供了相关方法检测单元26。
相关方法检测单元26包括检测子单元27。检测子单元27获取相关方法表28,并从所获取的相关方法表28中检测与编译请求获取子单元17所通知的方法相关的任何方法。如果检测到任一相关方法,相关方法检测单元26则假定对该方法的编译请求已被发出,因此向登记请求接收子单元14D发出对每一检测到的方法的编译请求。
数据5
图18是相关方法表28的特定例子的视图。
如图所示,方法“init”与方法“m1”及“m2”相关,而方法“m3”与方法“m4”及“m5”相关。
操作5
接下来,给出对相关方法检测处理的操作的描述。相关方法检测处理以对相关方法的检测为开始,结束于对检测到的相关方法的编译请求的登记。
图19是由相关方法检测单元26执行的相关方法检测处理的流程图。
首先,响应于编译请求获取子单元17关于一个被请求进行编译方法的通知,检测子单元27参考相关方法表28对任何相关方法进行检测(步骤S31)。
如果检测到任一相关方法(步骤S32:是),步骤S33被执行。如果没有检测到相关方法(步骤S32:否),相关方法检测处理被终止。
在步骤33中,相关方法检测单元26假定已做出对检测到的相关方法的编译请求,并向登记请求接收子单元14D发出对检测到的相关方法的编译请求。然后处理被终止。
这里,参考图18对处理进行更详细地描述。当从编译请求获取子单元17接收到关于方法“init”的通知时,相关方法检测单元26参考相关方法表28,检测与方法“init”相关的方法。如图18所示,方法“init”与方法“m1”及“m2”相关,因此相关方法检测单元26向登记请求接收子单元14D发出对方法“m1”和“m2”的编译请求。
实施例6
根据实施例6的程序执行控制设备如实施例3中描述的一样,基于各个方法的优先级,执行编译请求信息放置处理。此外,程序执行控制设备将待编译的方法的优先级与指令执行任务的优先级进行比较。如果比较显示该方法的优先级较高,则优先权继承处理被执行以使编译任务的优先级等于该方法的优先级。
以下描述了关于实施例6的程序执行控制设备的结构、数据和操作。需要注意的是,在这里不再重复与实施例3中的程序执行控制设备1B所重叠的描述。
结构6
图20是根据实施例6的程序执行控制设备1E的功能图;
程序执行控制设备1E与实施例3的程序执行控制设备1B所不同的是附加地提供了优先权继承单元29。
优先权继承单元29包括以下功能块:优先权比较子单元30和任务优先权更改子单元31。
当接收到关于即将开始编译的方法的优先级的通知时,优先权比较子单元30比较该方法的优先级和指令执行任务的优先级。
如果比较显示作为编译目标的方法的优先级较高,任务优先权更改子单元31命令多任务控制单元19E提高编译任务的优先级以使之等于方法的优先级。
多任务控制单元19E根据来自任务优先权更改子单元31的命令改变编译任务的优先级。
操作6
接下来,给出对优先权继承处理的描述。
图21是优先权继承处理的流程图。
首先,当从编译请求获取子单元17接收到关于将要开始编译的方法的优先级的通知时,优先权继承单元29将该方法的优先级和指令执行处理的优先级进行比较(步骤S41)。
如果比较显示方法的优先级较高(步骤S42:是),任务优先权更改子单元31命令多任务控制单元19E改变编译任务的优先级以使之等于该方法的优先级(步骤S43)。另一方面,如果执行任务的优先级较高(步骤S42:否),处理返回到步骤S41。
假定,例如,指令执行任务的优先级和编译任务的优先级分别缺省为“6”和“2”。作为编译目标的方法的优先级为“7”。在这种情况下,由优先权比较子单元30所作的比较显示该方法的优先级和指令执行任务的优先级为7>6。也就是,该方法的优先级较高,从而任务优先权更改子单元31命令多任务控制单元19E改变编译任务的优先级以使之等于该方法的优先级。根据该命令,多任务控制单元19E将编译任务的优先级增加到“7”,其高于指令执行任务的缺省优先级“6”。相应地,处理器资源被基于优先权分配给编译任务。
补充说明
很自然地意识到,本发明不局限于上述的特定实施例。可以进行包括以下在内的各种修改。
(1)根据实施例1,当方法类型判定子单元12判定对将被调用的方法的编译尚未完成时,该方法被立刻解释和执行。然而,对于被调用方法还正在编译的情况,等待方法被编译完并执行作为结果产生的本机码也是可行的。下面参照图22对这样的处理的操作进行描述。
图22是指令执行任务的流程图,其中对正在编译的方法的执行被推迟,直到编译完成。
首先,指令执行子单元11命令处理器执行所获取的指令(步骤S51)。如果作为执行目标的指令是程序结束指令(步骤S52:是),处理被终止。如果不是(步骤S52:否),步骤S53被执行。
在步骤53中,如果目标指令是调用指令(步骤S53:是),步骤S54被执行。如果不是(步骤S53:否),处理返回到步骤S51。
在步骤S54中,方法类型判定子单元12参考已编译方法表7,判断作为调用目标的方法之前是否已被编译过。如果目标方法已被编译过(步骤S54:是),步骤S55被执行。如果不是(步骤S54:否),步骤S56被执行。
在步骤S55中,本机码获取子单元13从本机码存储单元5中获取与目标方法相关联的本机码,并将所获取的本机码发送到指令执行子单元11。然后处理返回到步骤S51。
在步骤S56中,方法类型判定子单元12命令队列控制子单元15检查队列来看是否目标方法当前正在被编译。如果目标方法当前正在被编译(步骤S56:是),方法类型判定子单元12等待,直到编译完成(步骤S57)。如果不是(步骤S56:否),方法类型判定子单元12向编译请求管理单元4发送编译请求(步骤S58)。在接下来的步骤S59中,指令获取子单元9获取与该方法相关联的字节码,并且指令解释子单元10解释所获取的字节码。然后处理返回到步骤S51。
(2)图1显示了在一个指令执行任务和一个编译任务之间的执行变换。然而,也可有多个指令执行任务和编译任务。在这种情况下,可以给任务赋予不同的优先级。
在上述实施例中,指令执行任务被赋予比编译任务更高的优先权。当有多个编译任务的时候,作为一种例外,可以给某个特定的编译任务赋予比指令执行任务更高的优先权。
在实施例4中,例如,存在具有高、中、低优先级的三条队列。这里,可以给负责登记于第一队列中的编译请求信息所指示的方法的编译任务赋予比指令执行任务的优先级更高的优先级。
(3)根据上述实施例的程序执行控制设备被描述为通过伪并行处理来执行任务。然而,根据本发明的程序执行控制设备可使用多处理器或多个单独的处理器并发地执行任务。
(4)本发明的应用不局限于实现了带有JIT的JVM的程序执行控制设备。本发明也适用于实现了具有中间代码编译功能的虚拟机的任何程序执行控制设备。
(5)在上述实施例中,使用队列来管理要编译的方法的顺序。然而,用队列来管理编译顺序不是本发明的程序执行控制设备的本质部分。例如,可以通过获得为每一程序或类文件指定的阈值来确定编译的顺序,并且方法被按照各自的请求数目超过阈值的顺序进行编译。作为替换,可以在程序执行的过程中以一个预定的时间间隔,对当时编译请求信息已被登记的方法中最高优先权的方法进行编译。作为替换,可以在每次将处理器资源被分配给编译任务的时候,对当时编译请求信息已被登记的方法中最高优先权的方法进行编译。
(6)在实施例4中,采用了三条具有不同优先级的队列。然而,队列的数量不局限于三,例如可以采用两条或四条队列。
(7)根据本发明的程序执行控制设备具有JVM通常提供的垃圾收集功能。垃圾收集功能被作为与指令执行任务和编译任务所并行的垃圾收集任务来执行。可以执行垃圾收集以丢弃已生成的不被或甚少被使用的本机码。
(8)可以提供一个控制程序,用于使带有程序执行功能的设备执行根据上述的实施例的程序执行控制设备所执行的处理步骤(如图6、9、13、19、21、和22所示)。这样的控制程序可以以记录介质的形式或利用各种通信线路被发布。这样的记录介质的例子包括IC卡、光盘、软盘以及ROM。被发布的控制程序可通过安装到具有ROM的设备上以进行使用。通过执行控制程序,设备执行等同于由上述实施例的程序执行控制设备所执行的功能。
工业实用性
根据本发明的程序执行控制设备可适于作为在各种具有处理器的电器上实现的虚拟机。
Claims (20)
1、一种程序执行控制设备,用于使处理器执行由一个或多个字节码集组成的程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码,所述程序执行控制设备包括:
判定单元,用于在所述程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于所述处理器的本机码;
第一单元,用于当所述目标字节码集被判定为未被编译时,命令所述处理器以使所述目标字节码集被顺序地解释和执行,并且发出将所述目标字节码集编译为本机码的请求;
第二单元,用于当所述目标字节码集被判定为待编译时,命令所述处理器执行通过所述编译得到的本机码;以及
第三单元,用于命令所述处理器并行于所述第一单元所进行的所述字节码解释和执行以及所述第二单元所进行的所述本机码执行,对所述第一单元发出的编译请求所指示的字节码集进行编译。
2、根据权利要求1所述的程序执行控制设备,其中
所述程序执行控制设备在多任务操作系统控制下工作,
所述第三单元所进行的所述编译被作为与所述第一单元所进行的所述字节码执行和所述第二单元所进行的所述本机码执行独立的任务来执行,以及
所述第一和第二单元的任务被赋予比赋予所述第三单元的任务的优先级更高的优先级。
3、根据权利要求2所述的程序执行控制设备,进一步包括:
切换单元,用于当所述第一或第二单元所进行的任务执行被置于待机状态时,切换到所述第三单元所进行的任务执行。
4、根据权利要求3所述的程序执行控制设备,进一步包括:
请求管理单元,用于响应于所述第一单元所发出的编译请求,将编译请求信息登记到存储单元中,并管理所登记的编译请求信息,每项编译请求信息被用于编译相应的编译请求所指示的字节码集,其中
所述第三单元命令所述处理器并行于所述第一单元所进行的所述字节码解释和执行以及所述第二单元所进行的所述本机码执行,对登记在所述存储单元中的编译请求信息所指示的每一字节码集进行编译。
5、根据权利要求4所述的程序执行控制设备,其中
所述请求管理单元按照相应的编译请求被接收的顺序将各项编译请求信息置于队列中,以及
所述第三单元命令所述处理器按照从第一项排队的编译请求信息所指示的字节码集开始的顺序来编译字节码集。
6、根据权利要求4所述的程序执行控制设备,其中
如果编译请求所指示的字节码集的编译请求信息已被登记在所述存储单元中,则所述请求管理单元不再重复地登记编译请求信息。
7、根据权利要求4所述的程序执行控制设备,进一步包括:
优先权信息获取单元,用于获取表示每一字节码集的优先级的信息,其中
所述请求管理单元包括:
指定子单元,用于响应于所述第一单元所发出的编译请求,参考所获得的优先权信息,指定所述编译请求所指示的字节码集的优先级;
比较子单元,用于对所指定的优先级和所述存储单元中的排队的编译请求信息所指示的每一字节码集的优先级进行比较;以及
确定子单元,用于确定放置对于所述编译请求所指示的所述字节码集的新编译请求信息项的位置,以使所登记的各项编译请求信息被按照优先权的降序来排队。
8、根据权利要求4所述的程序执行控制设备,进一步包括:
相关信息获取单元,用于获取表示每一字节码集以及与该字节码集相关的所有字节码集的相关信息;
检测单元,用于参考所述相关信息,检测与所述编译请求所指示的所述字节码集相关的任一字节码集,其中
所述请求管理单元对所述检测单元所检测到的所述相关字节码集的编译请求信息进行登记。
9、根据权利要求4所述的程序执行控制设备,进一步包括:
优先权信息获取单元,用于获取表示每一字节码集的优先级的信息;其中
参考所获得的优先权信息,所述第三单元命令所述处理器按照优先权的降序对登记在所述存储单元中的各项编译请求信息所指示的字节码集进行编译。
10、根据权利要求4所述的程序执行控制设备,进一步包括:
数目记录单元,用于当所述字节码集的编译被重复请求时,对各字节码集的编译请求进行计数,并将所述请求数目作为所述字节码集的编译请求信息的一部分记录在所述存储单元中;以及
获取单元,用于获取请求数目的阈值,其中
所述第三单元命令所述处理器按照各个字节码集的请求数目超过所述阈值的顺序来编译字节码集。
11、根据权利要求5所述的程序执行控制设备,进一步包括:
数目记录单元,用于当所述字节码集的编译被重复请求时,对各个字节码集的编译请求进行计数,并将所述请求数目作为所述字节码集的编译请求信息的一部分记录在所述存储单元中;以及
顺序更改单元,用于比较各个请求数目,并按照请求数目的降序更改各项排队的编译请求信息的位置。
12、根据权利要求5所述的程序执行控制设备,其中
所述请求管理单元管理多个具有不同优先级的队列,以及
所述第三单元命令所述处理器按照从被置于最高优先权队列中的编译请求信息所指示的字节码集开始的顺序来编译字节码集。
13、根据权利要求12所述的程序执行控制设备,进一步包括:
特殊请求信息获取单元,用于在所述程序执行之前获取表示多个被请求进行编译的字节码集的信息,其中
所述请求管理单元将所述特殊请求信息所示出的所有字节码集的编译请求信息成批地登记在最高优先权队列中。
14、根据权利要求1所述的程序执行控制设备,进一步包括:
第二判定单元,用于当所述判定单元判定所述目标字节码集未被编译时,判断是否所述目标字节码集当前正被编译;以及
第四单元,用于当所述目标字节码集被判定为当前正被编译时,进行等待直到所述编译完成,并接下来命令所述处理器执行通过所述编译得到的本机码。
15、根据权利要求1所述的程序执行控制设备,进一步包括:
请求管理单元,用于响应于所述第一单元所发出的编译请求,将编译请求信息登记到存储单元中,并管理所登记的编译请求信息,每项编译请求信息被用于对相应的编译请求所指示的字节码集进行编译,其中
所述第三单元命令所述处理器并行于所述第一单元所进行的所述字节码解释和执行以及所述第二单元所进行的所述本机码执行,对由登记在所述存储单元中的编译请求信息指示的每一字节码集进行编译。
16、根据权利要求2所述的程序执行控制设备,进一步包括:
优先权信息获取单元,用于获取表示每一字节码集的优先级的信息;
比较单元,用于对作为所述编译目标的所述字节码集的优先级和所述指令执行任务的优先级进行比较;以及
优先权更改单元,用于当所述比较显示所述字节码集的优先级高于所述指令执行任务的优先级时,临时地提高所述编译任务的优先级。
17、根据权利要求2所述的程序执行控制设备,进一步包括:
请求管理单元,用于响应于所述第一单元所发出的编译请求,将编译请求信息登记到存储单元中,并管理所登记的编译请求信息,每项编译请求信息被用于对相应的编译请求所指示的字节码集进行编译,其中
所述第三单元命令所述处理器并行于所述第一单元所进行的所述字节码解释和执行以及所述第二单元所进行的所述本机码执行,对登记在所述存储单元中的编译请求信息所指示的每一字节码集进行编译。
18、一种程序执行控制方法,用于使处理器执行由一个或多个字节码集组成的程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码,所述程序执行控制方法包括:
判定步骤,用于在所述程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于所述处理器的本机码;
第一步骤,用于当所述目标字节码集被判定为未被编译时,命令所述处理器以使所述目标字节码集被顺序地解释和执行,并且发出将所述目标字节码集编译为本机码的请求;
第二步骤,用于当所述目标字节码集被判定为待编译时,命令所述处理器执行通过所述编译得到的本机码;以及
第三步骤,用于命令所述处理器并行于所述第一步骤中进行的所述字节码解释和执行以及所述第二步骤中进行的所述本机码执行,对由所述第一步骤中发出的编译请求指示的字节码集进行编译。
19、一个控制程序,用于使处理器执行由一个或多个字节码集组成的另一个程序,其中所述一个或多个字节码集包括用于调用一个字节码集的一个字节码,所述控制程序包括:
判定步骤,用于在所述程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于所述处理器的本机码;
第一步骤,用于当所述目标字节码集被判定为未被编译时,命令所述处理器以使所述目标字节码集被顺序地解释和执行,并且发出将所述目标字节码集编译为本机码的请求;
第二步骤,用于当所述目标字节码集被判定为待编译时,命令所述处理器执行通过所述编译得到的本机码;以及
第三步骤,用于命令所述处理器并行于所述第一步骤中进行的所述字节码解释和执行以及所述第二步骤中进行的所述本机码执行,对由所述第一步骤中发出的编译请求指示的字节码集进行编译。
20、一种存储了控制程序的记录介质,其中所述控制程序用于使处理器执行由一个或多个字节码集组成的另一个程序,所述一个或多个字节码集包括用于调用一个字节码集的一个字节码,所述控制程序包括:
判定步骤,用于在所述程序执行过程中,对于调用字节码的每次执行,判断作为调用目标的字节码集是否已被编译为特定于所述处理器的本机码;
第一步骤,用于当所述目标字节码集被判定为未被编译时,命令所述处理器以使所述目标字节码集被顺序地解释和执行,并且发出将所述目标字节码集编译为本机码的请求;
第二步骤,用于当所述目标字节码集被判定为待编译时,命令所述处理器执行通过所述编译得到的本机码;以及
第三步骤,用于命令所述处理器并行于所述第一步骤中进行的所述字节码解释和执行以及所述第二步骤中进行的所述本机码执行,对由所述第一步骤中发出的编译请求指示的字节码集进行编译。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003151472A JP4713820B2 (ja) | 2003-05-28 | 2003-05-28 | プログラム実行制御装置、プログラム実行制御方法 |
JP151472/2003 | 2003-05-28 | ||
PCT/JP2004/007731 WO2004107170A1 (ja) | 2003-05-28 | 2004-05-28 | プログラム実行制御装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1795434A true CN1795434A (zh) | 2006-06-28 |
CN1795434B CN1795434B (zh) | 2010-05-05 |
Family
ID=33487223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2004800147316A Expired - Fee Related CN1795434B (zh) | 2003-05-28 | 2004-05-28 | 程序执行控制设备和程序执行控制方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7958499B2 (zh) |
EP (1) | EP1635258B1 (zh) |
JP (1) | JP4713820B2 (zh) |
KR (1) | KR101051872B1 (zh) |
CN (1) | CN1795434B (zh) |
WO (1) | WO2004107170A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729235A (zh) * | 2013-12-24 | 2014-04-16 | 华为技术有限公司 | Java虚拟机的编译方法和Java虚拟机 |
CN106325964A (zh) * | 2015-06-18 | 2017-01-11 | 龙芯中科技术有限公司 | 动态编译调度方法及装置 |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100725386B1 (ko) * | 2004-09-25 | 2007-06-07 | 삼성전자주식회사 | 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기 |
US20070169012A1 (en) * | 2005-11-14 | 2007-07-19 | Microsoft Corporation | Asynchronous just-in-time compilation |
KR100763199B1 (ko) | 2006-02-20 | 2007-10-04 | 삼성전자주식회사 | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 |
US7784041B2 (en) * | 2006-03-30 | 2010-08-24 | Oracle America, Inc. | Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation |
US8261270B2 (en) * | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US8443348B2 (en) * | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8024708B2 (en) | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8108844B2 (en) * | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8136102B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US9176714B2 (en) * | 2007-11-12 | 2015-11-03 | International Business Machines Corporation | Re-using legacy libraries in software |
JP2010140233A (ja) * | 2008-12-11 | 2010-06-24 | Nec Computertechno Ltd | エミュレーションシステム及びエミュレーション方法 |
US9117071B2 (en) | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US8677329B2 (en) * | 2009-06-03 | 2014-03-18 | Apple Inc. | Methods and apparatuses for a compiler server |
US8359496B1 (en) * | 2010-08-31 | 2013-01-22 | Google Inc. | Fault-resistant just-in-time compiler |
JP5505522B2 (ja) | 2011-02-01 | 2014-05-28 | 富士通株式会社 | プログラム実行方法 |
JP2013061810A (ja) | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
US9405551B2 (en) * | 2013-03-12 | 2016-08-02 | Intel Corporation | Creating an isolated execution environment in a co-designed processor |
JP6127639B2 (ja) | 2013-03-26 | 2017-05-17 | 富士通株式会社 | プログラム実行制御プログラム、プログラム実行制御方法 |
WO2014155684A1 (ja) * | 2013-03-29 | 2014-10-02 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
US20150186168A1 (en) * | 2013-12-30 | 2015-07-02 | Unisys Corporation | Dedicating processing resources to just-in-time compilers and instruction processors in a dynamic translator |
JP2018028777A (ja) | 2016-08-17 | 2018-02-22 | Necプラットフォームズ株式会社 | エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム |
US11468881B2 (en) | 2019-03-29 | 2022-10-11 | Samsung Electronics Co., Ltd. | Method and system for semantic intelligent task learning and adaptive execution |
US11093715B2 (en) * | 2019-03-29 | 2021-08-17 | Samsung Electronics Co., Ltd. | Method and system for learning and enabling commands via user demonstration |
CN111770205B (zh) * | 2020-08-31 | 2020-12-04 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点、系统和存储介质 |
US11494201B1 (en) * | 2021-05-20 | 2022-11-08 | Adp, Inc. | Systems and methods of migrating client information |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6462705A (en) | 1987-09-02 | 1989-03-09 | Fanuc Ltd | Cnc program executing device |
JPH04178734A (ja) | 1990-11-13 | 1992-06-25 | Yokogawa Electric Corp | プログラム言語処理装置 |
JPH08328880A (ja) * | 1995-05-31 | 1996-12-13 | Mitsubishi Electric Corp | 複数のアプリケーションプログラムを同時に実行できるオペレーティングシステムにおける計算機運転管理システム |
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 |
JPH11328138A (ja) * | 1998-05-20 | 1999-11-30 | Hitachi Ltd | 分散型コンピュータシステム |
US6760907B2 (en) * | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
US20020147969A1 (en) * | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
JP3605327B2 (ja) * | 1999-11-18 | 2004-12-22 | 富士通株式会社 | プログラム実行装置 |
US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
JP4178734B2 (ja) | 2000-08-29 | 2008-11-12 | 日本ゼオン株式会社 | 組立コンテナおよび分割型側板の回動ストッパ機構 |
JP2002163115A (ja) * | 2000-11-29 | 2002-06-07 | Toshiba Corp | 仮想機械用プログラムのコンパイル対象指定方法、同プログラムのコンパイル対象判定方法、仮想機械実行方法、事前コンパイル方法、コンピュータ、記録媒体、及びプログラム製品 |
GB0125176D0 (en) * | 2001-10-19 | 2001-12-12 | Koninkl Philips Electronics Nv | A method of compiling bytecode to native code |
JP3642772B2 (ja) | 2002-09-25 | 2005-04-27 | 三菱電機株式会社 | コンピュータ装置及びプログラム実行方法 |
-
2003
- 2003-05-28 JP JP2003151472A patent/JP4713820B2/ja not_active Expired - Lifetime
-
2004
- 2004-05-28 KR KR1020057021398A patent/KR101051872B1/ko active IP Right Grant
- 2004-05-28 US US10/556,396 patent/US7958499B2/en not_active Expired - Fee Related
- 2004-05-28 CN CN2004800147316A patent/CN1795434B/zh not_active Expired - Fee Related
- 2004-05-28 WO PCT/JP2004/007731 patent/WO2004107170A1/ja active Application Filing
- 2004-05-28 EP EP04735344.6A patent/EP1635258B1/en not_active Expired - Lifetime
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729235A (zh) * | 2013-12-24 | 2014-04-16 | 华为技术有限公司 | Java虚拟机的编译方法和Java虚拟机 |
CN106325964A (zh) * | 2015-06-18 | 2017-01-11 | 龙芯中科技术有限公司 | 动态编译调度方法及装置 |
CN106325964B (zh) * | 2015-06-18 | 2019-09-27 | 龙芯中科技术有限公司 | 动态编译调度方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1635258B1 (en) | 2018-07-04 |
KR101051872B1 (ko) | 2011-07-25 |
WO2004107170A1 (ja) | 2004-12-09 |
US7958499B2 (en) | 2011-06-07 |
EP1635258A4 (en) | 2009-12-09 |
US20070226714A1 (en) | 2007-09-27 |
CN1795434B (zh) | 2010-05-05 |
KR20060021839A (ko) | 2006-03-08 |
EP1635258A1 (en) | 2006-03-15 |
JP2004355277A (ja) | 2004-12-16 |
JP4713820B2 (ja) | 2011-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1795434A (zh) | 程序执行控制设备,程序执行控制方法,控制程序和记录介质 | |
CN1284095C (zh) | 多处理器系统中的任务分配方法和多处理器系统 | |
CN1152305C (zh) | 虚拟机系统 | |
CN1149492C (zh) | 遥控方法和服务器 | |
CN1115884C (zh) | 可编程的呼叫处理系统和方法 | |
CN1306406C (zh) | 在多个输入/输出子系统映像上共享通信适配器的方法和系统 | |
CN1310148C (zh) | 程序执行处理终端装置和程序执行处理方法 | |
CN1267821C (zh) | 数字广播接收装置和事件发送方法 | |
CN1280714C (zh) | 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器 | |
CN1143208C (zh) | 用于消息转换的装置和方法 | |
CN1266512A (zh) | 适用于面向对象编程语言的硬件加速器 | |
CN1658184A (zh) | 网络系统、分布式处理方法和信息处理装置 | |
CN1906583A (zh) | 信息处理设备、中断处理控制方法、以及计算机程序 | |
CN1485735A (zh) | 指令调度方法、指令调度设备和指令调度程序 | |
CN1677365A (zh) | 通过属性控制的测试实例继承 | |
CN1613057A (zh) | Gui应用程序开发支持装置、gui显示装置、方法和计算机程序 | |
CN1734438A (zh) | 信息处理设备、信息处理方法和程序 | |
CN1613058A (zh) | 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备 | |
CN1041839A (zh) | 包含有在二个目标之间进行数据传送的快照设施的目标管理设施 | |
CN1568458A (zh) | 无需修改现有代码即可增加新软件特征的方法 | |
CN1698034A (zh) | 信息处理装置、进程控制方法、以及计算机程序 | |
CN1218223A (zh) | 执行移动对象的方法以及存储移动对象的记录介质 | |
CN1908904A (zh) | 实时内部简易监视器 | |
CN1321273A (zh) | 操作系统和虚拟计算机系统 | |
CN1191026A (zh) | 用于sql关系数据库的仿真器 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100505 Termination date: 20200528 |