CN1419192A - 中间代码预处理、执行装置及执行系统及计算机程序产品 - Google Patents
中间代码预处理、执行装置及执行系统及计算机程序产品 Download PDFInfo
- Publication number
- CN1419192A CN1419192A CN02148194.6A CN02148194A CN1419192A CN 1419192 A CN1419192 A CN 1419192A CN 02148194 A CN02148194 A CN 02148194A CN 1419192 A CN1419192 A CN 1419192A
- Authority
- CN
- China
- Prior art keywords
- intermediate code
- mentioned
- code
- instruction
- carried out
- 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
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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
这个中间代码执行系统具有一个第一子系统(308),它有一个对应于编译过程中生成的一个指令集合、并顺序解释及执行某个中间代码中所包括的指令的第一解释器(309);一个第二子系统(310),它有一个对该中间代码进行预处理,即将由多个指令构成的一个指令模式替换为一个替代指令的一个预处理部分(311),以及一个对应于包括该替代指令的指令集合、并顺序解释及执行该预处理后的中间代码中所包括的某个指令代码的一个第二解释器(312);以及一个方法分析部分(308),它或者选择由该第一解释器(309)来执行该中间代码,或者选择由该预处理部分(311)对该中间代码进行预处理,然后由该第二解释器(312)来执行该中间代码。
Description
对相关申请的参照说明
本发明根据并要求2001年10月3 1提交的现有日本专利申请号2001-334823与2001年10月31日提交的现有日本专利申请号2001-334825的优先权,特此将两者全部内容引入在此作为参考。
技术领域
本发明涉及一个通过,譬如说,一台虚拟机对某个中间代码进行预处理以便改进该中间代码执行速度的中间代码预处理装置,一个执行该预处理后的中间代码的中间代码执行装置,以及一个用来对该中间代码进行预处理或执行该中间代码的计算机程序产品。
背景技术
为了提供一个不依赖于某个计算机的平台(譬如硬件或操作系统)的程序,已经提出了一种用软件技术或硬件技术在每个平台上构造一台虚拟机(VM)并在该虚拟机上执行源代码与目的代码之间的一个中间代码的方法。作为采用这种方法的一种程序语言,JavaTM采用了被称为一个类文件的一种中间代码形式。应当注意,该硬件和该硬件上构造的虚拟机在下文可以被共同称为一个中间代码执行系统。
根据上述方法,由于单一程序代码可以供给各种平台并被执行,所以不再需要准备只能在各自平台上执行的目的代码。结果,不仅该程序的分配可以简化,而且也提高了软件开发的效率。所以,已经在各种计算机平台上构造了虚拟机。而且近年来,也已经开始在各种内装一个处理器的电子设备(下文将称之为一个嵌入式设备)中构造基于微处理器的虚拟机。
这里,一个已知的虚拟机是某种解释器类型,它以软件的形式在该平台上构造,并顺序解释及执行某个类文件中所包括的字节代码命令。该解释器类型的虚拟机需要一个从该类文件中逐个取出字节代码指令并解释它们的内容的处理过程。在现有技术中这一过程成为额外消耗,所以不能获得优良的性能。
因而,已经提出了一个JIT编译器(即时编译器)系统、一个AOT编译器(提前编译器)或类似系统,它们能将该类文件编译为每类硬件固有的本机代码并对其执行以便改进性能。而且,一直也在尝试硬件形式的某种虚拟机结构,譬如专门设计以便能够直接执行字节代码指令的某种JavaTM芯片。
在上述的JIT或AOT编译器系统中,由于执行的是该处理器的本机代码,所以如果只注意指令执行速度,那么它优于该解释器系统。然而,该编译器系统需要一个供该编译操作本身的工作区域,或者需要一个长度为该类文件4至10倍的储存该本机代码的区域,所以十分不利的是需要比该解释器系统更大的存储器数量。这一问题在对硬件资源限制比一个常规计算机更为严格的嵌入式设备中特别突出。而且,如果在指导执行这个类文件后开始编译,那么该编译操作就成为额外消耗,也就不能得到足够好的性能。
此外,按照上述的JavaTM芯片,尽管该类文件可以不进行编译以高性能执行,但在开发这一专用芯片时需要大量的开发成本,所以芯片本身的成本增加也就不可避免。另外考虑到,根据技术的进步或市场需要,总要在语言规范中适当更新版本或消除错误,所以构造硬件形式的虚拟机也未必是优选的方法。特别是在该嵌入式设备的虚拟机中,因为既强烈要求降低成本又要在一个短周期内对规范进行版本更新,所以采用JavaTM芯片并不现实。
如上所述,很难将编译器系统或JavaTM芯片这样的虚拟机应用于某个嵌入式设备或类似设备。所以,一直要求一种能在应用于某个嵌入式设备的假设下能在执行该中间代码过程中改进性能的技术。
发明内容
本发明的一个目的是提供一个通过对由一台虚拟机执行的中间代码进行预处理来改进执行速度的中间代码预处理装置、一个优选能被用于某个嵌入设备并能快速预处理该中间代码的中间代码执行装置以及一种对该中间代码进行预处理或执行该中间代码的计算机程序产品。
为了达到这一目的,根据本发明的一个第一方面,提供了一个中间代码预处理装置,它对某种预定语言生成的源代码经编译后所得的中间代码进行预处理,其特征为它包括:一个储存中间代码的存储器部分;以及一个预处理部分,该预处理部分将储存在该存储器部分内的中间代码中所包括的某个特定指令模式替换为一个预先与该特定指令模式关联的替代指令。
此外,根据本发明的一个第二方面,提供了一个中间代码执行装置,它执行对某种预定程序语言生成的源代码进行编译后所得的中间代码,其特征为它包括:一个储存中间代码的存储器部分;以及一个处理部分,该处理部分执行如下处理:a)将由储存在该存储器部分内的中间代码中所包括的多个指令构成的一个特定指令模式替换为一个预先与该特定指令模式关联的替代指令;和b)将该替代指令解释为实际相当于该特定指令模式的处理,并在顺序解释与执行该特定指令模式已经用该替代指令替换后的中间代码时执行该替代指令。
而且,根据本发明的一个第三方面,提供一种计算机程序产品,它对某种预定程序语言生成的一个源代码经编译后所得的中间代码进行预处理,其特征为它包括一个用来将该中间代码中所包括的一个特定指令模式替换为一个预先与该特定指令模式关联的替代指令的处理部分。
再者,根据本发明的一个第四方面,提供了一种计算机程序产品,它执行某种预定程序语言生成的一个源代码经编译后所得的中间代码,其特征为它包括一个执行如下处理的处理部分:a)将由该中间代码中所包括的多个指令构成的一个特定指令模式替换为一个预先与该特定指令模式关联的替代指令;和b)将该替代指令解释为实际相当于该特定指令模式的低冗余处理,并在解释与执行该特定指令模式已经用该替代指令替代的中间代码时执行该替代指令。
另外,根据本发明的一个第五方面,提供了一个中间代码执行装置,它执行编译某种预定程序语言生成的源代码后所得的中间代码,其特征为它包括:多个执行该中间代码的中间代码执行部分;一个存储器部分,它既储存中间代码,也储存该中间代码中所包括的一个指令与每个中间代码执行部分能有效执行该指令的适合程度之间的对应关系;以及一个中间代码解释部分,该中间代码解释部分执行如下过程:a)识别储存在该存储器部分内的中间代码中所包括的各指令;b)根据这些识别的指令与该对应关系从这些中间代码执行部分中确定一个合适的能有效执行该中间代码的中间代码执行部分;以及c)标明该中间代码与该合适的中间代码执行部分之间的某种关系。
再有,根据本发明的一个第六方面,提供了一个中间代码执行装置,它执行某种预定程序语言生成的源代码经编译后所得的中间代码,其特征为它包括:一个专用中间代码执行部分;一个通用中间代码执行部分;一个其中储存中间代码的存储器部分;以及一个中间代码分析部分,该中间代码分析部分执行如下处理:a)分析储存在该存储器部分内的中间代码并判断一个不能由该专用中间代码执行部分执行的指令是否包含在该中间代码所包括的指令之内;b)如果该不能执行的指令不包含在该中间代码之中则标明该中间代码应当由该专用中间代码执行部分执行,如果该不能执行的指令包含在该中间代码之中则标明该中间代码应当由该通用中间代码执行部分执行。
此外,根据本发明的一个第七方面,提供了一个中间代码执行系统,它执行某种预定程序语言生成的源代码经编译后所得的中间代码,其特征为它包括:一个其中储存中间代码的存储器部分;一个预处理部分,它对储存在该存储器部分内的中间代码进行预处理,即将该中间代码中所包括的一个特定指令模式替换为一个预先已与该特定指令模式关联的替代指令;一个不能解释并执行该替代指令的第一解释器;一个能够将该替代指令解释为相当于该指令模式在替换前的内容并执行该替代指令的第二解释器;以及一个中间代码分析部分,它分析被该预处理部分处理后的中间代码,判断该替代指令是否包括在该中间代码之中,若该替代指令被包括则标明该中间代码应当由该第一解释器执行,若该替代指令未被包括则标明该中间代码应当由该第二解释器执行。
而且,根据本发明的一个第八方面,提供了一个中间代码执行系统,它执行某种预定程序语言生成的源代码经编译后所得的中间代码,其特征为它包括:一个具有某个第一解释器的第一子系统,该第一解释器能解释并执行编译过程中生成的所有指令;一个第二子系统,它包含一个能进行预处理,即将由该中间代码所包括的多个指令构成的一个指令模式替换为一个替代指令的预处理部分,还包含一个将该替代指令解释为相当于该中间代码在替换前的内容并执行该替代指令的第二解释器;以及一个选择部分,它根据需要执行的中间代码或者选择由该第一子系统的第一解释器来执行该中间代码,或者选择由该预处理部分对该中间代码进行预处理,然后由该第二子系统的第二解释器来执行该经过预处理后的中间代码。
再者,根据本发明的一个第九方面,提供了一个中间代码执行系统,它执行某种预定程序语言生成的源代码经编译后所得的中间代码,其特征为它包括:一个第一子系统,它包含一个能进行预处理,即将由该中间代码中所包括的多个指令构成的一个第一指令模式替换为一个第一替代指令的预处理部分,还包含一个能够将该第一替代指令解释为相当于该第一指令模式的内容并执行该第一替代指令的第一解释器;一个第二子系统,它包含一个能进行预处理,即将该中间代码中所包括的一个第二指令模式替换为一个第二替代指令的预处理部分,还包含一个能将该第二替代指令解释为相当于该第二指令模式的内容并执行该第二替代指令的第二解释器;以及一个选择部分,它根据需要执行的中间代码或者选择在该第一子系统中由该第一预处理部分对该中间代码进行预处理并由该第一解释器执行该中间代码,或者选择在该第二子系统中由该第二预处理部分对该中间代码进行预处理并由该第二解释器执行该已经预处理后的中间代码。
本发明的其他目的与优点将在随后的说明中阐述,其中部分可以通过该说明变得显而易见,或者可以通过本发明的实践来认识。本发明的目的与优点可以借助下文特别指出的手段与组合来实现与获取。
附图说明
编入并构成该说明书之一部分的附图显示了本发明目前优选的实施例,它们与上面给出的总体说明以及下面将要给出的对优选实施例的详细说明一道可用于说明本发明的原理。
图1是一幅显示根据本发明的一个第一实施例的一个中间代码预处理装置结构的方框图;
图2是一幅流程图,它演示由根据本发明该第一实施例的一个中间代码预处理装置对中间代码进行预处理的一个处理过程;
图3是一幅映射图,它演示一个中间代码与一个替代指令之间由根据本发明该第一实施例的中间代码预处理装置作出的关联;
图4是一幅示意图,它演示由根据本发明该第一实施例的中间代码预处理装置对该中间代码进行预处理的一个处理过程中的每个步骤;
图5是一幅表示根据本发明的一个第二实施例的一个中间代码执行装置结构的方框图;
图6是一幅流程图,它演示根据本发明该第二实施例的中间代码执行装置中的处理过程;
图7是一幅表示根据本发明的一个第三实施例的一个中间代码执行装置结构的方框图;
图8是根据本发明该第三实施例的中间代码执行装置所用的某个对应关系数据库13的一幅数据结构视图;
图9是一幅流程图,它表示根据本发明的一个第三实施例的中间代码执行装置中某个中间代码分析部分20的运行过程;
图10是根据本发明的一个第四实施例的中间代码执行装置所用的某个对应关系数据库13的一幅数据结构视图;
图11是根据本发明该第四实施例的中间代码执行装置所用的对应关系数据库13的一幅数据结构视图;
图12是一幅显示根据本发明的一个第五实施例的一个中间代码执行装置结构的方框图;
图13是一幅流程图,它表示根据本发明该第五实施例的中间代码执行装置中某个中间代码分析部分20的运行过程;
图14是一幅显示根据本发明的一个第六实施例的一个中间代码执行装置结构的方框图;
具体实施方式
下文将参看所附例图说明根据本发明的优选实施例。
【第一实施例】
首先参看图1至图4来详细说明根据本发明该第一实施例的一个中间代码预处理装置。
图1表示根据该第一实施例的某个中间代码预处理装置1的一种硬件结构,它将JavaTM类文件作为中间代码进行预处理。
这个中间代码预处理装置1包括一个存储器部分101、一个处理部分102与一个输入部分103。处理部分102是一个算术运算器件,譬如一个处理器或一个微控制器。处理部分102的数量不限于1,可以采用能够由多个处理器或多种算术运算器件进行分散处理的结构。输入部分103在该中间代码预处理装置中输入一个类文件或类似的文件。从输入部分103输入的类文件被储存在存储器部分101内。存储器部分101包括一个存储器,譬如一个RAM和/或一个ROM。这里为了方便只画了一个存储器部分101,但多个存储器部分也可以分散排列。
一份使由多个指令构成的一个指令模式101a与一个替代指令101b关联的表格被储存在存储器部分101内的一个预定区域中,一个类文件101c也储存在这一部分。这里,指令模式101a是一个由多个字节代码指令构成的模式。
譬如,现在取整数相加作为一个示例进行说明。举例来说,在这种情况下,一个指令模式“iload”、“iload”、“iadd”可以如图3所示频繁地出现在JavaTM类文件所包含的一个方法中。所以根据该第一实施例的中间代码预处理装置1在存储器部分101内储存一份表格,其中该频繁出现的指令模式与一个替代指令(譬如“v_v_iadd”)相关联,该替代指令执行与该指令模式类似的处理。这里,“iload”是由两个字节构成的某个中间代码的一个助记符号,它将一个本地变量的某个数值压入一个操作对象栈。此外,“iadd”是由一个字节构成的某个中间代码的一个助记符号,它从该操作对象栈中弹出两个值相加并将一个结果压入该操作对象栈。
替代指令101b是一个在该替代指令可以执行的环境中被解释为与指令模式101a同样处理过程的指令。相反,这个实施例假设存在一个中间代码执行装置,它能够将该替代指令101b解释为实际相当于替换前的该指令模式,并对其执行。举例来说,在上述情况下,这个中间代码执行装置将该替代指令“v_v_iadd”解释为与指令模式“iload”、“iload”、“iadd”同样的处理过程,并对其执行。顺便提一下,当执行这个替代指令时,也优选通过防止频繁访问存储器、省略冗余处理、利用一个寄存器或类似部分来使指令执行中的额外消耗因素最小。
而且,该替代指令101b的代码长度比指令模式101a短。譬如,替代指令“v_v_iadd”代码有3个字节长,比替换前的5字节代码长度短。所以,按照这种预处理,类文件101c的长度也可以缩短。
在上述结构中,中间代码预处理装置1的各种功能由处理部分102执行一系列软件程序来实现,而且对类文件101c进行下述预处理。图2是演示这个实施例中预处理步骤的一幅流程图。这里假设类文件101c从输入部分103被输入到中间代码预处理装置1,并被储存到存储器部分101。根据这个假设,该处理过程按下述步骤执行。
当中间代码预处理过程开始时(S101),处理部分102首先从存储器部分101读取一份指令模式101a与替代指令101b相互关联的表格(S102)。
然后,处理部分102检索类文件101c并指定指令模式101a(S103)。举例来说,如图3与图4所示,在类文件101c中指定了一个串行指令模式101a“iload”、“iload”、“iadd”。
以这种方法指定了该指令模式后,处理部分102将类文件101c中该指定指令模式101a替换为与指令模式101a关联的替代指令101b(S104)。
图4是一幅具体演示S104中处理过程的一个示例的示意图。在这个示例中,包括在该指定指令模式中的“iload 8”、“iload 9”、“iadd”首先被转换为“nop”、“nop”、“v_v_iadd 8,9”(第一阶段)。这里,“nop”是一条不进行操作的指令。
为了避免需要转换的类文件长度发生变化并防止该类文件所包括的条件转移目的地改变,可以用这种方法在“v_v_iadd 8,9”前插入多个“nop”。经过第一阶段的处理之后,要执行删除每一个“nop”的处理并同时改变条件转移的某个目的地(第二阶段)。结果,就完成了S104中的处理。
这样,就结束了中间代码的预处理(S105)。
在根据该第一实施例的中间代码预处理装置中,需要执行的代码长度由总共5个字节代码“iload 8”、“iload 9”、“iadd”下降为一个3字节的指令“v_v_iadd”。所以,在减少需要执行的指令数量的同时也省去了指令之间的冗余处理,该类文件的长度也得以缩短。
通过将某个替代指令101b解释为相当于指令模式101a在替换前的处理并使额外消耗因素(如存储器访问)降到最小,然后对其加以执行,那么如此获得的中间代码就可以在符合某个替代指令(如“v_v_iadd”)的执行环境中快速执行。此外,由于上述中间代码的预处理只是该代码的替换,所以只需要较低的额外消耗就能执行,而且该类文件的长度也不会像编译为本机代码那样变长。所以,该中间代码的执行性能会显著改进。
举例来说,在将这个实施例应用于一个嵌入式设备(如一部移动电话)时,也可以将上述替代指令101b能够在其中执行的环境安装到该嵌入式设备,而且可以用中间代码预处理装置1将预处理后的类文件预先安装或分配到该嵌入式设备。这样一来,该嵌入式设备中执行的JavaTM应用程序的性能就可以得到改进。另外,预处理装置1与替代指令101b能在其中执行的执行环境也可以安装到该嵌入式设备,而且该类文件的预处理与该预处理后的类文件执行两者均可以在移动电话中完成。
需要注意,包含彼此关联的指令模式101a与替代指令101b的表格被储存在这个实施例的存储器部分101内,但这个表格可以嵌入到执行该预处理的软件程序中,或者它可以独立于执行该预处理的软件程序而单独提供。
此外,在上述预处理步骤中,S104的处理并不限于图4所示。譬如,在图4所示的第一阶段处理后,“nop”并非必须删除而不在该第二阶段中进行处理。在这种情况下,包括“nop”的中间代码就可以按原样在该执行环境中执行,或者该类文件也可以在执行“nop”的删除并改变该执行环境中条件转移的某个目的地的同时执行。特别是在该后一情况下,优选通过由该执行环境利用空载时间来完成上述预处理。
【第二实施例】
现在参看图5与图6说明根据本发明的一个第二实施例的中间代码执行装置。
图5表示根据本发明的、能以JavaTM类文件作为中间代码执行的该第二实施例的一个中间代码执行装置2的一种硬件结构。中间代码执行装置2包括一个存储器部分201、一个处理部分202与一个输入部分203。应当注意,存储器部分201、处理部分202与输入部分203基本类似于根据该第一实施例的中间代码预处理装置1的存储器部分101、处理部分102与输入部分103。而且,储存在存储器部分201内的一个指令模式201a、一个替代指令201b与一个类文件201c也基本类似于根据该第一实施例的中间代码预处理装置1的储存在存储器101内的指令模式101a、替代指令101b与类文件101c。所以关于这些部分的重复解释在此从略。
在上述结构中,中间代码执行装置2中的各种功能都可以由处理部分202执行一系列软件程序来实现,预处理按下面的说明对类文件201c进行,而且预处理后的类文件201c亦被执行。图6是演示这个实施例中类文件201c的预处理及执行步骤的一幅流程图。这些步骤的根据是,假设从输入部分203预先输入的类文件201c被储存在存储器部分201内。
首先开始中间代码的预处理(S201),处理部分202从存储器部分201读取一份彼此相关的指令模式201a与替代指令202b的表格(S202)。随后,处理部分202检索类文件201c并指定指令模式201a(S203)。然后,处理部分202将该指定指令模式201a替换为替代指令201b(S204)并结束该中间代码的预处理(S205)。上述处理与该第一实施例中的预处理步骤相同,故而详细说明从略。
然后,执行经过上述预处理的类文件201c。这里执行的是构成该解释器的软件程序,它能够将替代指令201b解释为相当于指令模式201a的内容并对其执行,因此处理部分202从储存在该存储器部分内的类文件201c中取出一个指令(S206),并由处理部分202执行对应于该取出的指令的处理(S207)。
根据根据该第二实施例的中间代码执行装置2,将指令模式201a替换为替代指令201b的预处理也可以通过上述步骤应用于类文件201c,从而执行该预处理后的中间代码。所以,缩短了类文件201c的代码长度,并可以执行省去了指令间冗余处理的中间代码,从而改进了该中间代码的执行性能。而且,若执行的是预处理后的中间代码,那么通过将该替代指令解释为额外消耗因素达到最小的处理并加以执行,中间代码的执行性能可以进一步改进。
应当指出,尽管已经说明了该类文件的预处理与执行按图6所示步骤连续进行的情况,但是该类文件的预处理与执行并非必须连续进行,而且可以预先对该类文件进行预处理,然后执行该预处理后的类文件。
另外,与替代指令201b关联的指令模式201a也不限于一种类型,指令模式201a的类型数目可以是2或更大。在这种情况下,如果按图6所示步骤连续进行类文件的预处理与执行,那么为了在该预处理的额外消耗尽可能降低的条件下开始执行该类文件,可以只对与替代指令201b关联的某些指令模式201a进行用该替代指令来替换的预处理。
再有,构成处理部分202的处理器或微处理器的性能也随安装中间代码执行设备2的个别设备而异,而且进行预处理所需的某个附加时间或某个处理量亦随情况而异。所以,如果有多个指令模式与该替代指令关联,那么需要替换的指令模式数量可以根据该设备的特性或不同情况作静态调整。这样,就可以实现符合安装了中间代码执行装置2的设备特性或者不同情况的预处理。譬如,如果根据本发明的中间代码执行装置2被安装在一部移动电话中,那么当下载到该移动电话的类文件被立即执行时就可以调整为只有某些指令模式需要替换,而当它不需要立即执行时就可以调整为所有指令模式均需要替换。这样一来,就可以根据情况在该移动电话中执行该类文件并同时进行该预处理。
【第三实施例】
现在参看图7至图9来详细说明根据本发明的一个第三实施例的一个中间代码执行装置。
图7是表示根据本发明该第三实施例的一个中间代码执行装置100的一幅示意图,该装置将JavaTM类文件作为中间代码执行。这个中间代码执行装置100有一个内含一个处理器或一个微控制器的算术运算部分5以及一个与该算术运算部分5相连的存储器部分10。
算术运算部分5通过执行一个预定的软件程序而形成一个中间代码分析部分20以及中间代码执行部分30A、30B与30C。这个软件程序可以储存在存储器部分10内,或者它可以储存在另一个存储器部分内。
每个中间代码执行部分30A、30B与30C都像一个顺序解释并执行该中间代码的解释器那样运行。另外,中间代码执行部分30A、30B与30C是具有彼此不同处理特性的类型。譬如,中间代码执行部分30A处理一个快速字节代码指令F、但同时处理一个慢速字节代码指令G。中间代码执行部分30B处理一个快速字节代码指令G、但同时处理一个慢速字节代码指令F。中间代码执行部分30C对任何字节代码指令都具有某个平均速度。
中间代码分析部分20分析储存在存储器部分10内的类文件12中所包括的某种方法的特性,选择符合该特性的中间代码执行部分30,并且标明该方法与选定中间代码执行部分的某种组合方式。中间代码分析部分20所执行的处理将在后面说明。
存储器部分10具有一个RAM、一个ROM及其他部分,它储存类文件12以及一个对应关系数据库13。存储器部分10可以具有一个物理上单一的结构,或者也可以有多个存储器部分10。
类文件12是通过编译一个用JavaTM生成的源代码产生的,它包括一种或多种方法。这种方法是用来实现特定处理的多个字节代码指令的一个集合。
对应关系数据库13是一个管理每个中间代码执行部分30A、30B、30C中每个字节代码指令的某种处理效率等级评分的数据库。图8是一幅数据结构示意图,它是对应关系数据库13的具体内容的一个示例。如图8所示,对应关系数据库13储存每一个中间代码执行部分30A、30B、30C中每个字节代码指令的某个处理效率等级评分。这里,该处理效率等级评分是一个表示该字节代码指令能够被有效执行的级别数值,而且优选根据各个中间代码执行部分30A、30B、30C的规范预先定义这个评分。
举例来说,在图8的最上方,定义了每个中间代码执行部分30A、30B、30C中某个字节代码指令a的处理效率等级评分。更详细地说,中间代码执行部分30A中的字节代码指令a的处理效率等级评分为90;中间代码执行部分30B中的字节代码指令a的处理效率等级评分为10;中间代码执行部分30C中的字节代码指令a的处理效率等级评分为10(这里认定数值较高时效率较好)。所以,根据这个对应关系数据库13可以发现,由中间代码执行部分30A来执行字节代码指令a最有效。类似地,每个中间代码执行部分30A、30B、30C中字节代码指令b与c以及所有其他字节代码指令的处理效率等级评分都在对应关系数据库13中进行定义。
现在参看图9的流程图来说明根据该第三实施例的中间代码执行装置100中的中间代码分析部分20所执行的处理步骤。
中间代码分析部分20首先从存储器部分10内的类文件12中读取一种方法(S301)。然后,中间代码分析部分20分析该读取的方法并指定该方法中包括的字节代码指令(S302)。由于一个方法包括多个字节代码指令,所以中间代码分析部分20重复这些步骤来指定该方法所包括的多个字节代码指令中的每一个。
然后,中间代码分析部分20询问存储器部分10中的定义关系数据库13,获取对应于S102中确定的各个字节代码指令的处理效率等级评分,并计算这些评分的总和(S303)。
此后,中间代码分析部分20根据S303中得到的各个中间代码执行部分30A、30B与30C中的处理效率等级总分来指定能够最有效地执行类文件12的中间代码执行部分(S304)。具体地讲,中间代码分析部分20将总分按照每个中间代码执行部分彼此比较,具有最高总分的中间代码执行部分就可以被指定为用来执行该方法的中间代码执行部分。
最后,中间代码分析部分20标明该方法应当由S304中指定的中间代码执行部分来执行(S305)。具体地讲,譬如,可以在按照每个方法保留的管理信息中标明应当实施执行的一类中间代码执行部分,或者可以在该方法中标记应当实施执行的一类中间代码执行部分。对类文件12中所包含的所有方法执行这种操作,然后中间代码分析部分20结束处理。
现在用图8所示的对应关系数据库13为例来具体说明S303与S304中的处理内容。假设该方法包括字节代码a与d,中间代码分析部分20获得中间代码执行部分30A中字节代码指令a的处理效率等级评分90,中间代码执行部分30B的处理效率等级评分10和中间代码执行部分30C的处理效率等级评分10。然后,中间代码分析部分20获得中间代码执行部分30A中字节代码指令d的处理效率等级评分50,中间代码执行部分30B的处理效率等级评分40和中间代码执行部分30C的处理效率等级评分90,并将它们加到字节代码指令a的评分上。
在这种情况下,中间代码执行部分30A中的处理效率等级总分为140,中间代码执行部分30B中的总分为50,中间代码执行部分30C中的总分为100。所以,中间代码分析部分20指定将要被用来执行该方法的中间代码执行部分30A。
通过执行上述处理,中间代码执行装置100在执行类文件12中所包括的方法时,就可以根据中间代码分析部分20标明的内容,采用按照该方法所包括的字节代码指令来确定的最有效的中间代码执行部分30A、30B或30C。
所以,根据该第三实施例,由于包括在类文件12中的方法可以采用具有不同特性的中间代码执行部分30A、30B或30C被有效执行,故而提供了具有高性能的中间代码执行装置100。
【第四实施例】
现在参看图10与图11来详细说明根据本发明的一个第四实施例的一个中间代码执行装置。
根据该第四实施例的中间代码执行装置与第三实施例基本结构相同。但是,根据该第四实施例的中间代码执行装置与该第三实施例的不同点在于,中间代码分析部分20计算对某个方法所包括的各个字节代码指令惟一确定的评分的一个总和,并根据这个总和的等级来指定中间代码执行部分30A、30B与30C中的任何一个。
在中间代码分析部分20中,为了实现上述指定方法,该第四实施例的对应相关数据库13包括一份如图10所示的定义了各个字节代码指令与各个字节代码指令评分之间对应关系的表格,和一份如图11所示的定义一个总分范围与中间代码执行部分30A、30B与30C之间对应关系的表格。
先根据图10的示例给出对前者的说明,图10的左侧表示各个字节代码指令,图10的右侧表示按照这些指令设定的评分数值。这里,字节代码指令a的评分被惟一地设定为40;字节代码指令b的评分为90;而字节代码指令c的评分为50。
然后根据图11的示例给出对后者的说明,图11的左侧表示该总分的范围,图11的右侧表示按照该总分范围指定的中间代码执行部分30A、30B与30C中的任何一个。这里,如果某个给定方法所包括的字节代码指令对应的总分在低于201的某个范围内,就指定中间代码执行部分30A。类似地,如果评分总和不低于201但低于401,就指定中间代码执行部分30B。如果它不低于401,就指定中间代码执行部分30C。
在该第四实施例中,中间代码分析部分20所执行的处理的基本步骤实际上与该第三实施例相同。
就是说,如图7所示,中间代码分析部分20从存储器部分10内的类文件12中读取一种方法(S101),指定该方法中包含的字节代码指令(S102),通过询问对应关系数据库13来获取对应于各个指定字节代码指令的评分并计算这些评分的一个总和(S103)。此后,通过再次询问对应关系数据库13来按照该总分指定中间代码执行部分(S104),标明该方法应当由该指定中间代码执行部分来执行(S105),然后结束该处理过程。
现在选择图10与图11所示的对应关系数据库13为例来具体说明S103与S104中的处理内容。
假设该方法包括字节代码指令a与c,中间代码分析部分20取得字节代码指令a的得分40与字节代码指令c的得分55,这些得分的总和是95(ST103)。中间代码分析部分20根据这个总和与图11所示的表格来指定用于执行该方法的中间代码执行部分30A。
在执行上述处理的该第四实施例中,按照该方法所包括的字节代码指令所确定的最有效的中间代码执行部分30A、30B或30C的使用方法与该第三实施例相同,从而提供了具有很高性能的中间代码执行装置100。
【第五实施例】
现在参看图12与图13详细说明根据本发明的一个第五实施例的一个中间代码执行装置。
图12是一幅表示根据本发明该第五实施例的一个中间代码执行装置200的示意图。中间代码执行装置200的基本结构与该第三与第四实施例相当,但和该第三与第四实施例的不同点在于,提供了一个通用中间代码执行部分31与一个专用中间代码执行部分32。
这个中间代码执行装置采用通用中间代码执行部分31与专用中间代码执行部分32来执行类文件12。通用中间代码执行部分31是一个解释器,它顺序解释并执行类文件,而且具有执行所有字节代码指令的一种常规功能。另一方面,专用中间代码执行部分32是一个专用解释器,它能以比通用中间代码执行部分31更快的速度执行特定的字节代码指令,但不能执行某些指令(譬如一个有关浮点算术运算的字节代码指令)。
而且,该第五实施例中的一个对应关系数据库13具有一种用来识别每个字节代码指令是否能够由专用中间代码执行部分32执行的数据结构。
现在参看图13的流程图来说明根据该第五实施例的中间代码执行装置200的中间代码分析部分20所执行的处理步骤。
中间代码分析部分20首先从类文件12中读取一种方法(S201)。然后,中间代码分析部分20分析该读取的方法,指定该方法中所包括的字节代码指令(S202),并根据对应关系数据库13的内容判断该指定字节代码指令是否不能由专用中间代码执行部分32执行(S203)。
在S203,如果认定该不能由专用中间代码执行部分32执行的字节代码指令未被包括,那么中间代码分析部分20就标明该方法应当由专用中间代码执行部分32来执行(S204)。另一方面,如果在S203中认定该不能由专用中间代码执行部分32执行的字节代码指令已被包括,那么中间代码分析部分20就标明该方法应当由通用中间代码执行部分32来执行(S205)。应当指出,该标记方法可以类似于该第三与第四实施例的方法。对类文件12所包括的所有方法执行上述操作,然后中间代码分析部分20结束该处理过程。
根据上述该第五实施例,分别采用能够以某个高速度执行特定字节代码指令但不能执行某些字节代码命令的专用中间代码执行部分32与能执行所有指令的通用中间代码执行部分31,特定字节代码指令就可以被快速执行,并可以提供执行所有字节代码指令的中间代码执行装置200。
【第六实施例】
现在参看图14来详细说明根据本发明的一个第六实施例的一个中间代码执行系统。
根据该第六实施例的中间代码执行系统300将一个JavaTM类文件作为某个中间代码来执行。而且如图14所示,中间代码执行系统300主要包括一个储存某个类文件302的存储器部分301、一个实际上由某个图中未画的处理部分来执行某个预定程序而形成的方法分析部分307、一个第一子系统308与一个第二子系统310。
储存在存储器部分301内的类文件302可以通过编译以JavaTM语言生成的一个源代码来获得。这个类文件包括方法303至305。
类文件302是作为一个压缩jar文件分配的,它可以由中间代码执行系统300解压。应当注意,该jar文件是一个存档文件,其中为运行该JavaTM程序所需的各个类文件被组织成一个文件。但是在图14中,它已经以该类文件的形式被储存在存储器部分310中。
第一子系统308包括一个第一解释器309。另外,它可以利用第一解释器309来顺序解释并执行包含在JavaTM类文件中的字节代码指令。第一解释器309是一个常规解释器,它与编译中产生的一个指令代码集合兼容,在本例中即与编译以JavaTM语言生成的源代码所产生的所有字节代码指令兼容。
另一方面,该第二子系统310包括一个其某种结构与某种功能基本与上述中间代码预处理装置相等的预处理部分311,以及一个第二解释器312。预处理部分311对类文件302中的每种方法进行将一个特定字节代码指令模式替换为一个对应替代指令的预处理,譬如将一个指令模式“iload”、“iload”、“iadd”替换为“v_v_iadd”。另外,第二解释器312被配置得能够解释并执行替换后增加到该方法中的替代指令以便应付该处理以后的方法。
更具体地讲,在预处理部分311将一个特定指令模式替换为一个替代指令意味着将构成该特定指令模式的某个操作代码与某个操作数的一个组合替换为一个新定义的替代指令的某个操作代码与某个操作数的一个集合。应当指出,该操作代码代表一个指令的运行,该操作数代表作为该指令目标的一个栈、一个寄存器或类似部分。
但是在JavaTM情况下,由于该操作代码的长度被限定为一个字节,所以操作代码的类型不能随意增加。
因而在该第六实施例中,一个替代指令被分配给已经分配了另一个指令的操作代码,在执行时该操作代码被解释为该替代指令,所执行的步骤与替换前的指令模式所执行的步骤相同。
就是说,在该第六实施例中,一个替代指令被分配给已经在某个常规字节代码指令中被分配了一个浮点算术运算指令的操作代码。然后在第二解释器312中,该操作代码按照由该替代指令替换前的指令模式所执行的相同步骤被解释与执行。
这样一来,在第二子系统310中,该方法先在预处理部分311中受到预处理,然后它可以由第二解释器312来执行。但在上述示例中,包括浮点算术运算指令的方法不能由第二子系统310执行。
上述方法分析部分307分析需要执行的方法中所包括的指令,并选择能根据某个分析结果来执行该方法的第一子系统308或者第二子系统310。然后,在该方法中标记一个选择结果。就是说,在该第六实施例中,方法分析部分307的功能对应于该第五实施例中的中间代码分析部分20的功能。
现在说明用具有上述结构的中间代码执行系统300来执行类文件312中所包括的方法303的步骤。
方法分析部分307首先分析包括在方法303中的指令。
举例来说,如果如上所述,在第二子系统310中该替代指令的操作代码被分配给该浮点算术运算指令的操作代码,那么就判断方法303是否包括一个浮点算术运算指令。然后,根据某个判断结果在方法303的一个预定位置306处标记应当采用方法303的子系统。就是说,如果认定方法303包括该浮点算术运算的一个指令,那么就选择在第一子系统309中执行。同样,如果认定方法303不包括该该浮点算术运算指令,那么就选择在第二子系统310中执行。
如果选择在第一子系统309中执行,那么方法303就按原样由第一解释器309顺序解释并执行。
另一方面,如果选择在第二子系统310中执行,那么预处理部分311就对方法303进行预处理,由方法303中所包括的多个指令构成的一个固定模式就被替换为一个替代指令。然后该替代指令由与该替代指令相应的第二解释器312顺序解释并执行。
然后,在如上所述完成方法303的执行后,按照类文件302的内容继续顺序执行方法303至305中的任何一种直到该程序结束。
根据根据该第六实施例的中间代码执行系统300的结构与方法执行步骤,可以通过将该方法中包含的特定指令模式替换为该替代指令并加以执行来有效地运行不能执行某些指令、但能够在省略指令之间冗余处理的情况下快速执行该方法的第二子系统310,并有效运行能够执行所有指令的第一子系统308,从而以优良性能执行该类文件。
应当注意,该第一至第六实施例可以按许多方法修改。
譬如,在该第一与第二实施例中,已经对以类文件为单位进行预处理的情况进行了说明,但在这些实施例中也可以像该第六实施例那样以方法为单位来进行预处理。此外,该第三与第四实施例中的对应关系数据库13的数据结构或者这个结构中评分的设定也不限于上述的情况。
而且,代替该第六实施例中第一子系统309与第二子系统的某个组合,也可以采用两个子系统,其中每个都具有将该特定指令模式替换为该替代指令的预处理部分以及能够执行该替代指令的解释器。在采用这些子系统的某个组合的情况下,将这些替代指令分配给两个子系统中的不同操作代码就可以分别利用这两个系统。子系统的数量可以是3或更多。
再者,在该第六实施例中,尽管已经对第二子系统310在执行该方法时进行预处理的情况进行了说明,但将该预处理后的方法保留在存储器部分301内,那么对该方法已经执行过的预处理就可以省略。另外,在装载该类文件时,所有方法都可以用方法分析部分307进行分析,而且应当在第二子系统310中执行的方法也可以事先进行预处理。还有,该预处理也可以在编译时进行。
此外,在不允许出现由方法分析部分307进行的分析或预处理部分311进行的预处理所造成的存储器消耗、额外消耗等情况下,这些分析或预处理可以省略,该方法可以在第一子系统308中执行。
而且,在第六实施例中,尽管已经作为示例说明了该替代指令被分配给业已分配了该浮点算术运算指令的操作代码的情况,但本发明并不限于此。该替代指令也可以分配给业已分配了任何其他指令的操作代码。
而且,在该第一至第六实施例的每一个中,JavaTM类文件可以被应用于该被修改的中间代码,并且只要假设执行该源代码与该本机代码之间的中间代码,那么JavaTM以外的任何语言都可以应用。
上面已经说明了根据本发明的第一至第六实施例。
就是说,根据该第一与第二实施例,指定了一个预定的指令模式,该指定指令模式被替换为一个代码缩短的替代指令。所以指令的类型可以减少,而且可以获得一个没有指令之间冗余处理的新中间代码。再者,在这个预处理中该中间代码长度不会增加。另外,由于预处理本身只是进行简单替换,所以能够快速执行。再有,在对应于该替代指令的执行系统中执行该新获得的中间代码,该中间代码就可以快速执行。
此外,根据该第三实施例,在该装置中提供了多个中间代码执行部分,另一方面,该中间代码分析部分通过分析作为某个执行目标的中间代码来选择并标明适合有效地执行该中间代码的中间代码执行部分。所以,选择该标明的中间代码执行部分就可以快速执行该中间代码。而且,该中间代码中包括的每个字节代码指令与每个中间代码执行部件的处理效率等级评分之间的对应关系已被储存,用于执行该中间代码的中间代码执行部分也根据这个关系来指定。这样,根据考虑了每个中间代码执行部分特性后所作的详细设定值就能判断适合有效执行该字节指令的中间代码执行部分。
再者,根据该第四实施例,该中间代码所包括的每个字节代码指令与该中间代码执行部分的处理效率等级评分之间的对应关系以及该评分的某个范围与根据这个范围指定的中间代码执行部分之间的对应关系都被储存,根据这些关系就可以指定用于执行该中间代码的中间代码执行部分。所以,即使配备的中间代码执行部分数量很多,也可以具有这样的好处,即不必按照每个中间代码执行部分的处理效率等级评分进行设定与综合。
另外,根据该第五实施例,提供了两类中间代码执行部分,即专用中间代码执行部分与通用中间代码执行部分,该通用中间代码执行部分只执行包括不能由该专用中间代码执行部分执行的字节代码指令在内的中间代码,另一方面,该专用中间代码执行部分执行任何其他中间代码。所以,在专用于特定处理的中间代码执行部分与能被一般使用的中间代码执行部分之间另外选择一个供该中间代码输出的目的地的情况下,可以提供一个能以很高速度实现该中间代码执行的系统。
再有,根据该第六实施例,尽管不能执行某些指令但能省去指令之间冗余处理、并通过将该方法中所包括的特定指令模式替换为该替代指令并加以执行来快速执行该方法第二子系统能够有效运行,但方法执行速度虽不快却能执行所有指令的第一子系统也能够有效运行,所以能以极优良的性能来执行该类文件。
应当注意,本发明并不限于该第一至第六实施例,可以在本发明的范围内作各种改进/修改。譬如在该第三至第五实施例中,采用了预先储存该中间代码所包括的字节代码指令与适合有效执行该字节代码指令的中间代码执行部分之间对应关系的结构。但是,本发明并不限于此,它可以设计得能根据不同情形来改变该对应关系。此外,用一个硬件加速器来实现至少一部分解释器功能可以改进该执行速度。采用该硬件加速器有各种优点,譬如能防止所需存储器数量增加、能利用适合某个嵌入设备的某种方法等等。
那些熟悉技术的人员很容易发现其他优点与修改。所以本发明就其更广的方面讲不限于这里显示及描述的个别细节与代表性实施例。因此,可以作出各种修改而不偏离该所附权利要求以及它们的等价条款所定义的总体发明概念的精神或范围。
Claims (21)
1、一个对某种预定程序语言生成的源代码经编译后所得的中间代码进行预处理的中间代码预处理装置,其特征为包括:
一个储存中间代码的存储器部分(101);以及
一个处理部分(102),它将储存在上述存储器部分(101)内的中间代码中所包括的一个特定指令模式替换为一个预先与上述特定指令模式关联的替代指令。
2、根据权利要求1的中间代码预处理装置,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是包括该JavaTM字节代码指令的类文件(101c)。
3、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行装置,其特征为包括:
一个储存中间代码的存储器部分(201);以及
一个处理部分(202),它执行如下处理:
a)将由储存在上述存储器部分(201)内的上述中间代码中所包括的多个指令构成的一个特定指令模式替换为一个预先与上述特定指令模式关联的替代指令;以及
b)在顺序解释与执行上述特定指令模式已经被替换为上述替代指令的上述中间代码时,将该替代指令解释为实际相当于上述特定指令模式的处理并执行该替代指令。
4、根据权利要求3的中间代码执行装置,其特征为,上述预定程序语言是JavaTM语言,该中间代码是包括该JavaTM字节代码指令的类文件(201c)。
5、一个对某种预定程序语言生成的源代码经编译后所得的中间代码进行预处理的计算机程序产品,其特征为包括一个用来将上述中间代码中所包括的一个特定指令模式替换为一个预先与上述特定指令模式关联的替代指令的处理部分(102)。
6、根据权利要求5的计算机程序产品,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是包括该JavaTM字节代码指令的类文件(101c)。
7、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的计算机程序产品,其特征为包括一个执行如下处理的处理部分(202):
a)将由该中间代码中所包括的多个指令构成的一个特定指令模式替换为一个预先与上述特定指令模式关联的替代指令;
b)在解释与执行上述特定指令模式已经被替换为上述替代指令的上述中间代码时,将该替代指令解释为实际相当于上述特定指令模式的低冗余处理并执行该替代指令。
8、根据权利要求7的计算机程序产品,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是包括该JavaTM字节代码指令的类文件(201c)。
9、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行装置,其特征为包括:
多个执行该中间代码的中间代码执行部分(30A、30B、30C);
一个存储器部分(10),它储存该中间代码,而且储存该中间代码所包括的一个指令与每个中间代码执行部分(30A、30B、30C)的适合程度之间的某种对应关系;以及
一个中间代码解释部分(20),它执行如下处理:
a)识别储存在上述存储器部分(10)内的中间代码中所包括的指令;
b)根据上述识别出的指令与上述对应关系,从上述中间代码执行部分(30A、30B、30C)中确定能有效执行上述中间代码的一个合适部分;以及
c)标明该中间代码与上述合适的中间代码执行部分(30A、30B、30C)之间的某种关系。
10、根据权利要求9的中间代码执行装置,其特征为,上述对应关系包括每个指令被各个中间代码执行部分(30A、30B、30C)执行时的某种处理效率等级的一个评分表格,而且步骤b)还包括如下处理:
b1)根据上述评分表格,获取一个上述识别的指令被各个中间代码执行部分(30A、30B、30C)执行时的处理效率等级评分;
b2)按照每个中间代码执行部分(30A、30B、30C)计算所得评分的总和;以及
b3)根据按照每个中间代码执行部分(30A、30B、30C)求和所得的评分从上述中间代码执行部分(30A、30B、30C)中确定一个合适的部分。
11、根据权利要求9的中间代码执行装置,其特征为,上述对应关系包括分配给每个指令的某个得分数值以及与各个中间代码执行部分(30A、30B、30C)对应的某个得分总值的一个范围,而且步骤b)还包括如下处理:
b1)根据上述对应关系获取一个识别的指令的一个得分;
b2)计算所获取的各个得分的总值;以及
b3)根据上述对应关系与上述算得的总值从上述中间代码执行部分(30A、30B、30C)中确定一个合适的部分。
12、根据权利要求9的中间代码执行装置,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是包括JavaTM字节代码指令的JavaTM类文件(12)。
13、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行装置,其特征为包括:
一个专用中间代码执行部分(32);
一个通用中间代码执行部分(31);
一个其中储存中间代码的存储器部分(10);以及
一个中间代码分析部分(20),它执行如下步骤:
a)分析储存在该存储器部分(10)内的上述中间代码,判断不能由上述专用中间代码执行部分(32)执行的某个指令是否被包含在该中间代码所包括的指令当中;
b)如果确定该不能执行的指令未被包含则标明该中间代码应当由专用中间代码执行部分(32)执行,如果确定该不能执行的指令已被包含则标明该中间代码应当由通用中间代码执行部分(32)执行。
14、根据权利要求13的中间代码执行装置,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是包括JavaTM字节代码指令的JavaTM类文件(12)。
15、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行系统,其特征为包括:
一个其中储存中间代码的存储器部分(301);
一个预处理部分(311),它对储存在上述存储器部分(301)内的中间代码进行预处理,即将上述中间代码所包括的一个特定指令模式替换为一个预先与上述特定指令模式关联的替代指令;
一个不能解释并执行该替代指令的第一解释器(309);
一个将上述替代指令解释为相当于上述指令模式替换前的内容并对其执行的的第二解释器(312);以及
一个中间代码分析部分(307),它分析由上述预处理部分处理后的上述中间代码,判断该替代指令是否包括在该中间代码之中,如果该替代指令被包括则标明该中间代码应当由该第一解释器(30)执行,而如果该替代指令未被包括则标明该中间代码应当由该第二解释器(312)执行。
16、一个对某种预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行系统,其特征为包括:
一个第一子系统(308),它具有一个能解释并执行编译时生成的所有指令的第一解释器(309);
一个第二子系统(310),它具有一个进行预处理,即将由该中间代码中所包括的多个指令构成的某个指令模式替换为一个替代指令的预处理部分(311),以及一个能将上述替代指令解释为相当于上述指令代码替换前的内容并执行上述替代指令的第二解释器(312);以及
一个选择部分(307),它根据需要执行的该中间代码或者选择由上述第一子系统(308)的上述第一解释器(309)执行该中间代码,或者选择由上述预处理部分(311)对该中间代码进行预处理,然后由上述第二子系统(310)的上述第二解释器(312)执行该中间代码。
17、根据权利要求16的中间代码执行系统,其特征为,上述第二子系统(310)将上述替代指令分配给一个在上述第一子系统(308)中已被分配了一个替代指令的操作代码,而且
上述选择部分(307)在上述特定指令被包括在需要执行的中间代码中时选择由上述第一子系统(308)进行处理,而在上述特定指令不被包括在需要执行的中间代码中时选择由上述第二子系统(310)进行处理。
18、根据权利要求16的中间代码执行系统,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是JavaTM类文件(302),而且上述指令是一个JavaTM字节代码指令。
19、一个对某个预定程序语言生成的源代码经编译后所得的中间代码加以执行的中间代码执行系统,其特征为包括:
一个第一子系统,它具有一个能进行预处理,即将由该中间代码中包括的多个指令构成的一个第一指令模式替换为一个第一替代指令的预处理部分,以及一个能将上述第一替代指令解释为相当于上述第一指令模式的内容并执行该第一替代指令的第一解释器;
一个第二子系统,它具有一个进行预处理,即将由该中间代码中所包括的一个第二指令模式替换为一个第二替代指令的预处理部分,以及一个能将上述第二替代指令解释为相当于上述第二指令模式并执行该第二替代指令的第二解释器;以及
一个选择部分,它根据需要执行的中间代码或者选择在该第一子系统中由上述第一预处理部分对该中间代码进行预处理并由该第一解释器对其执行,或者选择在该第二子系统中由上述第二预处理部分对该中间代码进行预处理,然后由该第二解释器对其执行。
20、根据权利要求19的中间代码执行系统,其特征为,上述第一子系统将上述第一替代指令分配给一个第一操作代码,上述第二子系统将上述第二替代指令分配给一个第二操作代码,而且
上述选择部分在需要执行的中间代码包括一个与上述第一操作代码有关的指令时选择由上述第二子系统进行处理,在需要执行的该中间代码包括一个与上述第二操作代码有关的指令时选择由上述第一子系统(308)进行处理。
21、根据权利要求19的中间代码执行系统,其特征为,上述预定程序语言是JavaTM语言,上述中间代码是JavaTM类文件,而且上述指令是JavaTM字节代码指令。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP334825/2001 | 2001-10-31 | ||
JP2001334823 | 2001-10-31 | ||
JP334823/2001 | 2001-10-31 | ||
JP2001334825 | 2001-10-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1419192A true CN1419192A (zh) | 2003-05-21 |
CN100382028C CN100382028C (zh) | 2008-04-16 |
Family
ID=26624250
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB021481946A Expired - Fee Related CN100382028C (zh) | 2001-10-31 | 2002-10-31 | 中间代码预处理、执行装置及执行系统及计算机程序产品 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7213237B2 (zh) |
EP (1) | EP1308838A3 (zh) |
CN (1) | CN100382028C (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678340A (zh) * | 2012-09-07 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 浏览器引擎的运行方法、装置、浏览器及终端 |
CN104346133A (zh) * | 2013-08-01 | 2015-02-11 | 晶心科技股份有限公司 | 压缩指令的方法及执行压缩指令的处理器 |
CN105988856A (zh) * | 2015-02-02 | 2016-10-05 | 龙芯中科技术有限公司 | 解释器访存优化方法及装置 |
CN107220265A (zh) * | 2016-03-22 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 一种数据库语句编译和执行方法及装置 |
CN109947624A (zh) * | 2019-03-25 | 2019-06-28 | 深圳市腾讯信息技术有限公司 | 状态监控方法及装置 |
CN113031952A (zh) * | 2019-12-25 | 2021-06-25 | 上海高德威智能交通系统有限公司 | 深度学习模型的执行代码的确定方法、装置及存储介质 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
UA55489C2 (uk) * | 1997-10-07 | 2003-04-15 | Каналь+ Сосьєте Анонім | Пристрій для багатопотокової обробки даних (варіанти) |
US6964039B2 (en) * | 2000-12-13 | 2005-11-08 | Esmertec Ag | Method to create optimized machine code through combined verification and translation of JAVA™ bytecode |
US6978451B2 (en) * | 2001-05-31 | 2005-12-20 | Esmertec Ag | Method for fast compilation of preverified JAVA bytecode to high quality native machine code |
GB2420638A (en) * | 2004-11-24 | 2006-05-31 | Hewlett Packard Development Co | Method of substituting code fragments in Internal Representation |
US8296742B2 (en) * | 2006-10-10 | 2012-10-23 | Microsoft Corporation | Automatic native generation |
US8055886B2 (en) * | 2007-07-12 | 2011-11-08 | Texas Instruments Incorporated | Processor micro-architecture for compute, save or restore multiple registers and responsive to first instruction for repeated issue of second instruction |
US8752056B2 (en) * | 2007-12-03 | 2014-06-10 | International Business Machines Corporation | Running native code across single or multi-core hybrid processor achitecture |
US20100153693A1 (en) * | 2008-12-17 | 2010-06-17 | Microsoft Corporation | Code execution with automated domain switching |
US8812868B2 (en) * | 2011-03-21 | 2014-08-19 | Mocana Corporation | Secure execution of unsecured apps on a device |
US8955142B2 (en) | 2011-03-21 | 2015-02-10 | Mocana Corporation | Secure execution of unsecured apps on a device |
US9396325B2 (en) | 2011-03-21 | 2016-07-19 | Mocana Corporation | Provisioning an app on a device and implementing a keystore |
US8769305B2 (en) | 2011-03-21 | 2014-07-01 | Moncana Corporation | Secure execution of unsecured apps on a device |
US9473485B2 (en) | 2011-03-21 | 2016-10-18 | Blue Cedar Networks, Inc. | Secure single sign-on for a group of wrapped applications on a computing device and runtime credential sharing |
JP2013003664A (ja) * | 2011-06-13 | 2013-01-07 | Sony Corp | 情報処理装置および方法 |
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
US11151018B2 (en) * | 2018-04-13 | 2021-10-19 | Baidu Usa Llc | Method and apparatus for testing a code file |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5507030A (en) * | 1991-03-07 | 1996-04-09 | Digitial Equipment Corporation | Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses |
JP2921190B2 (ja) * | 1991-07-25 | 1999-07-19 | 日本電気株式会社 | 並列実行方式 |
US5923878A (en) | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
US5889996A (en) | 1996-12-16 | 1999-03-30 | Novell Inc. | Accelerator for interpretive environments |
US5983310A (en) | 1997-02-13 | 1999-11-09 | Novell, Inc. | Pin management of accelerator for interpretive environments |
WO1999001815A1 (en) * | 1997-06-09 | 1999-01-14 | Intertrust, Incorporated | Obfuscation techniques for enhancing software security |
US6321323B1 (en) * | 1997-06-27 | 2001-11-20 | Sun Microsystems, Inc. | System and method for executing platform-independent code on a co-processor |
US6021273A (en) | 1997-06-30 | 2000-02-01 | Sun Microsystems, Inc. | Interpreter generation and implementation utilizing interpreter states and register caching |
GB2327784B (en) * | 1997-07-28 | 2002-04-03 | Microapl Ltd | A method of carrying out computer operations |
CN1223402A (zh) * | 1998-01-12 | 1999-07-21 | 日本电气株式会社 | 在优化中能减少中断处理的编译器及其优化方法 |
US6141732A (en) | 1998-03-24 | 2000-10-31 | Novell, Inc. | Burst-loading of instructions into processor cache by execution of linked jump instructions embedded in cache line size blocks |
US6356996B1 (en) | 1998-03-24 | 2002-03-12 | Novell, Inc. | Cache fencing for interpretive environments |
US6760907B2 (en) | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
US6256784B1 (en) | 1998-08-14 | 2001-07-03 | Ati International Srl | Interpreter with reduced memory access and improved jump-through-register handling |
US6854113B1 (en) | 1998-08-28 | 2005-02-08 | Borland Software Corporation | Mixed-mode execution for object-oriented programming languages |
US6332215B1 (en) | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US6332216B1 (en) * | 1999-03-09 | 2001-12-18 | Hewlett-Packard Company | Hybrid just-in-time compiler that consumes minimal resource |
CN1173262C (zh) * | 1999-09-21 | 2004-10-27 | 皇家菲利浦电子有限公司 | 虚拟机指令的优化字节码解释器 |
JP2001101010A (ja) | 1999-09-30 | 2001-04-13 | Hitachi Ltd | 仮想機械最適化方法 |
US6578020B1 (en) | 1999-12-07 | 2003-06-10 | International Business Machines Corporation | Method and system for converting code to executable code using neural networks implemented in a very large scale integration (VLSI) integrated circuit |
EP1316014A1 (en) | 2000-08-31 | 2003-06-04 | Koninklijke Philips Electronics N.V. | System for executing virtual machine instructions |
-
2002
- 2002-10-28 EP EP02257461A patent/EP1308838A3/en not_active Withdrawn
- 2002-10-29 US US10/283,806 patent/US7213237B2/en not_active Expired - Fee Related
- 2002-10-31 CN CNB021481946A patent/CN100382028C/zh not_active Expired - Fee Related
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678340A (zh) * | 2012-09-07 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 浏览器引擎的运行方法、装置、浏览器及终端 |
CN103678340B (zh) * | 2012-09-07 | 2016-09-14 | 腾讯科技(深圳)有限公司 | 浏览器引擎的运行方法、装置、浏览器及终端 |
US9565244B2 (en) | 2012-09-07 | 2017-02-07 | Tencent Technology (Shenzhen) Company Limited | Methods and apparatus for operating browser engine |
CN104346133A (zh) * | 2013-08-01 | 2015-02-11 | 晶心科技股份有限公司 | 压缩指令的方法及执行压缩指令的处理器 |
CN105988856A (zh) * | 2015-02-02 | 2016-10-05 | 龙芯中科技术有限公司 | 解释器访存优化方法及装置 |
CN105988856B (zh) * | 2015-02-02 | 2019-04-16 | 龙芯中科技术有限公司 | 解释器访存优化方法及装置 |
CN107220265A (zh) * | 2016-03-22 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 一种数据库语句编译和执行方法及装置 |
CN109947624A (zh) * | 2019-03-25 | 2019-06-28 | 深圳市腾讯信息技术有限公司 | 状态监控方法及装置 |
CN113031952A (zh) * | 2019-12-25 | 2021-06-25 | 上海高德威智能交通系统有限公司 | 深度学习模型的执行代码的确定方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP1308838A3 (en) | 2007-12-19 |
US20030084432A1 (en) | 2003-05-01 |
EP1308838A2 (en) | 2003-05-07 |
CN100382028C (zh) | 2008-04-16 |
US7213237B2 (en) | 2007-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1419192A (zh) | 中间代码预处理、执行装置及执行系统及计算机程序产品 | |
CN1308826C (zh) | 用于smt处理器上的cpi调度的系统和方法 | |
CN1178134C (zh) | 执行于板上系统内的中间对象代码程序的数据压缩方法 | |
CN1152287C (zh) | 二进制程序转换设备和转换方法 | |
CN1134730C (zh) | 用于减少预装类的脚印的系统和方法 | |
CN1186722C (zh) | 用于使用寄存器分配器建立调用约定序言和收尾程序代码的方法和装置 | |
CN1922574A (zh) | 无需额外的代码分析来进行链接时代码优化的方法和系统 | |
CN1154928C (zh) | 用于多任务设施信息处理系统的资源管理方法和设备 | |
Falk et al. | Optimal static WCET-aware scratchpad allocation of program code | |
CN1294486C (zh) | 多重处理环境中透明动态优化的方法和系统 | |
CN1834922A (zh) | 程序变换方法及程序变换系统 | |
CN1265290C (zh) | 优化链接后代码的方法 | |
CN100343809C (zh) | 中间代码执行系统和中间代码执行方法 | |
CN1908903A (zh) | 执行作业步的系统和方法以及计算机产品 | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
CN1313927C (zh) | 智能卡运行环境的控制方法 | |
CN1248742A (zh) | 用于多-线程虚拟机的存储器分配的方法和装置 | |
CN101042649A (zh) | 一种配置信息处理方法及装置以及平台系统 | |
CN101079083A (zh) | 一种对访存操作进行权限检查的系统、装置及方法 | |
CN1904853A (zh) | 一种嵌入式软件装载调试方法及其系统 | |
CN1508681A (zh) | 用于在赋值语句中查找归约变量的方法和系统 | |
CN1614563A (zh) | 模板编译方法 | |
CN1902586A (zh) | 用于减少硬件资源冲突的数据布局机制 | |
CN1975693A (zh) | 具有自驱动功能的指令仿真解析系统及其实现方法 | |
CN1542616A (zh) | 编译装置、编译方法、通信终端设备、编译程序以及程序产品 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080416 Termination date: 20131031 |