CN1172303A - 一种在只读存储器中加载类的方法及系统 - Google Patents
一种在只读存储器中加载类的方法及系统 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
- G06F9/44563—Sharing
-
- 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/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
-
- 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
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所述的计算机,其中
当可执行模块被执行时,所述可执行模块的所述第一部分被设置为存入可读可写的介质,当所述可执行模块被执行时,所述第二部分被设置为存入只读存储介质。
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)
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)
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)
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 |
-
1996
- 1996-05-30 US US08/655,474 patent/US5815718A/en not_active Expired - Lifetime
-
1997
- 1997-05-22 EP EP01200729A patent/EP1098247B1/en not_active Expired - Lifetime
- 1997-05-22 EP EP97303505A patent/EP0810522B1/en not_active Expired - Lifetime
- 1997-05-22 DE DE69707752T patent/DE69707752T2/de not_active Expired - Lifetime
- 1997-05-22 DE DE69738504T patent/DE69738504D1/de not_active Expired - Lifetime
- 1997-05-23 SG SG1997001693A patent/SG76513A1/en unknown
- 1997-05-29 CN CN97112905A patent/CN1114155C/zh not_active Expired - Lifetime
- 1997-05-30 JP JP14079397A patent/JP4021520B2/ja not_active Expired - Lifetime
- 1997-05-30 KR KR1019970022986A patent/KR100450312B1/ko active IP Right Grant
- 1997-06-16 TW TW086107577A patent/TW363167B/zh active
-
1998
- 1998-08-10 US US09/131,686 patent/US5966542A/en not_active Expired - Lifetime
-
1999
- 1999-10-12 US US09/416,285 patent/US6223346B1/en not_active Expired - Lifetime
-
2001
- 2001-04-23 US US09/840,733 patent/US7159213B2/en not_active Expired - Fee Related
Cited By (4)
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 |