CN1172303A - 一种在只读存储器中加载类的方法及系统 - Google Patents

一种在只读存储器中加载类的方法及系统 Download PDF

Info

Publication number
CN1172303A
CN1172303A CN97112905A CN97112905A CN1172303A CN 1172303 A CN1172303 A CN 1172303A CN 97112905 A CN97112905 A CN 97112905A CN 97112905 A CN97112905 A CN 97112905A CN 1172303 A CN1172303 A CN 1172303A
Authority
CN
China
Prior art keywords
class
data
bytecode
read
memory
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
Application number
CN97112905A
Other languages
English (en)
Other versions
CN1114155C (zh
Inventor
西伦·D·托克
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 CN1172303A publication Critical patent/CN1172303A/zh
Application granted granted Critical
Publication of CN1114155C publication Critical patent/CN1114155C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing
    • 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/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44573Execute-in-place [XIP]
    • 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

Abstract

提供可执行模块的方法和系统,该模块有两个地址空间,分别驻留在ROM和RAM中。该可执行模块表示为动态类加载而构造的Java类。静态类加载器修改类结构使其适合静态加载,它还鉴别包含未解决的符号引用的方法和在模块执行过程中变化的数据,以便将其置于RAM中的地址空间。静态类加载器对于分布式计算环境中很少或没有辅助存储器的客户机很有利,因为通过使用ROM存储静态可加载类,可腾出RAM用于其它用途。

Description

一种在只读存储器中 加载类的方法及系统
本发明涉及具有运行时间动态加载的类的面向对象的计算机系统,具体地说,涉及一种在只读存储器中预加载类的一个子集的系统及方法。
当前面向对象的编程语言的一个趋势是扩展语言的功能,以适应在分布式计算环境中动态内容的分布。在一种这样的语言中,它是通过运行时间动态加载类来实现的。类是一些变量与方法的集合,它们是一个对象行为的模型。通过运行时间动态加载类,已有的应用程序可以通过连接入新类来增加功能,这些新类驻留在分布式计算环境中的任何计算机系统中。
在这种语言中,符号引用(symbolic references)用于指代类成员(如类的方法与类变量)。当一个类被调用时,动态加载器确定类的存储方案并解决符号引用。当访问不断被更新的类时,这样的加载方案是有益的。然而,这种加载方案的一个局限性是它依赖于读/写存储器设备,如随机存取存储器(RAM)。在一种有很少或没有辅助存储器(如非易失性磁盘存储器)的计算环境中,如此动态加载类会很快用尽RAM的存储容量。由于RAM的容量是有限的,尽量减少应用程序使用RAM的量是需要的。因此,在执行含有可动态加载的类的面向对象的程序代码时,需要限制其所用的RAM的量。
提供一种克服现有技术此缺陷的方法及系统将是有益的。
简言之,本公开属于一种离线式(offline)类加载器,它用于产生一个可执行模块,该模块的类被预加载入存储器中而不需要运行时间动态加载。尽管如此,该可执行模块仍然包括一个专用于运行时间动态加载的类结构。因此,这种离线式类加载器修改现有类结构以适应静态加载。然而,这种类结构允许改变包含未解决的引用的数据和方法。该离线式类加载器给这些方法和数据打上标记,指明它们将要被存入随机存取存储器中。其他数据都存储在只读存储器中。当静态加载过程完成后,就产生一个包含两个地址空间的可预加载的可执行模块。第一地址空间包括含有未解决的引用的方法,和在模块执行过程中变化的数据该第一地址空间被加载到随机存取存储器。第二地址空间包括含有被静态加载的类的方法和被加载到只读存储器的常数。
在客户机有很少或没有辅助存储器的分布式计算机系统中,这种可预加载的可执行模块是有益的。这样的客户机需要完全在随机存取存储器中运行应用程序,随机存储器很快就成为有限的资源。通过采用这种离线式类加载器将应用程序分成两个地址空间,可预加载模块使用的RAM数量就减至最少。在一个实施例中,一台具有最低限度辅助存储器的客户机采用离线式类加载器在客户机的只读存储器中预加载了一个浏览器。该浏览器被分入前述的两个地址空间。当系统初始化或上电时,该浏览器的随机存取存储器部分就从只读存储器加载到随机存取存储器。通过在只读存储器执行浏览器的一大部分,浏览器就拥有了更多的RAM用来存储信息内容和可执行模块,它们是从与客户机通讯的其它服务器计算机上获得的。
从以下的详细描述和所附权利要求并结合附图,本发明的其他目的和特征会更加明白,附图为:
图1是分布式计算机系统的方框图。
图2是图1所示分布式计算机系统中客户机的方框图。
图3是说明处理部件的流程图,该处理部件用于产生可预加载的可执行模块。
图4是说明类文件的文件构造。
图5是说明常量池(constant pool)的文件构造。
图6说明类块数据结构。
图7说明一个指令字节码流。
图8A和8B是离线式类加载器所用方法的流程图。
图9是建立类块数据结构的方法的流程图。
图10是删除重复常量的方法的流程图。
图11是将非快速(non-quick)指令格式转换为快速指令格式的方法的流程图。
图12为一方框图,说明将应用程序预加载到只读存储器和随机存取存储器的映射关系,并说明被静态类初始化器映射到随机存取存储器中的方法及数据部分的加载过程。
这里描述的方法与系统采用分布式计算环境,该分布式计算环境具有连接至少一台服务器计算机和一些客户机的通信链路。有些客户机具有很少或没有辅助存储器(如非易失性磁盘存储器),因此要求应用程序完全在随机存取存储器中运行。一种用Java编程语言开发的应用程序在这样一个客户机上执行。最好,该应用程序是这样一个浏览器,要从一个或多个服务器计算机上输入Java内容,如Java小应用程序(applet)。通常该浏览器是一个解释程序模块,它采用超文本传输协议(HTTP)检索网络文档,以便从作为网址的服务器存取一个或多个网页,这些网页的格式为超文本标记语言(HTML)。HTML文档经解释后显示给客户机端的用户。通常,HTML文档嵌入小应用程序中。小应用程序是一个可执行模块,表示为一个Java类。浏览器将该小应用程序及相关类载入,以执行此小应用程序。
浏览器、HTML文档及小应用程序都驻留在计算机的RAM中。有时,载入RAM中的数据是会超过其容量。由于客户机可能没有辅助存储器,将浏览器和其它基本支持类的一部分置入只读存储器是有益的。这样,RAM存储器特地为输入的小应用程序而保留。最好,浏览器和其它基本支持类(如I/O和实用类)被预加载到只读存储器。
离线式类加载器将Java应用程序,如浏览器及基本支持类,分成至少两个分离的地址空间。第一地址空间驻留在只读存储器中,包括不需要动态加载的方法和保持不变的数据。第二地址空间驻留在读/写存储器(如随机存取存储器)中,包括需要动态加载的方法和在执行过程中变化的数据。
这样划分的浏览器可初始存储在客户机的只读存储器中。系统上电时,第二地址空间被预加载到RAM。这样会留出大量RAM存储器以供浏览器输入HTML文档、小应用程序、其它信息前后文(information-context)以及可执行模块,它们都可通过通信链路存取。
应当指出,本公开是参考Java编程语言进行描述的。因此,本描述将采用Java中的术语。下述Java术语在全篇描述中将会频繁使用,在此作简要说明。类是用于描述对象行为的实例(instance)变量和方法的组合。对象是类的一个实例。实例变量是对象的数据,它由类实例化而来。静态实例变量对于类的所有实例都是相同的。非静态实例变量对类的每个实例都不同。常量数据指那些在程序执行过程中不改变的数据。
方法是执行一系列含义明确的操作的程序段。在Java中,方法是用字节码流表示的指令实现的。字节码是一个8位的代码,它可以是指令的一部分,如一个8位的操作数或操作码。接口是一个抽象类,其中实现方法的字节码在运行时间定义。Java应用程序是包含字节码的可执行模块,它可以采用Java解释器或Java及时(just-in-time)编译器执行。Java编程语言的特色在Tim Ritchey所著的Programming with Java Beta 2.0,New Riders Publishing(1995)一书中有详细描述。
参照图1,所示分布式计算机系统100,有多个客户机102和多个服务器计算机104。在一个实施例中,每台客户机102通过Intemet 106与服务器104连接,当然也可采用其它形式的通信连接。最好,服务器和客户计算机可以是桌面计算机,如Sun工作站、IBM兼容机及Macintosh机,然而,实际上任何类型的计算机均可作为服务器或客户机。而且,该系统并不限于分布式计算机系统。它可以不按这里说明的细节实现,可以实现为不同的计算机系统、不同结构的紧耦合处理器或不同结构的松耦合微处理器系统。
在一个实施例中,一个或多个服务器计算机作为网址包括一个HTML文档库,其中包含Java内容和小应用程序。客户机执行浏览器,该浏览器为客户机端的用户提供从服务器计算机存取HTML文档的机会。参照图1,服务器计算机通常包括一个或多个处理器112、通讯接口116、用户接口114及存储器110。存储器110存储:
·操作系统118;
·Intemet通信管理器程序或其它类型的网络访问程序120;
·编译器122,用于将Java编程语言写的源代码翻译成字节码流;
·源代码库124,包括一个或多个包含Java源代码的源代码文件;
·类文件库128,包括一个或多个类文件130、及包含类文件的一个或多个类库131,每个类文件包含代表特定类的数据;
·离线式类加载器132,用于预加载特定的一组类;离线式类加载器也可称为静态类加载器;
汇编器134,产生目标文件,以连接器可识别的格式表示类成员、类数据结构及存储器存储指示器;
·连接器136,为一系列预加载的类确定存储器布局,以及解决所有符号引用;
·浏览器138,用于存取HTML文档;
·一个或多个数据文件,供服务器使用。
浏览器可以包括:
·运行时间类加载器模块140,将类加载入用户地址空间,并使用字节码程序校验器校验与每个被加载类相关的方法的完整性;
·字节码程序校验器模块142,校验一个指定程序是否满足某些预定的完整性准则;和
·HTML加载器144,用于加载HTML文档;以及其它模块。
图2所示为客户机,包括一个或多个处理器202、通信接口206、用户接口204、只读存储器208和随机存取存储器210。只读存储器208存储浏览器的一部分212和支持程序(包括操作系统213和网络访问程序214),该支持程序中的方法不含未解决的引用,且该支持程序中的数据保持不变。
随机存取存储器210存储:
·浏览器的第二部分215和支持程序216、217,包括含有未解决的引用的应用程序和执行过程中变化的数据;
·HTML文档库220,包括一个或多个HTML文档222,这些文档是应用户请求通过用户接口204由浏览器获取的;
·类文件库224,包括一个或多个类文件或小应用程序226;以及
·一个或多个数据文件228,客户机在其处理中可能会用到这些数据文件。
图3是产生可预加载的可执行模块所用步骤的顺序的概况图。应该指出,这里描述的方法和系统适合预加载浏览器和其它支持程序。然而,这里描述的方法和系统并不限于此处特定的Java应用程序。任何Java应用程序或其它运行时间连接的方法集都可用这里描述的方法和系统预加载。
每个包含Java应用程序的类的源代码126被编译器122编译成类文件130。类文件包含代表类的类数据结构、每个方法的字节码、常量数据及其它信息。对类文件更详细的说明见后。另一种方法是,与应用程序对应的类文件可以已经驻留在一个或多个类库131中。一旦类文件可以使用,组成将被预加载的应用程序的整套类文件128就被传送给离线式类加载器132。
离线式类加载器132的作用是确定与每个类相关的哪些方法和变量能存入只读存储器,哪些必须存入随机存取存储器。调用Java接口或使用非静态实例变量的方法需驻留在随机存取存储器中。这是因为实现接口的字节码是运行时间确定的,且非静态实例变量对于每个相关类的实例化是变化的。离线式类加载器132找到这些方法和变量,并插入一个特殊的指示器标记出它们将被加载到随机存取存储器。离线式类加载器还进行一系列的优化,以产生更紧凑的可执行代码。例如,与每个类相关的常量池被结合起来供所有驻留在应用程序中的类使用。另外,离线式类加载器还进行附加的处理,以便将原来为动态加载构造的类文件改为供预加载的类环境使用。
离线式类加载器的输出302由两个文件组成:一个是包含整个应用程序的常量数据的常量池文件;另一个是更新的类文件,包含类数据结构和类成员。这两个文件中的数据的格式均为数据定义,其中每个定义指定一个字节码和一个指示存储器位置的偏移量。更新的类文件包含存储器指示器,它指明特定的一组定节码存入哪种类型的存储器。然而,此处描述的方法和系统并不限于产生这两个文件。也可采用其它文件结构,包括但不限于一个包含所有相关类数据的文件。
接着,该文件传送给汇编器134,它产生一个目标模块,该模块具有连接器将数据映射到相应地址空间所需的格式。最好有两个地址空间,一个给随机存取存储器,另一个给只读存储器。接着目标模块传送给连接器136,它给应用程序中的类生成存储器布局。一旦确定了存储器布局,连接器136将解决所有的符号引用,并以直接地址取代它们。该存储器布局被分成两个地址空间。被标记为只读存储器的方法和数据包含在第一地址空间,被标记为需存入随机存取存储器的方法和数据包含在第二地址空间。连接器136的输出是一个可预加载的可执行模块306,包含这两个地址空间的方法和数据。
如上所述,离线式类加载器的主要功能是确定哪些方法和数据要被存入只读存储器及哪些要被存入随机存取存储器。另外,所有预加载的类的常量池最好结合起来,以将使用的只读存储器的量降至最少。为结合常量池,进行了某些优化以降低存储器的使用量。更具体地说,删除了重复的表达式,作为长字符串一部分的字符串被长字符串中相应子字符串位置的指针所取代。
包含所有类的通用常量池,被分成两段,第一段横跨256字节,第二段横跨64K-256字节。第一段可以包括最多256个常量,第二段包括其余的常量。常量池的排序使得最常引用的常量存入池的第一段,最不常引用的常量存入第二段。一旦常量池被结合了,引用常量的字节码可能需要加以修改。第一段中的常量用8位操作数引用,而第二段中的常量用两个8位操作数引用(见图7,其中操作数702是一个8位操作数,操作数704和706共同组成了一个16位操作数)。从8位操作数扩展成16位操作数,需调整引用通用常量池第二段中的常量的字节码,同时考虑到这些方法中字节码改变的相对位置,调整方法中的字节码偏移量(如在分支指令中)。另外,字节码的改变要求更新存储在异常表中的偏移量,以反映方法中字节码起始和结束位置的改变,据此指定不同的异常处理程序。
进而,离线式类加载器执行另两个变换,以使类结构适合于预加载类。产生一个静态类初始化器,它对预加载的类进行类初始化。采用非快速指令格式用符号引用方法的字节码,重新编码为快速指令格式以直接引用该方法。
图8更为具体地描述了离线式类加载器132所采用的步骤。起始时离线式类加载器接收一个类文件,其中的每一个类都是应用程序的一部分,该应用程序的类将被预加载。图4说明该类文件的格式。该类文件包含一个或多个首标记录(header record)402、一个常量池404、一个或多个方法406以及一个异常表408。首标记录402可以指明常量池的大小、方法的个数和异常表的大小。常量池404包括应用程序执行过程中保持不变的数据。这种数据的例子可包括字符串常量、静态最终整数(final integers)、对方法的引用、对类的引用以及对接口的引用。方法数据406由实现每个方法的字节码流组成,异常表中的每一项给出字节码起始和结束偏移量、异常类型、以及异常处理程序的偏移量。该项指明在起始和结束偏移量指明的代码中出现指明类型的异常时,该异常的处理程序可在给定处理程序的偏移量处找到。
每个类文件都被离线式类加载器读入(步骤802),并给每个类建立合适的类数据结构(804),该类数据结构存入用于预处理应用程序的计算机的存储器中。图6说明类数据结构600。每个类都有一个类块602、一个或多个方法块604、每个方法的字节码60g、一个或多个字段块614、用于各字段的各分离数据区618、常量池624、映射表626和异常表628。
类块是一个定长的数据结构,可包括下列数据:
·类名630;
指针632,指向当前类的最近超类(immediate superclass)的类块;
·一个或多个指针的数组634,每个指针引用一个方法块;
·一个或多个指针的数组636,每个指针引用一个字段块;
·指向类的常量池的指针638;
·指向类的异常表的指针640。
方法块604是一个定长的数据结构,包括确定数目的方法。分配一个或多个方法块以包含类的所有方法。方法块604包括方法名612和指向相应字节码608的指针610。
字段块614是一个定长的数据结构,包括实例变量或字段。Java为两种不同类型的变量提供不同的字段块格式。第一种格式616用于整型或浮点型实例变量。该格式616包含实例变量名、类型(如整型或浮点型)及其值。第二种格式620用于双精度型或长型实例变量。该格式620包含实例变量名、类型(如双精度型或长型)及指向实例变量值618位置的指针。
图9说明用于建立类数据结构的步骤。首标记录中的信息用于给每个类数据结构分配空间(步骤1002)。一旦类数据结构被分配好,指向这些结构位置中的每一个的指针就被包括在类块中(步骤1004)。
接着,离线式类加载器读入常量池。在讨论这些步骤之前,首先描述常量池的内容。图5说明存储在每个类文件中的常量池的结构。第一项包含类名和超类名(502)。这些名字存储为字符串常量,第一项包含指向常量池中的这些字符串位置的指针。第二项属于字段和实例变量。首标504用来指示常量池中字段的个数。首标后面是各个字段506。
类似地,字符串常量前面是首标508,该首标指示常量池中字符串常量的个数。跟着的是各个字符串常量510。字符串常量用于表示方法名、类名及接口名。后面,存储在常量池中的方法引用之前是首标,该首标指示方法的数量512。常量池中对每个方法都有方法指针511,该方法指针包含指向方法名的指针514和指向方法类名的指针516。这些名字以字符串常量存储在常量池中。方法指针511用来用符号引用一个方法。这用在调用方法指令的非快速格式中。
一个方法可以包含一条调用一个方法的指令。该指令用非快速格式可表示如下:
调用方法“类”。“方法”                             (1)这里“类”指包含类名的字符串常量,“方法”指包含方法名的字符串常量。调用方法指令包含一个指向方法指针511的指针。离线式类加载器通过向方法名加入指向方法块的指针来解决符号引用。一旦连接器确定了各个类的存储器布局,连接器以直接引用方法(即通过存储方法的地址)的快速格式取代调用方法指令的非快速格式。通过解决符号引用,该方法可被预加载。
回过头来参照图9,为映射表626分配了存储器,该映射表将跟踪常量在类文件常量池中从最初位置到不同的临时位置的移动,直到常量被存入通用常量池。给每个类建立映射表626,将常量池中每一个常量的最初地址映射到它的当前地址(步骤1006)。常量池中除字段外的所有数据都从类文件读取并存入常量池(步骤1008)。随着常量从类文件中转移到常量池中,映射表626要进行更新,以反映常量池中的最初地址与当前地址(步骤1008)。然而,从常量池中读取的字段被加载入一个或多个字段块,在映射表中没有为它们创建项(步骤1008)。
方法数据从类文件中读取,并存入一个或多个方法块。附加存储器分配给与每个方法相关的字节码。方法名和指向字节码位置的指针一起放入方法块(步骤1010)。类似地,异常表也从类文件中加载入相应的异常表数据结构中(步骤1012)。
回过头来参照图8,类数据结构建立之后,按照所有常量池的总长度分配了一个散列表(hash table)180(见图3),后面将用它删除重复常量(步骤805)。
接着,离线式类加载器开始删除重复常量。这样做的目的是将所有类的常量池结合成一种有效利用空间的形式。对于每个类文件(步骤806),扫描类常量池中的每一项来查找重复常量(步骤812)。参照图10,采用散列表检测重复常量。常量的散列值由一个合适的散列函数(hashing function)确定(步骤1102)。进行检查以确定该散列值是否包含在散列表中(步骤1104)。如果散列表中存在该散列值,则该常量是重复的,于是通过改变映射表中的常量项以反映已有常量的存储位置,来从常量池中删除该项(步骤1106)。否则,该常量的散列值和存储位置存入散列表(步骤1108)。
回过头来参照图8,离线式类加载器开始确定公用子字符串(commonsubstrings)。公用子字符串是作为已存储在常量池中的一个长字符串的一部分包含在其中的字符串。对于每个类文件(步骤814),扫描每个字符串以确定它是否是常量池中包含的某个长字符串的一部分(步骤816)。这可以采用几种有名的字符串匹配算法之一来完成。当找到这样一个子字符串,它就被指向较大字符串中子字符串位置的指针所取代(步骤818)。
接着离线式类加载器开始扫描包含在每个类文件中所有方法的字节码(步骤820-824)。参照图11,在字节码中查找调用接口指令(步骤1202)。具有调用接口指令的方法都标记为RAM存储器,因为被这种指令调用的方法只有运行时间才能完成(步骤1204)。否则,在字节代码中查找调用方法指令(步骤1206)。在这种情况下,向存储在常量池中的方法名加入一个指向方法块的指针518(见图5),该方法块包含要被调用的方法(步骤1208)。后面当连接器确定了所有类的存储器布局,连接器以方法的直接地址取代方法的符号引用。这是通过跟踪指向方法块的方法名指针确定的,该方法块包含指向该方法的指针。
由于每个字节码都被扫描,对每个被字节码存取的变量产生一个引用计数(步骤828)。引用计数是包含在映射表中的附加字段。这在后面将用于确定最常用常量,从而对常量池重新排序。另外,扫描每个字节码以查找被字节码改变的字段。这可以通过检查该字段是否曾使用在一个赋值语句的左端来确定。在这种情况下,字段接受一个新值。如果被改变的字段将其值存入字段块,那么整个字段块都标记为RAM存储器(步骤830)。
一旦为通用常量池分配了空间,来自不同类常量池的项都合并入通用常量池中(步骤902)。如前所述,常量池分成两段。第一段最多可容纳256个最常引用的常量。第二段容纳其余的常量。不曾被引用的常量被删除,且不存储在通用常量池中。由于映射表具有引用计数,具有被删除的重复项,且具有指向公用子字符串的指针,所以常量池项从每个类的映射表读取。
一旦形成了通用常量池,引用存储在通用常量池第二段中的常量的字节码需要一个双长度偏移量值,它占据了两个字节而不是一个来引用该常量。这要求扫描每个字节码以查找每个类的方法(步骤906-908),并且对于每个引用通用常量池第二段中一个常量的字节码,以一个双字节偏移量取代单字节偏移量以寻址该常量(步骤910)。这可以通过为存储该字节码而分配另一个数据区来实现。随着字节码被扫描,它们被读入新数据区并且任何要求用双字节偏移量取代的单字节偏移量在此拷贝过程中被取代。然后方法块被更新以反映字节码新的存储位置。表示分支指令的字节码的偏移量操作数按照在分支字节码和分支目标字节码之间位置加入的字节数(如果有)进行调整。
类似地,如果类文件中的任何方法引用常量池第二段中的常量,每个类文件的异常表都需要调整。常量池第二段中被调整的引用常量的指令将会比以前占用更多的空间,因此影响到异常表中的偏移量。被双长度常量池偏移量的插入影响的修正过的起始与结束偏移置以及处理程序的偏移量都将被计算并存入异常表中(步骤916-918)。
接着,产生一种处理静态类初始化的新方法。通常情况下,当一个类被动态加载后,同时运行一个类初始化器来初始化与该类相关的某些变量等。由于这些类被预加载到在此描述的方法和系统中,所以将不进行类初始化。因此,离线式类加载器需要创建一个方法,该方法将对预加载的类进行类初始化。然而,为了确定每个类初始化器的执行顺序,先执行数据流分析(步骤920-924)。由于一个类可能用到在另一个类中初始化的数据,因此这个顺序是重要的。如果不保持正确的顺序,静态类初始化器将产生错误的结果。一旦确定了顺序,将产生一个新的方法,该方法将按照类被预加载的顺序对每个类进行初始化(步骤926)。
然后在类块结构中插入连接指示器(linkage indicator)以标志哪些方法和字段块将被存入随机存取存储器。连接器利用这些信息为将被存入随机存取存储器的方法和字段块生成一个分离的地址空间。连接器可以认为没有指示器意味着方法和字段将被存入只读存储器。另一种可能的选择是,一个附加的指示器可用来显式地指示那些将被存入只读存储器的方法、类数据结构和字段(步骤928)。
最后,离线式类加载器输出通用常量池、一个包含类数据结构和指明存储器要求的指示器的更新的类文件,以及一个特殊的引导时间启动器(boottime initiator)(步骤930)。
参照图12,可预加载的可执行模块和引导时间启动器1220永久性地存储在客户机的只读存储器中。每一次客户机上电或重新启动时,都将自动执行引导时间启动器。在其它任务中,引导时间启动器将那些在执行过程中必须驻留在随机存取存储器中的方法和数据,拷贝到随机存取存储器中由连接器程序指定的位置。
虽然前述系统和方法是按照执行Java浏览器和支持程序用于在Internet上访问HTML文档来描述的,但此处描述的方法和系统可应用于任何Java应用程序。而且,Java应用程序不必运行于分布式环境中,它可以以独立模式(stand-alone mode)运行于客户机或服务器计算机上,而不从外部系统输入新的类。在独立模式中,应用程序为满足特殊计算环境的存储器限制被分成两个地址空间。
虽然此处描述的方法和系统是参考Java编程语言描述的,但它也可用于其它采用面向对象的类的计算机系统,这些类使用动态运行时间加载。
进而,上述方法和系统可以在多种类型的可执行媒体上执行,而不仅限于如随机存取存储器这样的存储设备。也可采用其它类型的可执行媒介,例如计算机可读存储介质,它可以是任何存储器设备、光盘和软磁盘,但也不局限于此。
本发明由所附的权利要求的全部等价的保护范围明确定义。

Claims (4)

1.一种操作一台分布式计算机系统中的计算机的方法,所述方法包括如下步骤:
在存储器中存储多个类,每个类包括数据和至少一个方法,每个方法包括多个字节码,所述字节码的一个子集包括对所述计算机可存取的方法的符号引用;
如果所述类数据可被所述类方法之一修改,则对于每个所述类标记所述类数据;
将每个对存储在所述存储器中的一指定方法的所述符号引用,用所述指定方法的存储位置来替换;
如果所述方法的字节码之一包括对一个不存储在所述存储器中的方法的符号引用,则对于每个所述类的每个所述方法,标记所述方法;以及
提供一个包括每个所述类的可执行模块,在执行所述可执行模块时,每个未标记的方法和每个未标记的数据将被存入只读存储介质中,并且在执行所述可执行模块时,每个所述标记的方法和每个所述标记的数据将被存入可读可写的存储介质中。
2.一种操作一个计算机系统的方法,所述方法包括如下步骤:
在只读存储器设备中存储被分成第一子模块和第二子模块的浏览器模块,每个子模块包括多个指令和数据,所述第二子模块有一个所述指令的子集和一个所述数据的子集,所述指令子集和数据子集包括在所述多个指令执行过程中可修改的指令和数据;
在计算机系统启动时,将第二子模块存储到随机存取存储器设备中;以及
执行浏览器模块以输入信息内容数据和计算机可执行模块,所述输入数据和所述计算机可执行模块存储在随机存取存储器设备中。
3.在一个具有用通信链路连接起来的多个计算机的分布式数据处理系统中,所述计算机之一包括:
存储多个类的存储器,每个所述类包括多个数据和至少一个方法,每个所述方法包括多个字节码,第一组所述字节码引用存储在存储器中方法,第二组所述字节码引用可通过所述通信链路访问的方法;
离线式类加载器,当类数据可以被所述类方法之一修改时,对每个类标记所述类数据,在所述方法的字节码之一包括对不存储在所述存储器中的方法的符号引用时,对每个所述类的每个所述方法,标记所述方法;
产生可执行模块的连接器,具有第一部分和第二部分,第一部分包括每个被所述离线式类加载器标记的所述类方法和所述数据,而第二部分包括每个不在所述第一部分的所述类方法和所述数据。
4.如权利要求3所述的计算机,其中
当可执行模块被执行时,所述可执行模块的所述第一部分被设置为存入可读可写的介质,当所述可执行模块被执行时,所述第二部分被设置为存入只读存储介质。
CN97112905A 1996-05-30 1997-05-29 计算机系统及其操作方法和控制装置 Expired - Lifetime CN1114155C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US655,474 1996-05-30
US08/655,474 US5815718A (en) 1996-05-30 1996-05-30 Method and system for loading classes in read-only memory
US655474 1996-05-30

Publications (2)

Publication Number Publication Date
CN1172303A true CN1172303A (zh) 1998-02-04
CN1114155C CN1114155C (zh) 2003-07-09

Family

ID=24629025

Family Applications (1)

Application Number Title Priority Date Filing Date
CN97112905A Expired - Lifetime CN1114155C (zh) 1996-05-30 1997-05-29 计算机系统及其操作方法和控制装置

Country Status (8)

Country Link
US (4) US5815718A (zh)
EP (2) EP1098247B1 (zh)
JP (1) JP4021520B2 (zh)
KR (1) KR100450312B1 (zh)
CN (1) CN1114155C (zh)
DE (2) DE69707752T2 (zh)
SG (1) SG76513A1 (zh)
TW (1) TW363167B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1300681C (zh) * 2003-02-07 2007-02-14 三星电子株式会社 用于缩短java程序中的类加载处理的系统和方法
CN112559073A (zh) * 2020-12-16 2021-03-26 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
CN117234590A (zh) * 2023-08-02 2023-12-15 北京握奇数据股份有限公司 指令集生成方法、装置、介质及设备

Families Citing this family (153)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US6473768B1 (en) * 1996-11-12 2002-10-29 Computer Associates Think, Inc. System and method for modifying an executing application
US6003038A (en) * 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method
US5974428A (en) * 1997-08-29 1999-10-26 International Business Machines Corporation Method and apparatus for class version naming and mapping
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6026237A (en) * 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files
US5953526A (en) * 1997-11-10 1999-09-14 Internatinal Business Machines Corp. Object oriented programming system with displayable natural language documentation through dual translation of program source code
US6272673B1 (en) * 1997-11-25 2001-08-07 Alphablox Corporation Mechanism for automatically establishing connections between executable components of a hypertext-based application
US5995975A (en) * 1997-11-25 1999-11-30 International Business Machines Corporation Dictionary based process for object containment
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
DE19810675A1 (de) * 1998-03-12 1999-10-14 Giesecke & Devrient Gmbh Datenträger
US6199196B1 (en) * 1998-03-20 2001-03-06 Sun Microsystems, Inc. Methods and apparatus for linking a program for remote execution
US6658492B1 (en) * 1998-03-20 2003-12-02 Sun Microsystems, Inc. System and method for reducing the footprint of preloaded classes
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
HUP0101368A3 (en) * 1998-03-23 2004-04-28 Ibm Java runtime system with modified constant pool
US6061520A (en) * 1998-04-07 2000-05-09 Sun Microsystems, Inc. Method and system for performing static initialization
US7089331B1 (en) * 1998-05-29 2006-08-08 Oracle International Corporation Method and mechanism for reducing client-side memory footprint of transmitted data
JP4026940B2 (ja) * 1998-07-22 2007-12-26 松下電器産業株式会社 プログラム変換装置
US6374266B1 (en) * 1998-07-28 2002-04-16 Ralph Shnelvar Method and apparatus for storing information in a data processing system
US6430569B1 (en) 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US8434099B2 (en) 1998-09-09 2013-04-30 Microsoft Corporation Efficient linking and loading for late binding and platform retargeting
US7143421B2 (en) * 1998-09-09 2006-11-28 Microsoft Corporation Highly componentized system architecture with a demand-loading namespace and programming model
US6446084B1 (en) 1998-09-22 2002-09-03 Sun Microsystems, Inc. Optimizing symbol table lookups in platform-independent virtual machines
US6631515B1 (en) 1998-09-24 2003-10-07 International Business Machines Corporation Method and apparatus to reduce code size and runtime in a Java environment
JP2000122876A (ja) * 1998-10-16 2000-04-28 Matsushita Electric Ind Co Ltd 情報処理装置
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming
JP2000148503A (ja) * 1998-11-10 2000-05-30 Mitsubishi Electric Corp 動的モジュール構成方式及び動的モジュール構成方法及びデバイス
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
US6305012B1 (en) * 1998-12-03 2001-10-16 International Business Machines Corporation Method and apparatus for dynamic selection of instructions for compiling using tags
US6338160B1 (en) * 1998-12-08 2002-01-08 Nazomi Communications, Inc. Constant pool reference resolution method
US6624761B2 (en) 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6848111B1 (en) 1999-02-02 2005-01-25 Sun Microsystems, Inc. Zero overhead exception handling
US6637023B1 (en) * 1999-03-03 2003-10-21 Microsoft Corporation Method and system for updating read-only software modules
US7195661B2 (en) * 1999-03-05 2007-03-27 Pioneer Metals And Technology, Inc. Magnetic material
US6601104B1 (en) 1999-03-11 2003-07-29 Realtime Data Llc System and methods for accelerated data storage and retrieval
CA2267539C (en) * 1999-03-30 2004-04-13 Object Technology International Inc. Access to resource files stored in rom
US6845498B1 (en) * 1999-05-11 2005-01-18 Microsoft Corporation Method and apparatus for sharing data files among run time environment applets in an integrated circuit card
US6601114B1 (en) * 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
US6766521B1 (en) 1999-05-27 2004-07-20 Sun Microsystems, Inc. Dataflow algorithm for symbolic computation of lowest upper bound type
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6763397B1 (en) 1999-05-27 2004-07-13 Sun Microsystems, Inc. Fully lazy linking
JP3531536B2 (ja) * 1999-05-28 2004-05-31 日本電気株式会社 抽象構文記法を用いたデータ構造定義における型情報の動的割り当て方法
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6968549B1 (en) * 1999-07-02 2005-11-22 Beryl Technical Assays Llc Method and system for dynamically loading data structures into memory with global constant pool
US6460136B1 (en) * 1999-07-12 2002-10-01 Hewlett-Packard Co., Method and apparatus for loading an operating system kernel from a shared disk memory
US7257812B1 (en) 1999-12-16 2007-08-14 Sun Microsystems, Inc. Methods and apparatus for managing an application
US6874145B1 (en) 1999-07-13 2005-03-29 Sun Microsystems, Inc. Methods and apparatus for implementing an application lifecycle design for applications
US6701334B1 (en) * 1999-07-13 2004-03-02 Sun Microsystems, Inc. Methods and apparatus for implementing individual class loaders
US6584612B1 (en) * 1999-07-15 2003-06-24 International Business Machines Corporation Transparent loading of resources from read-only memory for an application program
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US7076788B1 (en) * 1999-11-01 2006-07-11 Nokia Networks Oy Method for describing software architecture
US20010042241A1 (en) * 2000-01-21 2001-11-15 Fujitsu Limited Apparatus and method for executing program using just-in time-compiler system
AU2001239492A1 (en) * 2000-02-07 2001-08-14 Insignia Solutions Plc Global constant pool to allow deletion of constant pool entries
DE60142136D1 (de) * 2000-02-21 2010-07-01 Panasonic Corp Linken von Java class files für eingebettete Geräte
US6813762B1 (en) * 2000-02-22 2004-11-02 Freescale Semiconductor, Inc. Method for processing program files in a programming language capable of dynamic loading
US7389284B1 (en) 2000-02-29 2008-06-17 Oracle International Corporation Method and mechanism for efficient processing of remote-mapped queries
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US6745386B1 (en) * 2000-03-09 2004-06-01 Sun Microsystems, Inc. System and method for preloading classes in a data processing device that does not have a virtual memory manager
JP2001256058A (ja) * 2000-03-13 2001-09-21 Omron Corp インタプリタ型言語によるプログラムの実行方法およびその方法を用いた情報処理装置
WO2001071494A2 (en) * 2000-03-20 2001-09-27 Koninklijke Philips Electronics N.V. Method of executing a computer program with an interpreter, computer system and computer program product
US20020087958A1 (en) * 2000-04-20 2002-07-04 International Business Machines Corporation Method and apparatus of transforming a class
US6675375B1 (en) * 2000-04-28 2004-01-06 Sun Microsystems, Inc. Method and apparatus for optimized multiprocessing in a safe language
WO2001097013A2 (fr) * 2000-06-15 2001-12-20 Canal + Technologies Procede de gestion de classes pour un langage de programmation oriente objet a resolution dynamique et outil de generation des structures natives depuis les binaires java mettant en oeuvre ce procede
US6918106B1 (en) * 2000-07-31 2005-07-12 Sun Microsystems, Inc. Method and apparatus for collocating dynamically loaded program files
WO2002017553A2 (en) * 2000-08-18 2002-02-28 United States Postal Service Apparatus and methods for the secure transfer of electronic data
US7302582B2 (en) 2000-08-21 2007-11-27 United States Postal Service Delivery point validation system
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
US9143546B2 (en) 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US8692695B2 (en) 2000-10-03 2014-04-08 Realtime Data, Llc Methods for encoding and decoding data
US6968540B2 (en) * 2000-10-25 2005-11-22 Opnet Technologies Inc. Software instrumentation method and apparatus
US6901591B1 (en) * 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6978456B1 (en) * 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
EP1207454A1 (en) * 2000-11-15 2002-05-22 International Business Machines Corporation Java run-time system with modified linking identifiers
AU2002241507A1 (en) * 2000-11-20 2002-06-24 Zucotto Wireless, Inc. System registers for an object-oriented processor
US7107537B2 (en) * 2001-01-16 2006-09-12 Hewlett-Packard Development Company, L.P. Apparatus and method for updating applications to embedded devices and peripherals within a network environment
US7386046B2 (en) 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
EP1374046B1 (en) * 2001-02-23 2012-02-22 Microsoft Corporation System and method for transforming object code
US20020170047A1 (en) * 2001-02-23 2002-11-14 Brian Swetland System and method for transforming object code
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US6957428B2 (en) * 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7543288B2 (en) * 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
CA2448962C (en) * 2001-05-30 2009-10-06 Research In Motion Limited A mobile communications device application processing system
US6748396B2 (en) 2001-06-01 2004-06-08 International Business Machines Corporation Independent class loader for dynamic class loading
US6901589B2 (en) * 2001-06-25 2005-05-31 Wind River Systems, Inc. System and method for determining a root cause of a failure
WO2003009140A2 (en) * 2001-07-20 2003-01-30 Altaworks Corporation System and method for adaptive threshold determination for performance metrics
US7103590B1 (en) * 2001-08-24 2006-09-05 Oracle International Corporation Method and system for pipelined database table functions
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7219034B2 (en) 2001-09-13 2007-05-15 Opnet Technologies, Inc. System and methods for display of time-series data distribution
US7213240B2 (en) * 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
US6976254B2 (en) 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
EP1324221A3 (en) * 2001-12-21 2003-12-03 Sap Ag Storing data objects either in database or in archive
US7114152B2 (en) * 2002-01-08 2006-09-26 International Business Machines Corporation Method, apparatus, and program to determine the mutability of an object at loading time
US7664731B2 (en) * 2002-03-21 2010-02-16 United States Postal Service Method and system for storing and retrieving data using hash-accessed multiple data stores
AU2003213722A1 (en) * 2002-03-21 2003-10-08 David J. Payne Method and system for storing and retrieving data using hash-accessed multiple data stores
US7272827B2 (en) * 2002-04-03 2007-09-18 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
US6973457B1 (en) 2002-05-10 2005-12-06 Oracle International Corporation Method and system for scrollable cursors
US7610351B1 (en) 2002-05-10 2009-10-27 Oracle International Corporation Method and mechanism for pipelined prefetching
US7246347B1 (en) * 2002-06-26 2007-07-17 Sun Microsystems, Inc Method and apparatus for loading class files into non-volatile memory
US7159119B2 (en) 2002-09-06 2007-01-02 United States Postal Service Method and system for efficiently retrieving secured data by securely pre-processing provided access information
WO2004023711A1 (en) * 2002-09-06 2004-03-18 United States Postal Service Method and system for efficiently retrieving secured data by securely pre-processing provided access information
US7051323B2 (en) * 2002-10-08 2006-05-23 Sun Microsystems, Inc. Method and apparatus for initializing romized system classes at virtual machine build time
US7093243B2 (en) * 2002-10-09 2006-08-15 International Business Machines Corporation Software mechanism for efficient compiling and loading of java server pages (JSPs)
US7055145B2 (en) * 2002-10-30 2006-05-30 Intel Corporation Dynamic management of execute in place applications
US20040123270A1 (en) * 2002-12-23 2004-06-24 Motorola, Inc. Method and apparatus for shared libraries on mobile devices
US7073171B2 (en) * 2003-02-28 2006-07-04 Bea Systems, Inc. EJB implementation class loading with removed dependencies with ability to replace EJB implementation class without full redeployment
DE10310290A1 (de) * 2003-03-10 2004-09-23 Robert Bosch Gmbh Rechenvorrichtung
US7143398B2 (en) * 2003-03-13 2006-11-28 Che-An Chang Application infa operating system
US7328432B2 (en) * 2003-06-02 2008-02-05 Sun Microsystems, Inc. Proximity-based addressing for supporting in-place execution in virtual machines
US7411956B2 (en) * 2003-06-05 2008-08-12 International Business Machines Corporation Methods and apparatus for routing packets
US7248895B2 (en) * 2003-06-12 2007-07-24 Nokia Corporation Controlling settings for mobile telecommunications apparatus
FR2862395B1 (fr) * 2003-11-14 2006-12-15 Trusted Logic Procede pour l'amelioration de l'efficacite et de la consommation memoire d'un systeme informatique
US20050261857A1 (en) * 2004-05-21 2005-11-24 Clark Jones System and method for linking and loading compiled pattern data
WO2005114492A2 (en) * 2004-05-21 2005-12-01 Computer Associates Think, Inc. Method and apparatus for loading data into an alternate evaluator for directory operations
US7574705B2 (en) * 2004-06-29 2009-08-11 Sun Microsystems, Inc. Method and apparatus for efficiently resolving symbolic references in a virtual machine
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
US20060075394A1 (en) * 2004-10-01 2006-04-06 Tatsuya Iwamoto Dynamic loading and unloading for processing unit
US7444629B2 (en) * 2004-11-12 2008-10-28 International Business Machines Corporation Autonomic self-healing of java resources
US20060123397A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US7801925B2 (en) 2004-12-22 2010-09-21 United States Postal Service System and method for electronically processing address information
FR2883390A1 (fr) * 2005-03-15 2006-09-22 Gemplus Sa Gestion du placement de structure de donnees en memoire basee sur une langage de programmation dedie
US8165909B2 (en) 2005-05-17 2012-04-24 The United States Postal Service System and method for automated management of an address database
US20060288336A1 (en) * 2005-06-21 2006-12-21 Microsoft Corporation Module initialization
US7698685B2 (en) * 2005-10-12 2010-04-13 Microsoft Corporation Discovery, qualification, and activation of software add-in components
US8042103B2 (en) * 2005-11-29 2011-10-18 International Business Machines Corporation Pre-translated files used in a virtual machine
US20070169028A1 (en) * 2005-12-15 2007-07-19 Glenn Kasten Partitioning of non-volatile memories for vectorization
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US8250559B2 (en) * 2006-04-12 2012-08-21 Oracle America, Inc. Supporting per-program classpaths with class sharing in a multi-tasking virtual machine
US7882198B2 (en) 2007-07-02 2011-02-01 Oracle America, Inc. Shared JAVA JAR files
US20090070752A1 (en) * 2007-09-06 2009-03-12 International Business Machines Corporation Method and system for optimization of an application
US8600915B2 (en) 2011-12-19 2013-12-03 Go Daddy Operating Company, LLC Systems for monitoring computer resources
US8719196B2 (en) 2011-12-19 2014-05-06 Go Daddy Operating Company, LLC Methods for monitoring computer resources using a first and second matrix, and a feature relationship tree
US9507613B2 (en) * 2012-03-30 2016-11-29 Oracle International Corporation Methods and apparatus for dynamically preloading classes
US8910138B2 (en) 2012-05-23 2014-12-09 Oracle International Corporation Hot pluggable extensions for access management system
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
US9952879B2 (en) * 2012-08-30 2018-04-24 Microsoft Technology Licensing, Llc Application pre-layout in byte-addressable persistent random access memory
US9740500B2 (en) * 2012-08-30 2017-08-22 Microsoft Technology Licensing, Llc Layout system for operating systems using BPRAM
US8938796B2 (en) 2012-09-20 2015-01-20 Paul Case, SR. Case secure computer architecture
CN103473089A (zh) * 2013-09-02 2013-12-25 深圳市华傲数据技术有限公司 一种分布式java程序运行方法、装置和系统
US10217254B2 (en) 2015-09-24 2019-02-26 Oracle International Corporation Graphical editing of memory layout rules for software programs
US10127136B2 (en) 2015-09-24 2018-11-13 Oracle International Corporation Identifying and visualizing suboptimal memory layouts in software programs
US10489130B2 (en) * 2015-09-24 2019-11-26 Oracle International Corporation Configurable memory layouts for software programs
WO2017159885A1 (ko) 2016-03-14 2017-09-21 삼성전자 주식회사 컴퓨팅 시스템, 이의 구동 방법 및 컴파일 방법
US10394528B2 (en) * 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5051893A (en) * 1988-07-11 1991-09-24 Digital Equipment Corporation System for processing data to facilitate the creation of executable images
US5355489A (en) * 1989-08-25 1994-10-11 International Business Machines Corp. Bios load for a personal computer system having a removable processor card
EP0429252B1 (en) * 1989-11-17 1998-01-14 Digital Equipment Corporation System and method for storing firmware in relocatable format
GB2242293A (en) * 1990-01-05 1991-09-25 Apple Computer Apparatus and method for dynamic linking of computer software components
US5594903A (en) * 1991-02-26 1997-01-14 Lynx Real-Time Systems, Inc. Operating System architecture with reserved memory space resident program code identified in file system name space
FR2675602B1 (fr) * 1991-04-16 1995-04-14 Hewlett Packard Co Procede et dispositif de protection d'un systeme informatique.
US5369766A (en) * 1993-03-25 1994-11-29 Taligent, Inc. Object-oriented loader system with support for different load formats
US5450489A (en) * 1993-10-29 1995-09-12 Time Warner Entertainment Co., L.P. System and method for authenticating software carriers
US5574915A (en) * 1993-12-21 1996-11-12 Taligent Object-oriented booting framework
JPH07311752A (ja) * 1994-05-11 1995-11-28 Internatl Business Mach Corp <Ibm> 分散データ処理システム及び初期プログラムロード方法
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
US5671413A (en) * 1994-10-31 1997-09-23 Intel Corporation Method and apparatus for providing basic input/output services in a computer
US5664128A (en) * 1995-02-23 1997-09-02 Apple Computer, Inc. Object storage apparatus for use with data sets in computer applications
JP3234850B2 (ja) * 1995-03-20 2001-12-04 アルプス電気株式会社 記録再生装置の立ち上げ方法
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1300681C (zh) * 2003-02-07 2007-02-14 三星电子株式会社 用于缩短java程序中的类加载处理的系统和方法
CN112559073A (zh) * 2020-12-16 2021-03-26 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
CN117234590A (zh) * 2023-08-02 2023-12-15 北京握奇数据股份有限公司 指令集生成方法、装置、介质及设备
CN117234590B (zh) * 2023-08-02 2024-03-29 北京握奇数据股份有限公司 指令集生成方法、装置、介质及设备

Also Published As

Publication number Publication date
JPH10198570A (ja) 1998-07-31
US5966542A (en) 1999-10-12
JP4021520B2 (ja) 2007-12-12
US7159213B2 (en) 2007-01-02
US5815718A (en) 1998-09-29
KR970076313A (ko) 1997-12-12
EP1098247B1 (en) 2008-02-06
EP1098247A3 (en) 2004-11-03
SG76513A1 (en) 2000-11-21
DE69738504D1 (de) 2008-03-20
DE69707752D1 (de) 2001-12-06
US20010047513A1 (en) 2001-11-29
KR100450312B1 (ko) 2004-12-09
DE69707752T2 (de) 2002-08-01
CN1114155C (zh) 2003-07-09
EP0810522A3 (en) 1998-04-15
TW363167B (en) 1999-07-01
EP1098247A2 (en) 2001-05-09
EP0810522B1 (en) 2001-10-31
EP0810522A2 (en) 1997-12-03
US6223346B1 (en) 2001-04-24

Similar Documents

Publication Publication Date Title
CN1114155C (zh) 计算机系统及其操作方法和控制装置
CN1134731C (zh) 在计算机系统中编译指令的方法
CN106663019B (zh) 处理值类型
US7543309B2 (en) Efficient linking and loading for late binding and platform retargeting
US7316010B1 (en) Methods for sharing conditionally across class loaders dynamically compiled code
EP3084596B1 (en) Executable code for constrained computing environments
US7565665B2 (en) Efficient linking and loading for late binding and platform retargeting
CN101697131B (zh) 一种可重定位文件动态加载的方法及装置
US7225439B2 (en) Combining write-barriers within an inner loop with fixed step
JP4571710B2 (ja) ディスパッチテーブル構造のための方法と装置
US7404182B1 (en) Deferring and combining write barriers for a garbage-collected heap
US8434099B2 (en) Efficient linking and loading for late binding and platform retargeting
CN1238500A (zh) 用于进行静态初始化的方法和系统
US20050015758A1 (en) Shared code caching method and apparatus for program code conversion
US7412710B2 (en) System, method, and medium for efficiently obtaining the addresses of thread-local variables
US8341609B2 (en) Code generation in the presence of paged memory
CN1955922A (zh) 用于动态提供本地库及其相关性的方法和系统
US7665075B1 (en) Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
CN1581069A (zh) 具有多位字段的寄存器的重命名
Kistler Continuous program optimization
CN1265487A (zh) 用于改进java方法调用速度的方法和装置
Jones et al. Annotating Java class files with virtual registers for performance
CN1149477C (zh) 用于在运行时提高函数的执行性能的方法和计算系统
US20040111718A1 (en) Block-offset table employing gaps in value set

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1033381

Country of ref document: HK

CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20030709