CN1149477C - 用于在运行时提高函数的执行性能的方法和计算系统 - Google Patents

用于在运行时提高函数的执行性能的方法和计算系统 Download PDF

Info

Publication number
CN1149477C
CN1149477C CNB991043073A CN99104307A CN1149477C CN 1149477 C CN1149477 C CN 1149477C CN B991043073 A CNB991043073 A CN B991043073A CN 99104307 A CN99104307 A CN 99104307A CN 1149477 C CN1149477 C CN 1149477C
Authority
CN
China
Prior art keywords
function
class
compiling
computer implemented
implemented method
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CNB991043073A
Other languages
English (en)
Other versions
CN1235301A (zh
Inventor
L・巴克
L·巴克
芈尬
S·米特罗维
茨勒
U·霍尔茨勒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1235301A publication Critical patent/CN1235301A/zh
Application granted granted Critical
Publication of CN1149477C publication Critical patent/CN1149477C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising 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

用于在运行时提高函数的执行性能 的方法和计算系统
本发明涉及软件的运行期编译。更具体来说,本发明涉及在存在动态链接和加载的情况下动态发送的调用的静态联编技术。
面向对象的语言背后的根本思想是将数据和对该数据操作的过程(或函数)这二者结合成一个单一的单元,这个单元称作对象。对象的函数一般提供存取由该对象封装的数据的唯一途径。存取数据的方法是向该对象发送一个消息,指示该对象去调用该消息规定的过程。
在面向对象的语言中,高效率的消息发送是最重要的。这是因为消息发送是面向对象的程序中一种非常频繁进行的操作,而且是在运行期进行的,因此应当尽可能地快。然而消息发送决不是一种无足轻重的操作。面向对象的语言与能够在运行前判定一个函数的地址的过程性程序设计语言(例如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 (15)

1.一种计算机实现的、用于在运行时提高函数的执行性能的方法,该计算机实现的方法包括:
在运行时编译该函数;
在运行时标识对一个过程的调用,其中对该过程的调用包含在该函数中;
在运行时将相关信息加到该函数,相关信息被处理成指示该函数的状态,它含有与该过程关联的类、名称和标识的信息,其中该函数的状态被处理成指示该函数的有效性和该函数的编译状态。
2.权利要求1所述的计算机实现的方法,其中的该过程是个虚拟过程,该计算机实现的方法进一步包括:
分析与该函数相关联的一个类结构,其中对该类结构的分析包括判断该虚拟过程何时是该调用的唯一目标。
3.前述任一项权利要求中所述的计算机实现的方法,该计算机实现的方法进一步包括:
当判定该虚拟过程是该调用的唯一目标时,向该函数直接插入该虚拟过程。
4.权利要求1、2中任一项权利要求中所述的计算机实现的方法,该计算机实现的方法进一步包括:
在该函数中放置一个对该虚拟过程的直接调用。
5.权利要求3所述的计算机实现的方法,该计算机实现的方法进一步包括:
判断该函数何时适于编译。
6.权利要求1所述的计算机实现的方法,该计算机实现的方法进一步包括:
加载一个类,其中该类可能与该编译函数关联;
基于该相关信息,判断加载了该类后该函数的编译版本是否还是有效;以及
当判定该函数的编译版本为无效时,判断该函数是否适于解优化,以及该函数是否适于再优化这两种情况中的至少一种情况。
7.权利要求1所述的计算机实现的方法,还包括:
加载一个与该函数关联的类;
判断该函数何时不是对该过程的唯一调用者;
在判定该函数实际上不是该过程的唯一调用者时,反编译该函数。
8.权利要求1所述的计算机实现的方法,还包括:
加载一个与该函数关联的类;
判断该函数何时不是对该过程的唯一调用者;
在判定该函数实际上不是该过程的唯一调用者时,再编译该函数。
9.一种基于运行期的计算机实现的用于在运行期间分析与系统的一个类层次关联的一个第一类的方法,该计算机实现的方法包括:
在运行期间标记第一类;
在运行期间标记一个第二类,该第二类包含在该类层次中,并且第二类与第一类相关联,其中对第二类的标记实际上是标识第二类与第一类关联;
在运行期间检查一个与该系统关联的编译函数,该编译函数含有被处理成指示该编译函数的有效状态以及该编译函数的优化状态的相关信息,其中对该编译函数的检查,包括判定何时在该相关信息中标识了第一类和第二类中的至少一个;
当判定第一类与第二类中的至少一个在相关信息中被标识时,判断该编译函数何时无效。
10.权利要求9所述的计算机实现的方法,进一步包括:
在判定该编译函数无效时对该编译函数进行反编译,其中反编译该编译函数将该编译的函数还原到解释形式。
11.权利要求9所述的计算机实现的方法,进一步包括:
在判定该编译函数无效时对该编译函数进行再编译,其中再编译该编译函数允许该编译函数说明第一类。
12.一种适合在运行时提高函数的执行性能的计算系统,该计算系统包括:
一个处理器;
一个安排为在运行时编译该函数的编译器;
一个安排为在运行时标识对一个过程的一个调用的一个调用标识器,对该过程的调用包含在该函数中;
一种适于在运行时向该函数添加相关信息的机构,其中该相关信息被处理为指示该函数的状态,该状态被处理为包括该函数何时处于有效状态。
13.权利要求12所述的计算系统,其中的该过程是个虚拟过程,该计算机系统进一步包括:
分析与该函数相关联的一个类结构的分析器,其中对该类结构的分析包括判断该虚拟过程何时是该调用的唯一目标。
14.权利要求12或13中任一项所述的计算系统,该计算系统进一步包括:
用于当判定该虚拟过程是该调用的唯一目标时,向该函数直接插入该虚拟过程的直接插入器。
15.一种在计算环境中使用的编译方法结构,该编译方法结构包括:
一个编译代码部分,该编译代码部分在运行时被处理为包括一个优化的对至少一个虚拟函数的调用;
一个首部部分;该首部部分在运行时被处理为包括相关信息,该相关信息包括的信息涉及与至少一个虚拟函数相关联的类、至少一个虚拟函数的名称、以及至少一个虚拟函数的标识。
CNB991043073A 1998-03-24 1999-03-24 用于在运行时提高函数的执行性能的方法和计算系统 Expired - Lifetime CN1149477C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US7976598P 1998-03-24 1998-03-24
US60/079,765 1998-03-24
US60/079765 1998-03-24

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100399963A Division CN1287280C (zh) 1998-03-24 1999-03-24 用于在运行时提高函数的执行性能的方法和计算系统

Publications (2)

Publication Number Publication Date
CN1235301A CN1235301A (zh) 1999-11-17
CN1149477C true CN1149477C (zh) 2004-05-12

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 Before (1)

Application Number Title Priority Date Filing Date
CNB2004100399963A Expired - Lifetime CN1287280C (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)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
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
CN105335137B (zh) * 2014-07-23 2019-01-18 国际商业机器公司 用于处理源文件的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
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

Also Published As

Publication number Publication date
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
CN1529237A (zh) 2004-09-15
DE69911104D1 (de) 2003-10-16
EP0950947A3 (en) 2000-02-23
CN1235301A (zh) 1999-11-17

Similar Documents

Publication Publication Date Title
CN1134731C (zh) 在计算机系统中编译指令的方法
JP4183399B2 (ja) 複数言語のコンパイル方法及びシステム
US6704927B1 (en) Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US7913240B2 (en) Method and apparatus for transforming java native interface function calls into simpler operations during just-in-time compilation
US6295643B1 (en) Method and apparatus for improving java virtual machine performance using persistent execution information
KR100311585B1 (ko) 템플릿오브젝트파일들을최적화하기위한시스템과방법
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
CN110770698B (zh) 用于动态代码优化的差异静态分析
US20080270979A1 (en) Methods and systems for using type models to generate an implementation of a type
CN1221912A (zh) 用于发现内存泄漏和运行期信息的对象堆分析技术
Hummel et al. Annotating the Java bytecodes in support of optimization
CN106033370B (zh) 64位Java虚拟机的实现方法及装置
US20040083467A1 (en) System and method for executing intermediate code
CN1149477C (zh) 用于在运行时提高函数的执行性能的方法和计算系统
US6779188B1 (en) Apparatus and method for improved devirtualization of method calls
US7181724B2 (en) Representation of Java® data types in virtual machines
US8984473B2 (en) Methods for type analysis in systems for code generation
Kågström et al. Cibyl: an environment for language diversity on mobile devices
Lund et al. Revolutionizing Embedded Software

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: 20040512