CN1504881A - 爪哇执行设备和爪哇执行方法 - Google Patents
爪哇执行设备和爪哇执行方法 Download PDFInfo
- Publication number
- CN1504881A CN1504881A CNA031484581A CN03148458A CN1504881A CN 1504881 A CN1504881 A CN 1504881A CN A031484581 A CNA031484581 A CN A031484581A CN 03148458 A CN03148458 A CN 03148458A CN 1504881 A CN1504881 A CN 1504881A
- Authority
- CN
- China
- Prior art keywords
- java
- class
- file
- information
- class file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
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
-
- 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/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种Java执行设备、Java类文件的配置、Java执行方法、Java文件的预编译方法以及Java虚拟机(JVM)中的执行方法。Java执行设备包含扩展类库和Java虚拟机(JVM),扩展类库包含预编译标准类库中包含的类文件所获得的机器码类文件,Java虚拟机(JVM)执行机器码类文件或扩展类库中包含的应用程序文件。因此,在确保Java平台的平台独立性和动态可扩展性的同时,提高Java平台的性能是可能的。
Description
本申请要求第2002-76041号韩国专利申请的优先权,该申请于2002年12月2日提交到韩国知识产权局,它的公开通过引用全部包含在本申请中。
技术领域
本发明涉及Java平台,更具体地说,涉及Java(爪哇)执行设备、Java类文件的配置、Java执行方法、Java文件的预编译方法以及Java虚拟机(JVM)中的执行方法。
背景技术
由于对各种电子设备和产品(例如微波炉或遥控器)中包含的软件所用的独立于平台的语言的需求,Sun Microsystems公司引入了Java语言。
为了创建独立于平台的执行文件,Java将源代码编译成Java字节码,Java字节码在Java虚拟机(JVM)上执行。如图1所示,编译器120将java格式的Java程序110编译成类格式的Java执行文件。这个类格式的Java执行文件由驻留在JVM内的解释器130解释并执行。JVM执行3个步骤,即:装载类,在此步骤中装载执行程序所需的所有类;验证,在此步骤中测试类文件格式、访问授权、数据格式转换;以及执行程序。
图2示出执行Java程序240的Java平台的层次结构。该层次结构包含用Java语言编写的Java程序240、包含Java虚拟机(JVM)220和Java应用程序接口(API)230的Java平台以及硬件相关的平台210。由于Java执行文件是包含平台中性(platform-neutral)的执行代码(即Java字节码)的类文件,仅当提供Java运行环境(JRE)时才能执行Java执行文件,而与开发Java执行文件所用的系统无关。
由于Java具有很多优点,例如确保“一次编写任何平台执行”(WORA)特性的平台中性、动态可扩展性等等,这使Java得到了广泛应用。Java被广泛用作web服务的服务器技术,并且在大多数情况下,web应用服务器是基于Java的。此外,在嵌入设备中,提供用户服务或执行控制应用程序的运行环境中也采用Java。特别是,用于移动电话的MexE、用于数字电视的MHP、DASE、OCAP等等是标准的规范,这些规范将嵌入设备的应用环境定义为基于Java的运行环境。因此,很明显,Java将会更广泛地用于嵌入设备市场中。
尽管Java被广泛应用于各种用途,与本机应用程序相比,Java应用程序却不能表现出令人满意的性能。
近来,已经开发了很多用来解决有关Java性能问题的方法,并且由此带来了一些好处。这些方法通过把方法中所用的Java字节码编译成机器码,来提高传统JVM中所用的解释方法的效率。这些方法可分为以下三种类型:
第一种类型是及时(JIT)编译方法。在JIT编译中,在JVM执行Java应用程序期间,把在方法调用点调用的方法编译成机器码,并且直接执行机器码而不是Java字节码。
尽管JIT编译执行Java比解释方法快,但是除了Java应用程序所用的存储器之外,还需要若干兆字节的随机存取存储器(RAM),这是因为JIT编译需要相当数量的存储器,而且通过对方法进行编译所获得的机器码要保存在存储器中以便其他时间再次使用这些机器码。此外,由于JIT编译方法编译在Java应用程序执行期间调用的所有方法,在Java应用程序执行期间由JIT编译引起的开销增大。orp是一种正处于研究阶段的使用JIT编译的JVM类型,它由Intel公司开发。
第二种类型是动态自适应编译方法。动态自适应编译采用JIT编译方法和解释方法两者。在动态自适应编译中,只编译对Java平台的性能产生较大影响的hot方法,而其他方法则使用解释方法编译。为了确定哪些方法是hot方法,如果调用的方法数目比预定义的数目大,则在Java应用程序执行期间利用多种方法(例如确定hot方法的方法)来进行特征分析。图3是使用动态自适应编译的Java平台300的通用配置。Java平台300包含类库320和Java虚拟机(JVM)330。JVM 330包含JIT编译器340、执行不进行JIT编译的方法的解释器350、从类文件中装载所需类的类装载器360,以及维护在Java应用程序执行期间所需的数据结构(例如方法区、Java堆栈等等)并且结合和管理全部组件的运行系统(runtime system)370。
图4是在使用动态自适应编译的JVM中执行一种方法的典型流程图。在步骤S410中调用方法之后,在步骤S420中确定该方法是否已经进行过JIT编译并且拥有机器码。如果该方法已经由JIT编译方法编译,则在步骤S460中执行机器码,并且过程返回到步骤S410。如果方法未经JIT编译,则在步骤S430中提出并更新被调用方法的特征信息(profile information)。然后,在步骤S440中基于特征信息确定被调用方法是否是hot(热门)方法。如果被调用方法是hot方法,则在步骤S450中将关于该方法的信息传送给JIT编译器,并且对该方法的Java字节码进行JIT编译。通过JIT编译所获得的目标机器码作为JIT编译的结果执行。如果被调用方法不是hot方法,则在步骤S470中将被调用该方法的信息传送给解释器,并且执行被调用方法。被调用方法执行完成后,过程返回到调用方法之前的时间点。图4中的流程图也应用于方法执行期间调用的其他方法。
由于使用动态自适应编译的JVM仅编译全部被执行方法的一部分,由编译全部被执行方法造成的等待时间比JIT编译少。由于要维护的机器码的数量少,存储器负荷变得相对较少。然而,由于hot方法以外的其他方法是先解释后执行的,该方法既需要解释器也需要JIT编译器,并且为确定hot方法所进行的特征分析会引起Java应用程序执行期间的超载。JIT编译方法和动态自适应编译方法各有各的利弊。然而,大多数情况下,在存储器容量有限的嵌入设备中,动态自适应编译方法使用得更为频繁。Sun Microsystems公司的CVM或Insignia Systems公司的Jeode等等是一种类型的动态自适应编译方法。
第三种类型是提前(AOT)编译方法。JVM中包含的JIT编译器在Java应用程序执行期间运行。而提前(AOT)编译器与JVM分离,独立于JVM使用。AOT编译器用在应用程序开发环境中。通常,通过编译Java类文件来创建可在目标设备中执行的执行文件。图5示出使用AOT编译器的通用流程。
由AOT编译器520将Java源文件或类文件格式的应用程序文件510编译成对象文件540,以便应用程序文件510能被用于执行Java应用程序的目标设备。这里,执行Java应用程序所需的库类530也随应用程序文件510被同时编译。可在目标设备中独立执行的执行文件570由连接器550通过将对象文件540与运行系统模块560链接而创建。运行系统模块560用于提供除字节码执行引擎外的各种JVM功能,提供诸如碎片(garbage)回收、类型反射等功能。
第三种类型明显不同于第一种和第二种类型。AOT编译方法采用与处理用C/C++编写的程序相同的方法来处理用Java编写的程序,从而创建依赖于目标环境的执行文件。第一种和第二种类型以标准的Java执行文件格式(即类文件)发布Java应用程序,并且当Java应用程序在目标设备中对JVM执行编译时。然而,AOT编译方法在开发平台中执行编译,并在将Java类文件编译成可在目标环境中执行的执行文件之后,发布Java应用程序。
由于这三种类型的方法中存在这些不同,如果采用AOT编译方法,则Java平台的两个重要的优点就会变得毫无价值。
采用AOT编译方法时,变得毫无价值的最重要的优点是Java的平台独立性。由于Java以用于JVM的执行代码格式(即包含Java字节码的类文件)发布,Java可以由JVM在使用JVM的任何目标硬件平台中执行。然而,如果将Java编译成只能在使用AOT编译的特定硬件中执行的机器码,就不可能在其他机器中执行Java应用程序。
此外,AOT编译失去了动态可扩展性这一特性。动态可扩展性允许Java在Java应用程序执行期间识别和使用新的执行代码类型,与C/C++相比,这是一项Java独有的特殊功能。通用AOT编译方法通过同时编译应用程序类和应用程序所用的库类来创建对象文件,在Java应用程序执行期间不能装载和执行对象文件以外的新类,而只能装载和执行对象文件中包含的应用程序类和库类。
尽管如上所述,AOT编译方法失去了Java的重要优点,由于编译是在应用程序发布之前在开发环境中执行的,采用最优化技术创建具有快速性能能力的执行文件是可能的。因此,在已规定目标Java运行环境,并且Java应用程序的执行速度是非常重要的因素时,可采用AOT编译方法。 GUN公司的Gcj符合AOT编译器。
由于这三种类型具有彼此不同的优点、缺点和特性,每种方法都有其最适用的目标Java运行环境和目标机器的目的,当目标机器中安装了Java平台时就已选择方法。然而,Java还有许多与性能相关的问题。特别是由于存储器的限制,很难在嵌入设备中使用JIT编译。因此,Java的适用性受到限制。
发明内容
本发明提供一种Java执行设备、Java类文件的配置、Java执行方法、Java文件的预编译方法以及Java虚拟机(JVM)中的执行方法,这些能够在确保Java平台的平台独立性和动态可扩展性的同时提高Java平台的性能。
在大多数情况下,运行Java应用程序所执行的代码与Java平台中包含的类库代码一致,而不与应用程序开发器提供的应用程序代码一致,并且需要比应用程序代码更多的执行时间。此外,Java应用程序类应以java类文件格式发布,以便能在任何机器上执行。然而,由于类库代码被预先安装在装有JVM的特定机器上,类库代码是否依赖于硬件就无关紧要。
因此,如果能够只对类库代码预先执行提前(AOT)编译,并且当Java应用程序在JVM中执行时使用编译过的类库,就能大大提高Java平台的性能。此外,由于以Java类文件格式发布的Java应用程序可在JVM中使用解释方法来执行,获得Java的平台独立性是可能的。
为了获得平台独立性,本发明提供机器码类(m类)文件,该文件具有与Java类文件相同的特性和内容。m类文件与传统类文件的不同之处在于它包含用于特定目标机器的机器码而不是硬件中性的Java字节码。此外,本发明提供提前(AOT)编译器,该编译器可通过只编译输入类文件而不是全部类文件来创建m类文件。因此,由AOT编译器把类库编译成适合于目标机器的机器码是有可能的。
根据本发明的一个方面,提供了一种Java执行设备,包括扩展类库和Java虚拟机(JVM),扩展类库包含预编译标准类库中包含的类文件所获得的机器码类文件,Java虚拟机(JVM)执行机器码类文件或扩展类库中包含的应用程序文件。
根据本发明的另一方面,提供了一种Java类文件的配置,其中Java类文件包括常数、域和方法,该方法的方法信息包括由机器指令构成的代码属性,其中机器指令包含插入了符号引用信息的操作数。
根据本发明的又一方面,提供了一种Java文件的预编译方法,该方法包括将Java类文件或Java源文件转换成机器指令,其中机器指令包含插入了符号引用信息的操作数。
根据本发明的又一方面,提供了一种Java虚拟机(JVM)中的执行方法,该执行方法包括确定待执行方法的方法信息是否包含由机器指令构成的代码属性,其中机器指令包含插入了符号引用信息的操作数;如果待执行方法的方法信息包含由机器指令构成的代码属性,则将符号引用信息与地址连接,并执行机器指令。
附图说明
下面,通过结合附图对示例性的实施例进行详细地描述,本发明的上述和其他目的和特点将会变得更加清楚,其中:
图1是说明执行Java程序的通用过程的概念图;
图2是通用Java程序的层次结构的概念图;
图3是根据传统技术的第一个Java平台示例的说明图;
图4是示出图3中的第一个Java平台示例的操作过程的流程图;
图5是根据传统技术的第二个Java平台示例的说明图;
图6A是根据本发明编译应用程序源文件的过程的概念图;
图6B是根据本发明编译库源或类文件的过程的概念图;
图6C是根据本发明机器码类(m类)文件的机器指令操作数中的符号引用的说明图;
图7是根据本发明的Java平台的配置示例的说明图;
图8是示出在图7所示的Java平台中执行方法的过程的流程图;
图9是示出根据本发明将输入类文件编译成m类文件的过程的流程图;
图10是根据本发明的m类文件的配置的说明图;
图11是图10中的m代码属性(mcode_attribute)的配置的说明图;
图12A是根据本发明具有m类文件的机器指令操作数中的符号引用的公共格式的说明图;
图12B是具有对依据图12A所示的符号引用的公共格式的常数池(pool)符号的符号引用的格式的说明图;
图12C是具有对依据图12A所示的符号引用的公共格式的JVM内部符号的符号引用的格式的说明图;
图12D是依据图12A所示的符号引用的公共格式的表示数据块中位置的符号引用格式的说明图;
图13示出图12B所示的常数池符号的类型;
图14示出图12C所示的JVM内部符号的指示符;以及
图15示出用于比较传统的orp平台和本发明的m-orp平台的测试结果。
具体实施方式
以下,结合附图更全面地说明本发明的实施例,附图示出了发明的优选
实施例。
图6A是根据本发明编译应用程序源文件610的过程的概念图,图6B是根据本发明编译库源或类文件640的过程的概念图。
如图6A所示,由Java编译器620将Java应用程序源文件(.java)610编译成应用程序类文件(.class)630。
如图6B所示,由提前(AOT)编译器650将库源或类文件(.java或.class)640编译成机器码类(m类)文件660。
如图6C所示,m类文件660包含机器指令670。机器指令670由操作(op)码671和操作数672组成。如果操作数672是符号地址,则由对符号表680的符号引用来代替符号地址,在符号表680中对索引和其他信息编码。
图7是根据本发明的Java平台700的说明图。
Java平台700包含m类库720和Java虚拟机(JVM)730。JVM 730包含m类链接器740、解释器750、扩展类装载器760和运行系统770。
这里,m类库720仅由AOT编译器650编译的m类文件组成。然而,m类库720既可以包含标准类文件又可以包含m类文件。
m类链接器740解释有关包含在m类库720中的m类文件的方法的m代码属性(mcode_attribute)的信息,并将解释过的信息转换成可执行的机器码。解释和转换主要包括将由AOT编译器650插入到机器码中的符号引用转换成符号地址。此外,m类链接器740从m代码属性信息中解码出用于处理异常或执行碎片回收的信息,并将这些信息转换成JVM 730可用的数据。扩展类装载器760是扩展的,以便既能够处理标准类文件也能够处理m类文件。解释器750与传统JVM的解释器的类型相同,可处理没有被预编译成m类文件的类文件。及时(JIT)编译器可被用作解释器750。运行系统770与传统JVM的运行系统的类型相同,可处理m类文件。
应用程序类710由JVM 730的扩展类装载器760装载,有关应用程序类710的信息存储在运行系统770的数据结构中。作为Java应用程序的第一个方法的主要(main)方法,被传送到m类链接器740或解释器750中,并被执行。
图7示出这种一种情况,即预先安装在目标机器中的库(m类库720)由m类文件组成,而且Java应用程序是标准Java类文件。然而,库既可以包括标准类文件又可以包括m类文件。而且,如果用户已知要执行的目标处理器,Java应用程序也可在转换成m类文件之后发布。图7中,由于Java应用程序以类文件格式发布,main方法被传送到解释器750,并在解释器750中执行。然而,如果Java应用程序以m类文件格式发布,则main方法被传送到m类链接器740,并在m类链接器740中执行。
下文将说明生成m类库720中包含的m类文件的流程以及m类文件的配置。
图9是示出将类文件编译成m类文件的过程的流程图。
根据本发明,AOT编译器独立编译输入到自身的类文件的每个方法。
首先,收集用于给局部变量分配寄存器和执行碎片回收的信息,在扫描方法的全部Java字节码的同时对这些信息进行预处理(步骤S910)。
其次,基于步骤S910所获得的信息将寄存器分配给局部变量(步骤S920)。
在代码产生步骤(步骤S930)中,产生来自目标机器的与各Java字节码对应的指令序列。这里,在指令序列的操作数中插入符号引用信息,而不是符号地址。
在代码发放步骤(步骤S940)中,将在步骤S930中产生的指令序列存储在相邻的存储器空间中。
在代码产生步骤(步骤S930)中,能产生包含修补(patch)(例如向前引用)需求的指令。然而,在代码和数据修补步骤(步骤S950)中,修补这样的指令和数据块的内容。在步骤S950中,以与步骤S930相同的方式,在指令序列的操作数中插入符号引用信息,而不是符号地址。当AOT编译器已完成AOT编译之后,创建由机器指令构成的m类文件。
下面将结合图10说明m类文件1000的配置。
根据本发明,m类文件1000用来存储AOT编译的结果。
m类文件格式1000是JVM规范中规定的标准Java类文件的扩展格式。m类文件1000包含常数1010、域1020和方法1030。方法1030的方法信息(method_info)1040包含m代码属性(mcode_attribute)1050。m代码属性1050是具有名字“com.samsung.mcode”的用户定义属性,包含AOT编译的结果。该用户定义属性与标准类文件规范的“代码(Code)”属性一致,包含机器码信息和其他执行信息,而不是Java字节码信息。m类文件1000的特征在于用这个用户定义的属性代替“代码”属性,或者说除“代码”属性之外,在m类文件1000中还包含这个用户定义属性。用统一资源定位器(URL)格式表示的名字“com.samsung.mcode”遵守类文件规范中规定的用户定义属性的命名规则。如果m类文件1000既包含具有名字“com.samsung.mcode”的用户定义属性又包含“代码”属性,那么它完全遵守标准类文件规范。也就是说,尽管JVM不能识别和使用m类文件1000的特殊信息,但它能够通过以标准类文件格式装载m类文件1000来执行m类文件1000。
m代码属性1050与标准类文件的代码属性一致,包含目标处理器指令(而不是Java字节码)以及其他执行Java应用程序的信息。
图11示出m代码属性1050的示例,m代码属性1050的配置遵守类文件规范中规定的属性格式。
根据类文件规范的属性格式,m代码属性1050包含与执行代码一致的区段和存储数据信息的区段。
属性名索引1051表示属性名,属性长度1052表示全部属性的长度,m代码(mcode)1053表示m代码1054的长度。
根据本发明,包含由AOT编译器编译的Java字节码的目标处理器指令存储在m代码1054中,指令的格式被部分改变以便将符号引用(而不是符号地址)用于指令的操作数中。在目标处理器中实际执行m代码1054之前,需要使用符号解析等技术来对它进行处理。
数据块长度1055表示数据块1056的长度,数据块1056存储浮点型十进制数值或转移表。
符号引用列表1057包含有关代码中包含的符号位置和数据的信息。
异常处理信息1058包含用于处理异常的信息,碎片回收(GC)信息1059包含用于碎片回收的信息。
根据本发明,AOT编译器在产生执行方法所需的机器码以及机器码在执行方法期间所引用的数据块1056方面起着重要作用。然而,没有对Java字节码的需求,AOT编译器不可能完整地执行自身功能,因此,要收集附加信息并将其存储在m类文件中。
用于处理异常的信息必须作为附加信息存储在m类文件中,因为当异常发生时,JVM必须通过在执行堆栈展开的同时搜索异常处理器的准确位置来改变执行过程。异常处理信息1058存储这种用于处理异常的信息。
其次,需要堆栈中的用于处理碎片回收的类型信息。Java字节码包含操作数的类型信息,当Java字节码转换成机器码之后,操作数的类型信息就会丢失。然而,生成GC时,需要操作数的类型信息,这种类型信息存储在GC信息1059中。
图10所示的m类文件1000的配置和图11所示的m代码属性1050的配置仅仅是AOT编译结果的存储格式的示例,本领域技术人员能够充分理解到本发明不被限制在这种存储格式上。
为赋予m类文件1000以与Java类文件相同的特性,应允许在m类文件1000中以与Java类文件相同的方式来动态链接所有符号。由于Java类文件使用符号引用来指示Java字节码的对象的域和方法,Java类文件就有可能动态链接所有符号。因此,尽管Java类文件被AOT编译成目标机器码,如果使用符号引用来指示目标机器码的指令操作数中的对象的域或方法,就有可能实现Java的动态装载/链接。
m类文件1000中包含的目标机器码使用符号引用而不是符号地址来指示特殊的域或方法,而且可改变目标机器码的指令格式,以便能把符号引用信息插入到目标机器码的指令中。可使用JVM的符号地址来插入包含符号引用信息的指令,并且将其转换成执行代码。为了使JVM能够识别和使用m类文件1000,要将各符号引用转换成地址,并且在Java应用程序执行期间执行其他过程。然而,由于符号引用的转换和其他过程比JIT编译简单,就有可能获得比使用JIT编译更优的机器码,因此,Java平台能够表现出改进的性能。
根据本发明的AOT编译器,将所有的符号引用1210编码成如图12A所示的32位格式,即符号引用1210的公共格式,并且将已编码的符号引用1210包含进指令1200的操作数中。
如果具有x86格式的指令1200的操作数与符号地址对应,则操作数占用32字节,因此,编码成32位格式的符号引用1210可被包含进指令1200的操作数中。如果将AOT编译器用于其他处理器,可根据处理器的特殊指令改变符号引用1210的公共格式。
在符号引用1210的公共格式中,第一个2位段1211用作表示符号引用1210的各种类型的标志。接下来的14位段1212用作连接所有符号引用1210的链路,其范围从当前符号引用的最后一个字节之后的第一个字节到当前符号引用之后的符号引用的第一个字节。剩下的16位段1213包含寻找当前符号引用所指示的符号所用的值。
代码中所用的符号可被分成3种类型,即图12B所示的常数池中包含的符号(常数池符号),图12C所示的JVM内部区域中包含的符号(JVM内部符号),以及图12D所示的数据块中的特定位置的信息。
常数池是包含在类文件中的符号表,含有用于Java字节码的所有符号的信息。Java字节码使用常数池项索引作为指示对象的域或方法的操作数。如果操作数是常数池中的类、域或方法,AOT编译器也使用含有常数池项索引1223的符号引用,而不是类、域或方法的地址。
符号类型可利用常数池项来确定。用在AOT编译器中的符号类型是类、域和方法。每种符号类型都能以两种方式使用,因此可以使用如图13所示的6种符号引用。
图12C示出所有对JVM内部符号的符号引用,基于JVM内部符号的类型对16位常数池索引1223进行编码。图14示出JVM内部符号指示符1233的配置。第一个2位段1410是指示JVM内部符号类型的标志,最后的8位1420含有JVM内部符号的索引。
由AOT编译器产生的代码中所用的各种JVM内部符号可以分为4种类型。第一种类型是Java应用程序执行期间的支持函数,在此把创建用于支持函数的表所获得的索引预先存储在图14所示的符号索引1420中。第二种类型是预装载的类,如“java.1ang.class”,或预装载在JVM内部区域中的本机类,但是这种预装载类不包含在已编译的类文件的常数池中。这种预装载类使用创建用于预装载类的表所获得的索引来指示。第三种类型是JVM中包含的局部变量。第四种类型用来存储其他符号或指示m类连接器的线索。
在由指令指出数据块的特定位置的情况下,通用指令将特定位置的地址当作操作数。然而,AOT编译器把符号引用而不是地址当作操作数。图12D示出这种符号引用。图12D中的最后16位1243用来存储数据块从头到尾的长度。
图8是示出在根据本发明的Java平台中执行方法的过程的流程图800。
如果在步骤S810中调用了方法,就要确定该方法是否已被m类链接器链接,或者是第一次被链接和执行(步骤S820)。
如果以前已执行过该方法,则在步骤S860中执行以前生成的机器码。
如果是第一次执行该方法,在步骤S830中提取关于方法的信息,并在步骤S840中确定该方法是否有m代码属性。如果该方法有m代码属性,则在步骤S850中由m类链接器执行符号解析,链接m代码,并在步骤S860中执行机器码。如果该方法没有m代码属性,则在步骤S870中由解释器解释方法。
下面,结合图15说明根据本发明的仿真结果。
图15示出比较一般orp平台和根据本发明的m-orp平台的运行速度的对比结果。对orp平台和m-orp平台的测试在安装Windows XP专业版作为操作系统的Pentium IV计算机上进行。图15的表中所示的数值是通过将HelloWorld应用程序重复10次所得值平均而得。图15中,FLT表示文件装载时间,TT表示总时间,JT表示JIT编译时间,MLT表示m链接时间。
从对比结果中可以看出,FLT占去超过60%的总执行时间。这一结果是由于个人计算机(PC)(即Pentium IV计算机)的运行速度的提高使得JT减少所致,而用于文件装载的输入/输出盘需要的时间相对较长。然而,由于嵌入设备通常不使用盘,输入/输出盘所用的时间比率比图15所示的数值低得多。换句话说,图15的对比结果中,输入/输出盘所用的时间比率相当大,以至于JT和MLT之间的差异不能对Java平台的性能产生重大影响。然而,在嵌入设备中,JT和MLT之间的差异却能明显影响Java平台的性能。
在这项对比中,JT是MLT的4倍,由于JT和MLT之间的差异使Java平台的性能提高了20%。考虑到这项对比是在PC上进行的,在嵌入设备中,由于排除了用于文件装载的输入/输出盘所用的时间,Java平台的性能可提高80%。
根据本发明,在Java虚拟机(JVM)中以高于先前技术中使用JIT编译执行方法的速度来执行Java程序是可能的。由于JIT编译是在执行Java应用程序时执行的,JIT编译受可用的资源或时间所限制。因此,在执行JIT编译时,不能够充分执行运行优化。由于这个原因,JIT编译器产生的代码通常不是高质量的。然而,由于根据本发明的AOT编译在库类文件或应用程序类文件发布之前执行,充分执行运行优化和创建JIT编译不可相比的高质量机器码是可能的。在执行Java应用程序时由JVM对AOT编译产生的机器码进行后处理,以使其可用。然而,由于后处理比JIT编译简单,在Java应用程序执行期间产生的开销很少。因此,当在目标机器中执行Java应用程序时,根据本发明的Java平台有可能显示出快捷的运行速度。
此外,根据本发明,AOT编译对随机存取存储器(RAM)的需求也比JIT编译少得多,这说明由于RAM有限而不能使用JIT编译的嵌入设备可以采用本发明。特别是,尽管在嵌入设备中安装了Java平台,由于嵌入设备资源有限,例如存储器有限,不能使用JIT编译,而使用解释方法。众所周知,解释方法以比JIT编译低得多的速度执行Java应用程序。根据本发明的Java平台表现出与JIT编译相比有所改进的性能。如果由于资源有限而不能使用JIT编译的嵌入设备,采用根据本发明的Java平台,那么Java平台能够表现出改进的性能。
尽管结合示例性的实施例详细地显示和说明了本发明,但本领域的普通技术人员可以理解,在不脱离权利要求限定的本发明的精神和范围的情况下,可以对其做出各种形式和细节的改变。
Claims (13)
1、一种Java执行设备,包括:
扩展类库,包含预编译标准类库中包含的类文件所获得的机器码类文件;以及
Java虚拟机(JVM),执行机器码类文件或扩展类库中包含的应用程序文件。
2、根据权利要求1的Java执行设备,其中机器码的机器指令包含插入了符号引用信息的操作数。
3、根据权利要求2的Java执行设备,其中Java虚拟机(JVM)包含类链接器,所述类连接器将插入到机器指令操作数中的符号引用信息转换成地址。
4、一种Java类文件的配置,其中Java类文件包括常数、域和方法,方法的方法信息包括由机器指令构成的代码属性,所述机器指令包含插入了符号引用信息的操作数。
5、根据权利要求4的Java类文件的配置,其中该方法信息进一步包括异常处理信息或用于碎片回收的信息。
6、根据权利要求4的Java类文件的配置,其中符号引用信息至少包括常数池符号信息、Java虚拟机(JVM)内部符号信息或数据块位置信息之一。
7、一种执行Java应用程序的方法,所述方法包括:
(a)将标准类库中包含的类文件预编译成包含机器指令的扩展类库;
(b)扩展的类文件执行机器指令;以及
(c)使用及时(JIT)编译方法或解释方法来执行Java应用程序文件。
8、根据权利要求7的方法,其中步骤(a)进一步包括将符号引用信息插入到机器指令的操作数中。
9、根据权利要求8的方法,其中步骤(b)进一步包括将插入到机器指令操作数中的符号引用信息转换成地址。
10、一种Java文件的预编译方法,所述方法包括将Java类文件或Java源文件转换成机器指令,所述机器指令包含插入了符号引用信息的操作数。
11、根据权利要求10的方法,其中Java类文件包括标准Java类库中包含的标准类文件。
12、一种Java虚拟机(JVM)中的执行方法,所述执行方法包括:
确定待执行方法的方法信息是否包含由机器指令构成的代码属性,所述机器指令包含插入了符号引用信息的操作数;以及
如果待执行方法的方法信息包含由机器指令构成的代码属性,则将符号引用信息链接到地址,并执行机器指令。
13、根据权利要求12的方法,其中,如果待执行方法的方法信息不包含由机器指令构成的代码属性,所述执行方法进一步包括对方法进行及时(JIT)编译或解释。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2002-0076041A KR100503077B1 (ko) | 2002-12-02 | 2002-12-02 | 자바 실행 장치 및 자바 실행 방법 |
KR76041/2002 | 2002-12-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1504881A true CN1504881A (zh) | 2004-06-16 |
Family
ID=34101658
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA031484581A Pending CN1504881A (zh) | 2002-12-02 | 2003-06-30 | 爪哇执行设备和爪哇执行方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20050028155A1 (zh) |
KR (1) | KR100503077B1 (zh) |
CN (1) | CN1504881A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567067A (zh) * | 2006-03-30 | 2012-07-11 | 太阳微系统有限公司 | 减少动态输出中可察觉暂停的设备及方法 |
CN105893103A (zh) * | 2014-11-26 | 2016-08-24 | 深圳他拍档电子商务有限公司 | 编译方法及其编译器 |
CN107343382A (zh) * | 2014-09-02 | 2017-11-10 | Mbl有限公司 | 在具有电子微操纵库的仪器化环境中执行特定领域应用的机器人操纵方法和系统 |
CN108446119A (zh) * | 2017-12-28 | 2018-08-24 | 北京奇虎科技有限公司 | 内联控制方法及装置 |
CN108717374A (zh) * | 2018-04-24 | 2018-10-30 | 阿里巴巴集团控股有限公司 | Java虚拟机启动时预热的方法、装置、及计算机设备 |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7574705B2 (en) * | 2004-06-29 | 2009-08-11 | Sun Microsystems, Inc. | Method and apparatus for efficiently resolving symbolic references in a virtual machine |
US8201191B2 (en) | 2004-06-30 | 2012-06-12 | Time Warner Cable Inc. | Apparatus and methods for implementation of network software interfaces |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
KR100664922B1 (ko) * | 2004-08-21 | 2007-01-04 | 삼성전자주식회사 | 자바 보안 기능 개선 방법 |
KR100749664B1 (ko) * | 2005-01-03 | 2007-08-14 | 에스케이 텔레콤주식회사 | 클래스 파일 롬 이미지화 방법 및 그 롬 이미지화된클래스 파일 실행 방법 |
US7634768B2 (en) * | 2005-02-17 | 2009-12-15 | Intel Corporation | Methods and apparatus to support mixed-mode execution within a single instruction set architecture process of a virtual machine |
KR100649946B1 (ko) * | 2005-05-30 | 2006-12-26 | 한국문화콘텐츠진흥원 | Ocap 기반의 라이브러리 구축방법 및 그 기록매체 |
KR100727627B1 (ko) * | 2005-11-11 | 2007-06-13 | 벨록스소프트(주) | 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템 |
KR100763199B1 (ko) * | 2006-02-20 | 2007-10-04 | 삼성전자주식회사 | 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템 |
KR100803290B1 (ko) * | 2006-03-23 | 2008-02-13 | 한국과학기술원 | 무선 센서 네트워크 환경에서 프로그램을 변경하기 위한확장 가능한 가상 머신 및 이를 이용한 리프로그래밍 방법 |
US7886286B2 (en) * | 2006-05-05 | 2011-02-08 | International Business Machines Corporation | Integration of non-componentized libraries in component-based systems |
KR100828364B1 (ko) * | 2006-06-28 | 2008-05-08 | 삼성전자주식회사 | 가상 프로파일을 이용한 자바 jit 컴파일 방법 및시스템 |
KR100815586B1 (ko) * | 2006-12-26 | 2008-03-20 | 삼성전자주식회사 | 디지털 방송장치 및 그의 온오프 제어방법 |
US9798524B1 (en) * | 2007-12-04 | 2017-10-24 | Axway, Inc. | System and method for exposing the dynamic web server-side |
KR101088517B1 (ko) | 2010-01-08 | 2011-11-30 | 한국과학기술연구원 | 디지털 티브이 소프트웨어 플랫폼을 위한 하이브리드 자바 컴파일 시스템 |
US8924922B2 (en) | 2010-06-14 | 2014-12-30 | Microsoft Corporation | Pre-compiling hosted managed code |
KR101249739B1 (ko) | 2010-07-13 | 2013-04-03 | 주식회사 인프라웨어테크놀러지 | 달빅 가상머신이 탑재된 단말기에서 자바 클래스 로딩 방법, 그리고 이를 수행하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 |
US9558096B2 (en) * | 2014-03-21 | 2017-01-31 | Marvell World Trade Ltd. | Method and apparatus for supporting performance analysis |
US20160224325A1 (en) * | 2015-01-29 | 2016-08-04 | Mentor Graphics Corporation | Hiding compilation latency |
US9811324B2 (en) * | 2015-05-29 | 2017-11-07 | Google Inc. | Code caching system |
CN105528233B (zh) * | 2015-07-10 | 2018-09-18 | 北京中电华大电子设计有限责任公司 | 一种Java Card中用于CAP文件比较的方法及装置 |
CN110275710B (zh) * | 2019-06-10 | 2023-07-14 | 天翼电子商务有限公司 | 一种Java本地接口一致性检查方法及系统、存储介质及终端 |
CN110309630B (zh) * | 2019-06-28 | 2023-05-30 | 南京冰鉴信息科技有限公司 | 一种Java代码加密方法及装置 |
CN111026601A (zh) * | 2019-09-23 | 2020-04-17 | 拉扎斯网络科技(上海)有限公司 | Java应用系统的监控方法、装置、电子设备及存储介质 |
CN115686676B (zh) * | 2022-11-04 | 2023-07-28 | 北京远舢智能科技有限公司 | 一种对象的动态调用方法、装置及电子设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
US6324688B1 (en) * | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
US6272674B1 (en) * | 1998-12-14 | 2001-08-07 | Nortel Networks Limited | Method and apparatus for loading a Java application program |
EP1207454A1 (en) * | 2000-11-15 | 2002-05-22 | International Business Machines Corporation | Java run-time system with modified linking identifiers |
US6964039B2 (en) * | 2000-12-13 | 2005-11-08 | Esmertec Ag | Method to create optimized machine code through combined verification and translation of JAVA™ bytecode |
KR100441115B1 (ko) * | 2001-06-27 | 2004-07-19 | 주식회사 인터와이즈 | 정보 단말기의 자바 프로그램 처리 속도 향상을 위한 자바컴파일 온 디멘드 서비스 시스템 및 그 방법 |
GB2378535A (en) * | 2001-08-06 | 2003-02-12 | Ibm | Method and apparatus for suspending a software virtual machine |
-
2002
- 2002-12-02 KR KR10-2002-0076041A patent/KR100503077B1/ko not_active IP Right Cessation
-
2003
- 2003-06-30 CN CNA031484581A patent/CN1504881A/zh active Pending
- 2003-07-18 US US10/621,446 patent/US20050028155A1/en not_active Abandoned
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567067A (zh) * | 2006-03-30 | 2012-07-11 | 太阳微系统有限公司 | 减少动态输出中可察觉暂停的设备及方法 |
CN102567067B (zh) * | 2006-03-30 | 2015-01-14 | 太阳微系统有限公司 | 减少动态输出中可察觉暂停的设备及方法 |
CN107343382A (zh) * | 2014-09-02 | 2017-11-10 | Mbl有限公司 | 在具有电子微操纵库的仪器化环境中执行特定领域应用的机器人操纵方法和系统 |
CN107343382B (zh) * | 2014-09-02 | 2020-08-21 | Mbl有限公司 | 在具有电子微操纵库的仪器化环境中执行特定领域应用的机器人操纵方法和系统 |
CN105893103A (zh) * | 2014-11-26 | 2016-08-24 | 深圳他拍档电子商务有限公司 | 编译方法及其编译器 |
CN108446119A (zh) * | 2017-12-28 | 2018-08-24 | 北京奇虎科技有限公司 | 内联控制方法及装置 |
CN108717374A (zh) * | 2018-04-24 | 2018-10-30 | 阿里巴巴集团控股有限公司 | Java虚拟机启动时预热的方法、装置、及计算机设备 |
CN108717374B (zh) * | 2018-04-24 | 2021-08-17 | 创新先进技术有限公司 | Java虚拟机启动时预热的方法、装置、及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
KR20040048246A (ko) | 2004-06-07 |
KR100503077B1 (ko) | 2005-07-21 |
US20050028155A1 (en) | 2005-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1504881A (zh) | 爪哇执行设备和爪哇执行方法 | |
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
CN108139896B (zh) | 扩展虚拟机指令集体系架构 | |
US9519466B2 (en) | Executable code for constrained computing environments | |
CN1641587A (zh) | 用于改进爪哇虚拟机性能的方法和系统 | |
CN1823323A (zh) | 用于执行本机绑定的方法和装置 | |
CN1577268A (zh) | 共享库系统及构建该系统的方法 | |
CN1346465A (zh) | 基于标记的链接 | |
CN1885264A (zh) | 用于嵌入式系统的软件包构建方法和系统 | |
CN1821964A (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN1234553A (zh) | 减少编译代码中动态类初始化检查的代价的技术 | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN104246695A (zh) | 嵌套仿真和动态链接环境 | |
CN1855053A (zh) | 用于执行java虚拟机的指令的方法和设备 | |
CN1826586A (zh) | 软件原子化 | |
CN1499379A (zh) | 针对异构体系结构的在集成可执行程序内进行覆盖管理的方法和设备 | |
CN101763257B (zh) | java类预处理通信系统及java类预处理方法 | |
US7730451B2 (en) | Source server | |
CN1313925C (zh) | 构件自描述封装方法及运行的方法 | |
US9378002B2 (en) | System, method, apparatus and computer program product for providing memory footprint reduction | |
CN1879067A (zh) | 匹配用于控制工作过程的函数的方法和装置 | |
CN1710547A (zh) | 软件测试方法及其系统 | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
US7685565B1 (en) | Run time reconfiguration of computer instructions | |
CN107480479B (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 | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20040616 |