CN1529237A - 用于在运行时提高函数的执行性能的方法和计算系统 - Google Patents
用于在运行时提高函数的执行性能的方法和计算系统 Download PDFInfo
- Publication number
- CN1529237A CN1529237A CNA2004100399963A CN200410039996A CN1529237A CN 1529237 A CN1529237 A CN 1529237A CN A2004100399963 A CNA2004100399963 A CN A2004100399963A CN 200410039996 A CN200410039996 A CN 200410039996A CN 1529237 A CN1529237 A CN 1529237A
- Authority
- CN
- China
- Prior art keywords
- function
- class
- relevant information
- calling
- compiling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
- G06F9/4491—Optimising based on receiver type
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
本发明提供在有动态链接和加载的情况下对动态发送的调用进行静态联编的技术。一种用于提高函数在运行时的执行性能的方法,包括编译该函数-函数要么是解释的,要么是以前编译过的-并标识函数内部对过程的调用。该方法还包括向函数添加相关信息。相关信息被处理成指示函数的状态,它含有有关与该过程关联的类、名称和标识的信息。
Description
本申请是申请号为99104307.3、发明名称为“用于在运行时提高函数的执行性能的方法和计算系统”的中国申请的分案申请。
本发明涉及软件的运行期编译。更具体来说,本发明涉及在存在动态链接和加载的情况下动态发送的调用的静态联编技术。
面向对象的语言背后的根本思想是将数据和对该数据操作的过程(或函数)这二者结合成一个单一的单元,这个单元称作对象。对象的函数一般提供存取由该对象封装的数据的唯一途径。存取数据的方法是向该对象发送一个消息,指示该对象去调用该消息规定的过程。
在面向对象的语言中,高效率的消息发送是最重要的。这是因为消息发送是面向对象的程序中一种非常频繁进行的操作,而且是在运行期进行的,因此应当尽可能地快。然而消息发送决不是一种无足轻重的操作。面向对象的语言与能够在运行前判定一个函数的地址的过程性程序设计语言(例如C语言)不同的是,必须在运行期动态地判定对已经向一个接收者对象发送的消息进行处理的过程,这会牵涉到很大的检索量。
为了更好地理解消息发送的复杂性,下面将说明一种类层次的例子。图1表示一个包含各类的过程的类层次。类层次1在根部含有一个父类A3,它定义两个虚拟函数foo()和bar()。虚拟函数是可以在父类中定义并在关联的子类中重新定义的函数。类B5和类C7继承性地包含父类A3的数据和过程。如图所示,类B5对虚拟函数foo()和bar()的哪一个都不重新定义。然而,类C7重新定义虚拟函数foo()。当类C7的对象被请求去调用过程foo()时,被调用的过程将是由类C7而不是父类A3所定义的过程。类D9和E11也重新定义过程foo()。
由于一般不可能静态地判定出某对象的类,所以对与该对象关联的过程的准确搜索是在运行期执行期间进行的,更具体来说,是在消息发送期间进行的。例如,假定某过程的内容如下:
test()
{
...
x.foo()
...
}
如果所有的类A~E都在运行期执行时加载,要判定应该调用哪个函数foo(),取决于哪个类x是个实例。
此外,测试函数可以在运行期编译,以提高效能。在运行期编译时,可能只有类A3和B5已经加载。于是,从对已加载类的检查看来,人们会推测消息x.foo()将只调用A∷foo()。当然,如果在运行期执行期间类C7已经加载,这种推测就错了。
总之,本发明的实施例提供在有动态链接和加载的情况下对所发送的调用进行静态联编的革新性技术。本发明的一个方面是,一种用于提高函数在运行时的执行性能的方法,包括编译该函数—该函数要么是解释性的,要么是以前编译过的-并标识函数内部对过程的调用。该方法还包括向函数增加相关信息。相关信息被处理成指示函数的状态,它含有有关与该过程关联的类、名称和标识的信息。
本发明的另一个方面是,一种计算机实现的、用于在运行期间分析与系统的一个类层次关联的一个第一类的方法,包括标记第一类并标记作为第一类的超类的一个第二类以指明这两个类之间的关联。然后检查一个与该系统关联的编译函数。该编译函数含有被处理成指示该编译函数的有效状态以及该编译函数的优化状态的相关信息。对编译函数的检查,包括判定何时在相关信息中标识第一类和第二类中的至少一个。当判定结果是第一类或第一类与第二类都在相关信息中被标识时,就要对编译函数是否无效进行判定。在一个实施例中,该方法包括在判定编译函数无效时对编译函数进行反编译。反编译该编译函数将函数还原到解释状态。
通过以下结合各附图的详细说明,本发明的其它特点和优点将变得显而易见。
参考以下结合个附图的说明,可以明白以具体实施例体现的本发明。附图简介:
图1表示面向对象的环境中包含虚拟函数的类的一个类层次。
图2表示一例可用来执行本发明实施例软件的计算机系统。
图3表示图1计算机系统的系统框图。
图4是按照本发明实施例的虚拟机的图示。
图5表示在运行时编译一个过程的本发明实施例的流程图。
图6表示包含相关信息的一个已编译过程的实施例。
图7表示按照本发明的实施例在运行期执行期间类加载的过程流图。
图8表示按照本发明的实施例,类层次在内存中的表示。
定义
机器指令(或指令)—指示计算设备执行一个由操作码(OP码)和可选的一个或多个操作数规定的操作的指令。
虚拟机指令—软件仿真的微处理器或计算机体系用的指令(也称虚拟代码)。
本机机器指令—为特定微处理器或计算机体系设计的指令(也称本机代码)。
过程(method)—软件例程(也称函数、子例程、过程、成员函数)
运行期编译—在运行时进行的对代码的编译。
运行期执行—运行时刻进行的对代码的执行。
在以下说明中,将结合用JAVA虚拟机指令(或字节代码)静态联编动态发送的调用的优选实施例来描述本发明。不过本发明并不局限于任何特定语言、计算机体系结构或专门设备。因此以下对实施例的描述的目的是示例性的而不是限制性的。
JavaTM程序设计语言是SUN Microsystems公司开发的一种面向对象的高级程序设计语言,设计得很灵便,能在从小型设备(例如寻呼机(pagers)、蜂窝电话和智能卡)到超级计算机的范围很宽的计算机上执行。用Java(和其它语言)编写的计算机程序可以被编译成虚拟机指令,由Java虚拟机来执行。总之,Java虚拟机是一种解码并执行虚拟机指令的解释器。
适合Java虚拟机的虚拟机指令是字节代码,即指令包含一个或多个字节。字节代码是按照一种特定的文件格式存储的,这种文件格式叫作“类文件”。类文件包含类的过程的字节代码。类文件除了包含类的过程的字节代码之外,还包含一个符号表以及其它附属信息。
以一个或多个类文件中Java字节代码体现的计算机程序是独立于平台的。这种计算机程序不加修改就可以在任何能运行Java虚拟机实现的计算机上执行。Java虚拟机是一种对“通用”计算机的软件仿真程序,这是使得Java虚拟机的计算机程序能独立于平台的一个主要因素。
Java虚拟机可以实现为软件解释器。常规解释器在执行期间解码并执行所解释的程序,每次一条指令,这与编译器不同,后者在源代码执行之前将其解码成本机机器指令,这样,就不在执行期间进行解码。为了能运行时编译,Java虚拟机可以既包含解释器又包含编译器。一般来说,Java虚拟机是用Java程序设计语言以外的其它程序设计语言(例如C++程序设计语言)编写的。
图2表示一例可用于执行本发明实施例的软件的计算机系统。图2中的计算机系统301包括显示器303、屏幕305、机箱307、键盘309和鼠标311。鼠标311可以有一个或多个能与图形用户界面交互作用的按钮。机箱307上安装了CD-ROM驱动器313、系统内存和硬驱(见图3),它们可用来存储、提取包含实现本发明的计算机代码的软件程序、本发明所用数据等等。尽管图中是用CD-ROM 315来代表计算机可读存储介质的,但是也可以采用其它计算机可读存储介质,包括软盘、磁带、快速存储器、系统内存和硬盘。此外,以(例如包括因特网在内的网络中的)载波实现的数据信号也可算作是计算机可读存储介质。
图3表示用于执行本发明实施例的软件的计算机系统301的系统框图。如图2一样,计算机系统301包括监视器3033和键盘309以及鼠标311。计算机系统301还包括一些子系统,诸如中央处理器351、系统内存353,固定存储器(例如硬驱)355、可卸式存储器(例如CD-ROM驱动器)357、显示适配器359、声卡361、音箱363和网络接口365。其它适于本发明使用的计算机系统包含的子系统或多一点,或少一点。例如,另一个计算机系统可以有一个以上的处理器351(例如多处理器系统),或者有高速缓冲存储器。
计算机系统301的总线结构由箭头367表示。不过这些箭头是示意性的,表示能连接各子系统的任何互连方案。例如,可用本地总线将中央处理器连接到系统内存和显示适配器。图3所示的计算机系统301只是适合本发明的计算机系统的一个例子。其它具有不同子系统配置的计算机结构也是可以采用的。
一般来说,用Java程序设计语言编写的计算机程序,先要编译成字节代码或Java虚拟机指令,然后再由Java虚拟机执行。导节代码先存储到类文件,再输入到Java虚拟机去解释。虚拟机可在诸如前面讨论图2和3时所述计算机系统的计算机系统上执行。图4是一个由图2和3的计算机301系统支持的、适于实现本发明的虚拟机图示。当计算机程序—例如以JavaTM程序设计语言编写的计算机程序—被执行时,源代码410被提供给编译时环境405内的编译器420。编译器420将源代码410翻译成字节代码430。总之,当源代码410被软件开发者创建时,源代码410被翻译成字节代码430。
字节代码430一般来说可以复制、下载或以其它方式通过例如图3中网络接口365的网络传播,或者在诸如图3中存储器355的存储器上存储。在所述实施例中,字节代码430是独立于平台的。就是说,字节代码430可以在几乎任何运行在适当虚拟机440的计算机系统上执行。
字节代码430被提供给含有虚拟机440的运行时环境435。在一个实施例中,虚拟机可以是JavaTM虚拟机。运行时环境435一般可采用诸如图3中处理器351的一个或多个处理器来执行。虚拟机440包括编译器442、解释器444和运行时系统446。字节代码430可提供给编译器442或解释器444。
如果将字节代码430提供给编译器442,则字节代码430中包含的过程就被编译成机器指令。在一个实施例中,编译器442是一个适时的编译器,它能将对字节代码430所含过程的编译,推迟到该过程马上要被执行时才进行。如果将字节代码430提供给解释器444,则字节代码430以每次一条字节代码的方式被读入解释器444。每当一条字节代码被读入解释器444,解释器444就执行该字节代码所定义的操作。就是说,解释器444“解释”字节代码430,这一点本领域的熟练人员都明白。一般来说,解释器444几乎是连续地处理字节代码430和执行字节代码430所关联的操作。
当一个过程被另一个过程调用,或被运行时环境435调用时,如果该过程是个解释过程,则运行时系统446可以从运行时环境435以一个字节代码430序列的形式获取该过程,该过程可被解释器444直接执行。另一方面,如果被调用的过程是个尚未编译的编译过程,则运行时系统446也是从运行时环境435以一个字节代码430序列的形式获取该过程,然后在下一步去启动编译器442。编译器442于是由字节代码430生成机器指令,所生成的机器语言指令可由图3的处理器351直接执行。一般来说,当虚拟机440中止时,机器语言指令即被抛弃。
Java类(和接口)是动态加载、链接和初始化的。加载是系统寻找类的二进制形式(例如类文件)并由该二进制形式构造一个类对象来代表该类的过程。类类(Class class)是一种用于存储或表示类的结构的类。链接是采用类的二进制形式、将其联合到系统的运行时状态从而使其可以执行的过程。类的初始化包括执行类的静态初始化程序和类中所声明静态域的初始化程序。
每个Java类都有一个与其关联的常量池。常量池存储在Java类文件中,起着与符号表相类似的功能。一般来说,常量池中的每一项都由一个数字作索引,数字的范围是1到常量池中项的数目。类的过程通过索引来访问常量池中的项。一个类的过程不能访问另一个类的常量池。
除了存储直接量常量的常量池外,常量池还以符号形式来存储类、过程、域、接口。用符号来存储这些项,意思是存储标志该项的名称而不是物理地址。换言之,如果类A有个域F,则A和F的两个名称(连同一个F的类标识)都会在常量池存储。由于存储名称而不是地址,Java运行时系统在运行期动态地解决对物理地址的符号引用。
图5表示在运行时编译一个过程的本发明实施例的流程图。在步骤501,系统判断编译一个过程是否有益。一般来说,编译一个过程能提高该过程的执行性能。然而,许多情况下过程是不编译的。举例来说,编译的过程比不编译的过程需要更多的存储空间。不管如何,一旦判定某特定过程应当编译,则该过程在步骤503被编译。
在步骤505,系统标识一个对正在编译的过程中的一个虚拟函数的调用。如上所述,对虚拟函数的解析是在运行时动态完成的。在Java虚拟机指令中,这个调用是一条invokevirtual指令。
在步骤507,系统在运行期编译时分析类层次。类层次可能会指示,当前某加载类中只有一个函数是虚拟函数调用的接收者。如果当前加载类中只有一个函数是虚拟函数调用的接收者,系统就在编译的过程中放置一条直接调用该函数的指令。此外,系统可将整个函数直接插入编译的过程。直接插入函数要求编译的过程占用更多的存储空间,但导致性能更快。
在有些情况下,有一个以上所加载类的函数都可能是虚拟函数调用的接收者。如果出现这种情况,系统会直接插入一个包括直接调用该函数和/或直接插入函数的决策树或散列表。就是说,针对步骤505讨论的对虚拟函数的调用可以在步骤509被优化。美国专利申请号08/944,332(1997年10月6日提交)中描述了进行虚拟函数调用的技术,特此引为参考。
在步骤511,系统将相关信息增加到编译的过程。相关信息可以包含已经在步骤509被优化的各虚拟函数的类、函数名称和标识(例如参数类型)。这样,当类在运行期执行被加载时,就可以检查某编译的过程的相关信息,以判断该编译过程是否依然有效,是否应当解优化,或者是否应当再优化。后文将结合图7说明这个过程。
图6表示具有相关信息的一个编译过程的实施例。编译过程609包括首部603和编译代码605。首部603包括相关信息607等内容。在所述实施例中,相关信息607是编译过程609所有优化了的虚拟函数调用的类、名称和标识的一个列表。尽管这种信息可以按简单列表来存储,但也可以采用各种其它技术。
图7表示在运行期执行期间类加载的过程流图。在步骤701,系统接收一个要在运行时加载的类。系统然后在步骤703标记该类及其所有的超类。标记类的方法是在类层次结构中设置一个布尔域。
在步骤705检查所有编译的过程,以判断在它们的相关信息中是否包括任何作了标记的类。如上所述,相关信息可以存储在编译过程的首部中。如果某编译过程的相关信息中含有任何作了标记的类,系统就在步骤707判断是否有匹配的函数名称和标识。
通过判断是否有匹配的函数名称和标识,系统要确定类的加载类是否会导致编译过程有效地被无效掉。换言之,判断是否有匹配的函数名称和标识决定了类的加载是否生成新的、以前未发现的已经优化了的虚拟函数调用的接收者。
例如再次参见图1,如果在运行期编译时只加载了类A3和B5,系统就会在编译过程中放置一个对A∷foo()的直接调用(甚至直接插入整个函数),这是因为只有一个函数可能是该虚拟函数调用的接收者。然而如果在运行期执行期间,类C7被加载了,那么就可能有该虚拟函数调用的另一个接收者(即C∷foo())。这样,编译过程应当要么解优化,要么再优化。美国专利申请号08/944,330(1997年10月6日提交)中描述了对编译过程解编译的技术,特此引为参考。
如果在步骤707判定编译过程有个匹配,就可以在步骤709对该编译过程解优化。对编译过程的解优化可以包括将过程还原或以其它方式“反编译”到其解释形式。此外,系统可以再优化该编译过程,以便将新加载的类考虑进去。
图8表示类层次在内存中的一种表示。类801在图中位于根部,表明它是位于其下的类的超类。如图所示,类803和805是类801的子类。各个类的类信息中含有一个布尔域,用于如图7中步骤703那样对类作标记。
此外,各个类的类信息也可以含有一个子类指针和一个兄弟指针。子类指针指向某第一个子类,本例中是类803。兄弟指针形成一个由兄弟类组成的链接表。如图所示,类803的兄弟指针指向类805。由于采用子类和兄弟指针,本发明实施例的系统就能容易地遍历类层次。
以上完整地说明了本发明的优选实施例,但还可以采用各种变通、修改与等同方案。很明显的是,对上述实施例作适当改进后,本发明也完全适用。例如,尽管以上描述的实施例是针对Java虚拟机指令的,本发明的原理也完全可以适用于任何其它指令。因此不应认为以上说明限制了本发明的范围。
Claims (11)
1.一种计算机实现的、用于在运行时提高函数的执行性能的方法,该计算机实现的方法包括:
在运行时编译该函数;
在运行时标识对一个过程的调用,其中该函数执行对该过程的调用;
在对该过程的调用已被标识的情况下,把相关信息在运行时加到该函数。
2.权利要求1所述的计算机实现的方法,其中该相关信息被设置为指示该函数的一个状态。
3.权利要求1所述的计算机实现的方法,其中该相关信息被设置为指示该函数应否被再编译。
4.权利要求1所述的计算机实现的方法,其中该相关信息被设置为指示该函数是否适合于解优化或再优化。
5.一种适合在运行时提高函数的执行性能的计算机系统,该计算机系统包括:
一个处理器,其配置用来:
在运行时编译该函数;
在运行时标识对一个过程的调用,对该过程的调用是由该函数来执行的;并且
在对该过程的调用已被标识的情况下,把相关信息在运行时加到该函数。
6.权利要求5所述的计算机系统,其中该相关信息被设置为指示该函数的一个状态。
7.权利要求5所述的计算机系统,其中该相关信息被设置为指示该函数应否被再编译。
8.权利要求5所述的计算机系统,其中该相关信息被设置为指示该函数是否适合于解优化或再优化。
9.一种用于在运行时提高函数的执行性能的方法,该计算机实现的方法包括:
在运行时编译该函数;
在运行时确定该函数是否调用一个属于调用的唯一目标的过程;并且
在确定该函数调用一个属于调用的唯一目标的过程的情况下,把相关信息在运行时加到该函数。
10.权利要求9所述的方法,其中该相关信息被设置为指示该函数应否被再编译。
11.权利要求9所述的方法,其中该相关信息被设置为指示该函数是否适合于解优化或再优化。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US7976598P | 1998-03-24 | 1998-03-24 | |
US60/079765 | 1998-03-24 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB991043073A Division CN1149477C (zh) | 1998-03-24 | 1999-03-24 | 用于在运行时提高函数的执行性能的方法和计算系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1529237A true CN1529237A (zh) | 2004-09-15 |
CN1287280C CN1287280C (zh) | 2006-11-29 |
Family
ID=22152672
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100399963A Expired - Lifetime CN1287280C (zh) | 1998-03-24 | 1999-03-24 | 用于在运行时提高函数的执行性能的方法和计算系统 |
CNB991043073A Expired - Lifetime CN1149477C (zh) | 1998-03-24 | 1999-03-24 | 用于在运行时提高函数的执行性能的方法和计算系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB991043073A Expired - Lifetime CN1149477C (zh) | 1998-03-24 | 1999-03-24 | 用于在运行时提高函数的执行性能的方法和计算系统 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP0950947B1 (zh) |
JP (1) | JP5129904B2 (zh) |
KR (1) | KR19990078174A (zh) |
CN (2) | CN1287280C (zh) |
DE (1) | DE69911104T2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5983021A (en) * | 1998-05-27 | 1999-11-09 | Sun Microsystems | Dynamically switching statically bound function calls to dynamically bound function calls without recompilation |
US6223340B1 (en) * | 1998-10-09 | 2001-04-24 | Sun Microsystems, Inc. | Method for directly inlining virtual calls without on-stack replacement |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
JP4376181B2 (ja) | 2002-06-18 | 2009-12-02 | パナソニック株式会社 | プログラム実行処理端末装置 |
JP2006146613A (ja) * | 2004-11-19 | 2006-06-08 | Matsushita Electric Ind Co Ltd | プログラム変換方法 |
US7490320B2 (en) * | 2005-02-18 | 2009-02-10 | International Business Machines Corporation | Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation |
KR20080039080A (ko) * | 2006-10-31 | 2008-05-07 | 에스케이 텔레콤주식회사 | 이종언어편집 라이브러리의 인터페이스 기능이 구비된단말장비, api호출방법 및 컴파일함수생성방법 |
US8819649B2 (en) | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
US20130205282A1 (en) * | 2012-02-07 | 2013-08-08 | Microsoft Corporation | Transferring program execution from compiled code to interpreted code |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3178151B2 (ja) * | 1993-03-19 | 2001-06-18 | 富士ゼロックス株式会社 | オブジェクト指向言語のメッセージコンパイル装置 |
US5613120A (en) * | 1994-10-20 | 1997-03-18 | Silicon Graphics, Inc. | System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program |
US5606699A (en) * | 1995-04-28 | 1997-02-25 | International Business Machines Corporation | Storing and querying execution information for object-oriented programs |
US5748963A (en) * | 1995-05-12 | 1998-05-05 | Design Intelligence, Inc. | Adaptive binding |
-
1999
- 1999-03-22 EP EP99302209A patent/EP0950947B1/en not_active Expired - Lifetime
- 1999-03-22 DE DE69911104T patent/DE69911104T2/de not_active Expired - Lifetime
- 1999-03-23 JP JP07773299A patent/JP5129904B2/ja not_active Expired - Lifetime
- 1999-03-24 KR KR1019990009951A patent/KR19990078174A/ko active IP Right Grant
- 1999-03-24 CN CNB2004100399963A patent/CN1287280C/zh not_active Expired - Lifetime
- 1999-03-24 CN CNB991043073A patent/CN1149477C/zh not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN105335137B (zh) * | 2014-07-23 | 2019-01-18 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN1149477C (zh) | 2004-05-12 |
CN1287280C (zh) | 2006-11-29 |
KR19990078174A (ko) | 1999-10-25 |
EP0950947A2 (en) | 1999-10-20 |
JP5129904B2 (ja) | 2013-01-30 |
EP0950947B1 (en) | 2003-09-10 |
JPH11327906A (ja) | 1999-11-30 |
DE69911104T2 (de) | 2004-07-08 |
DE69911104D1 (de) | 2003-10-16 |
EP0950947A3 (en) | 2000-02-23 |
CN1235301A (zh) | 1999-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
US6295643B1 (en) | Method and apparatus for improving java virtual machine performance using persistent execution information | |
US7913240B2 (en) | Method and apparatus for transforming java native interface function calls into simpler operations during just-in-time compilation | |
US6704927B1 (en) | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading | |
JP4183399B2 (ja) | 複数言語のコンパイル方法及びシステム | |
US8312439B2 (en) | Inlining native functions into compiled java code | |
CN1119756C (zh) | 用于进行静态初始化的方法和系统 | |
US6481006B1 (en) | Method and apparatus for efficient invocation of Java methods from native codes | |
US7765527B2 (en) | Per thread buffering for storing profiling data | |
US7870546B2 (en) | Collaborative classloader system and method | |
CN110770698B (zh) | 用于动态代码优化的差异静态分析 | |
CN1221912A (zh) | 用于发现内存泄漏和运行期信息的对象堆分析技术 | |
US8650537B2 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
CN106033370B (zh) | 64位Java虚拟机的实现方法及装置 | |
US9250865B2 (en) | Selective speculative class-based optimization | |
US8042103B2 (en) | Pre-translated files used in a virtual machine | |
US6324688B1 (en) | Method and apparatus for optimizing execution of Java programs | |
CN1287280C (zh) | 用于在运行时提高函数的执行性能的方法和计算系统 | |
CN1236919A (zh) | 实现快速子类和子类型检查的方法与设备 | |
CN1265487A (zh) | 用于改进java方法调用速度的方法和装置 | |
US6779188B1 (en) | Apparatus and method for improved devirtualization of method calls | |
US7181724B2 (en) | Representation of Java® data types in virtual machines |
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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20061129 |