CN1218245C - 用于在数据处理器中预加载类的系统和方法 - Google Patents
用于在数据处理器中预加载类的系统和方法 Download PDFInfo
- Publication number
- CN1218245C CN1218245C CN018092608A CN01809260A CN1218245C CN 1218245 C CN1218245 C CN 1218245C CN 018092608 A CN018092608 A CN 018092608A CN 01809260 A CN01809260 A CN 01809260A CN 1218245 C CN1218245 C CN 1218245C
- Authority
- CN
- China
- Prior art keywords
- resource module
- pointer
- resource
- client device
- module
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Transfer Systems (AREA)
Abstract
一种编辑系统准备用于在无虚拟存储管理器的客户端设备中预加载的指定类组。该编辑系统将指定类组转换为多个资源模块,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项。该编辑系统生成一种给客户端设备进行加载的加载模块,它包括资源模块,一个解释器和一个启动程序。当加载执行用的解释器时,启动程序由客户端设备执行。启动程序用与任一具体客户端设备资源模块实际存储器存储单元相对应的已更新的指针来替换资源模块中的指针。
Description
技术领域
本发明总体上涉及到计算机系统和执行用像Java这样的面向对象的计算机语言所编写的程序的设备;具体地涉及到一种在前述设备中预加载一组类的系统和方法。
发明背景
在执行Java程序或用其他支持运行时程序链接的面向对象语言编写的程序的计算机系统中,这组要执行的计算机程序是在运行时动态地确定、加载和链接的。尽管这一点很灵活,并且还可以相当容易地利用从远程计算机上下载的软件,然而支持基本数据处理操作所必须的基本类文件组的加载和链接会是很耗费时间的,并且在存储器资源方面也是高开销的,尤其是在计算能力和存储器资源方面比典型桌面计算机有限得多的小型客户端设备中。
这个问题已经在U.S.专利号5,815,718中提出,该专利权已经在1998年9月9日授予了Theron Tock并且转让给Sun Microsystems有限公司。‘718专利的重点具体在于将类文件预加载到只读存储器(ROM)中,以便用于读/写存储器资源很有限的客户端设备。这种设备使用ROM来存储其软件的重要部分。
本发明指向相关的但又稍有不同的问题,即将类文件预加载到无虚拟存储管理器的客户端设备。本发明所提出的另外一个问题是如何重新排列虚拟机(例如:Java程序的验证程序,类加载器,解释器以及关联的安全程序)的数据结构才能够使它们在任一数据结构的最大容量受限制的客户端设备上执行。例如,资源的最大容量可能是64K字节。
发明概述
一种编辑系统准备用于在无虚拟存储管理器的客户端设备中预加载的指定类组。该编辑系统将指定类组转换为多个资源模块,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项。该编辑系统生成一种给客户端设备进行加载的加载模块,它包括资源模块、一个解释器和一个启动程序。解释器用于执行客户端设备中用预先规定的计算机语言编写的程序。指定类组包含用预先规定的计算机语言编写的方法。当为了执行而使解释器加载时,启动程序由客户端设备执行。启动程序用与任一具体客户端设备资源模块实际存储器存储单元相对应的已更新的指针来替换资源模块中的指针。
本发明的另外一个方面是客户端设备,它包括一个数据处理单元,一个用户接口,用于存储其中无虚拟存储管理器的操作系统的存储器以及前述的资源模块、解释器和启动程序。
在本发明的实施方案中,资源模块包含一个类表资源模块、一个方法表资源模块、一个域表资源模块、一个常量池资源模块以及一个字符串资源模块。类数据结构包括指向方法表、域表和常量池资源模块中数据项的指针;域表资源模块包括指向字符串资源模块中数据项的指针;常量池资源模块包括指向域表资源模块中数据项和字符串资源模块中数据项的指针。
在本发明的实施方案中,启动程序包括这样的指令,这些指令将子集中至少两个资源模块中的每一个的第一个数据结构定位到任一特定客户端设备中0模4地址处。
在本发明的实施方案中,资源模块包括一个目录表,它指示资源模块第二子集中每一个的存储器地址,第二子集包括那些被资源模块中的至少一个指针所指向的资源模块。启动程序包括这样的指令,这些指令(A)确定第二子集中每个资源模块的当前存储器地址,确定第二子集中每个资源模块的差值,它相当于当前存储器地址和目录表中所指示的存储器地址的差,以及(B)根据差值调整资源模块中各指针的至少一个子集。
在本发明的实施方案中,资源模块包括一个带有指向指定类组方法代码的指针的方法表模块,以及方法表中指针的一个子集指向已编译解释器中的本机方法。
附图简述
本发明另外的目的和特点通过下列详述与所附的权利要求并结合附图将会更加清晰,在附图中:
图1是Java虚拟机(JVM)编辑系统的块图。
图2是客户端设备的块,被预加载的类组和JVM在其中一起被执行。
图3是客户端设备的存储器映像。
图4绘制了一个类文件的数据结构。
图5是一个过程流程图,它用于生成供客户端设备中JVM所用的预加载的类组。
图6绘制了本机方法表的数据结构。
图7绘制了加载模块,也叫做资源模块组。
图8绘制了目录表数据结构,它用于存储关于资源模块的信息。
图9绘制了UTF字符串表数据结构,图9B和9C绘制了暂留字符串表数据结构。
图10和11绘制了类表数据结构。
图12绘制了方法表,代码块和异常表数据结构。
图13绘制了域表数据结构。
图14绘制了常量池数据结构。
图15是用概念表示的过程,它用于调整资源中第一个数据结构的存储单元以使其落在0模4的地址。
图16A和16B是JVM启动程序的流程图。
优选实施方案说明
参阅图1和2,它们表示了一个分布式计算机系统100,它含有客户端设备102、至少一个服务器计算机104、一个编辑系统106和一个或多个通信网络或将各种客户端设备102、服务器计算机104和编辑系统106互联起来的网络互联108。客户端设备102可以包括多种类型的计算机和受控于计算机的设备,像个人数字助理(PDA)那样的手持式设备、嵌入式设备、桌面计算机等等。服务器计算机104存储文档和可由客户端设备访问的可下载的小应用程序110。
在服务器和客户端设备之间的通信网络或互联设备108可以简单到一根串行电缆或红外串行互联设备,或可以包含一个局域网或因特网互联设备。
在优选实施方案中,至少一些客户端设备102要被配置为可以执行Java(Sun Microsystems公司的一种商标)语言程序和小应用程序,这些程序的执行要使用一种名为Java虚拟机(JVM)112(Sun Microsystems公司的一种商标)的程序解释器。这种实施方案所用的JVM112是Java虚拟机的一种专用版本(有时称为”KVM",表示它供小型设备使用),它被设计为由操作系统中无虚拟存储管理器的客户端设备来执行,而且其中由任何执行程序所用的活动存储器的大小受到限制。
编辑系统106的任务是生成一组预加载的类文件,以用于其操作系统中无虚拟存储管理器的客户端设备,而且其中由任何执行程序所用的活动存储器的尺寸受到限制。在本文的剩余部分,术语″客户端设备″将仅用于指编辑系统106为其生成预加载的类组的客户端设备。其他类型的客户端设备不是本文档的主题。
编辑系统106的另一个任务是生成一个JVM启动程序114,每当要加载用于执行Java程序或小应用程序的JVM时,它总要被客户端设备执行。
JVM编辑系统概述
JVM编辑系统106可以是一个典型的计算机工作站,它含有一个或多个数据处理单元(CPU’s)120、一个用户接口122、存储器124、一个用于通过网络108与其他设备进行通信的网络通信接口126以及一个或多个用于将系统106的各种部件互联起来的内部总线128。存储器124典型地包括高速随机访问存储器(RAM)和像硬磁盘存储设备等的非易失性存储器。
在优选实施方案中,存储器124用于存储:
·一组操作系统程序130,用于完成基本的系统功能;
·网络访问或通信程序132,用于处理与其他计算机和设备间的通信;(如上面所示,这可以是一个简单的串行链接通信程序,或可以是一个完全的网络链接程序);
·源代码仓库134,用于存储程序的源代码,它包括JVM的源代码136和JVM启动程序的源代码138;
·类文件仓库140,用于存储Java语言程序,它包括类文件142和类库144;
·离线类加载器150,它是用在本优选实施方案中的一种工具,目的是将一组类文件预加载到客户端设备中,具体地讲就是生成一个含有C语言程序的JVM离线类文件152;
·本地编译器154,例如C编译器,用于将JVM离线类文件152编译为可执行文件;
·程序执行器156,用于执行由本地编译器154生成的文件,目的是生成一组资源文件158,其实质在后面将会有更详细的解释;
·客户端设备编译器160,用于将程序编译为适合客户端设备执行的本机代码;
·加载模块162,用于将数据加载到客户端设备102中;加载模块包含表示一组被预加载的类文件的一组资源文件;
·供客户端设备来执行的已编译的JVM程序164;以及
·供客户端设备来执行的已编译的JVM启动程序166。
前面所提到的许多文件和程序的源、功能和结构将在文档标题为“预加载类文件的生成过程”的章节有更详细的描述。
客户端设备概述
客户端设备102例如,可以是手持式个人数字助理,像3COM(Palm事业部)所出品的设备Palm(3COM的商标)和其他使用PalmOS操作系统的设备。尽管Palm有许多版本,它们在存储器容量数目有所不同,但是这里所描述的Palm的基本特点及其局限性,仍然适用于这种产品系列的到2000年的第一个季度为止的所有版本。
客户端设备102典型地有一个数据处理单元(CPU)220、一个用户接口222、存储器224、一个用于通过网络或其他通信介质108与其它设备(例如服务器104)进行通信的通信接口226,例如网络或串行或IR通信接口等),以及一个或多个用于将客户端设备102的各种部件互联起来的内部总线228。存储器224典型地包括高速动态随机访问存储器(DRAM)和/或静态随机访问存储器。
在优选实施方案中,存储器224用于存储:
·一组操作系统程序(例如,PalmOS)230,用于完成基本的系统功能;
·网络访问程序232,用于处理与其他计算机和设备的通信;
·加载模块162,它由JVM编辑系统生成;
·Java虚拟机(JVM)112,它是一个已编译为客户端设备的本机代码的程序;
·JVM启动程序114,它用来为JVM的执行作准备,并且因为客户端设备无虚拟存储管理器,它还要用于作修正;
·JVM资源234,它表示不需要经过类验证和加载步骤而已准备就绪由JVM所执行的预加载的类文件;
·类仓库240,用于存储Java语言程序,包括从服务器104下载的类文件242;
·应用程序252,它调用JVM112,例如为了执行游戏程序或用Java语言编写的任何其他类型的程序;
·其他应用程序254,例如地址本应用程序,日历应用程序等等;
·程序执行器256,用于执行JVM112,JVM启动程序114,和应用程序252,254;以及
·数据文件70。
应用程序252典型地不是包含JVM和JVM资源的加载模块的一部分。也就是说,调用JVM的应用程序252典型地被单独加载到客户端设备中。
在一些实施方案中,应用程序252可以是一个浏览器应用程序,它包括用于从远程计算机例如服务器104上下载HTIML文档262并将其存储到存储器224的HTML文档仓库260中的指令。浏览器典型地是一个已编译成客户端设备本机代码的应用程序,但是在候选的实施方案中,浏览器可以作为Java字节码程序来实现,它包含于加载模块162的预加载的类中。下载的文档可以包括已经将引用(例如,HTML对象标记或小应用程序标记)嵌入到可由JVM112执行的小应用程序中的文档,而浏览器应用程序包括用于在用户接口222的显示器上显示文档的指令,包括通过在其中执行一个或多个小应用程序而生成的任何图象。
预加载类文件的生成过程
图3所示为客户端设备的存储器映像。按照图所示,设备存储器的第一部分280是为操作系统而保留的。第二部分在Palm中的大小在64K字节到256K字节之间,这取决于设备中PalmOS的版本,它叫做活动存储器(或也可叫做动态存储器)用于执行应用程序。设备存储器的剩余部分284叫做静态存储器,用于存储文件、数据库表和不活动的应用程序。存储器不同部分280、282、284的地址范围可按如图3所示的有所差异。例如,操作系统部分可以放在地址最高端,而不是放在图3所示的地址最低端。在应用程序执行过程中,其代码正常情况下位于静态存储器284中(作为一个或多个代码资源),而活动存储器282用来存储应用程序所用的变量和临时数据结构。
PalmOS支持两种类型的数据库:记录数据库和资源数据库。在一个记录数据库中,例如一个用于存储地址本应用程序地址的数据库,每个数据库项是一个单条记录。应用程序和库是资源数据库的实例。在PalmOS中每个记录和资源的大小被限制在64K字节。在另一方面,存储在PalmOS的″文件″可以包含多条记录和资源而且其大小可以超过64K字节
如图4所示,一个Java类文件142的主要部件包括头292、常量池294、一组方法296(它组成了类的可执行程序)和异常表298(它表示当某个意料之外的条件出现时需要执行的代码)。
图5以原理方式描绘了生成被预加载类文件的过程300的步骤。预加载的类文件,一旦被安装到客户端设备上,不用进行验证和加载,就可以立即被客户端设备中的JVM执行。通过预加载一组类文件,由于可以将被预加载的类基本上全部存储在客户端设备的静态存储器中,所以就使得客户端设备的JVM的启动时间明显缩短,并且也使得JVM对活动(也叫做动态)存储器的需求量明显减少。
作为第一步,它不一定要由编辑系统执行,每个类方法的Java源代码302通过Java编译器304被编译成类文件142。"编译器″304与常规编译器的不同点在于,作为结果的代码并不是针对某个具体处理器的对象代码,而是由叫做方法的Java字节码程序组成,它们一起形成了对象类的方法。Java编译器和Java类文件是众所周知的,已经被广泛的使用,因此这里就不需要作详细的论述了。所必须提到的是预加载到Java虚拟机的基本类组在本发明开发之前早已被很好地建立了,因此要被预加载的类文件组142除了本编辑系统之外也可以方便地从某个源中得到。
离线类加载器150获得一组类文件142而且可以自动从那些类文件生成一个C语言程序152,当被执行时,它建立一组用于加载到客户端设备的文件158(叫做资源模块)。当然,程序152能够用任何其它语言来编写,包括Java,Pascal以及C++,因此用于编写程序152的计算机语言并不是很关键的。更重要的是在建立文件158时,要使用程序152而不是直接生成该程序,这样作是因为文件158含有几千个指针,如果用手来计算将不仅很困难,而且每当改变类文件142或文件158的数据结构时,它们的值就都会改变。例如,如果为了使文件158中数据结构所表示的方法在被客户端设备执行时更加有效而执行了新的优化,那么许多或全部指针都将必须重新计算。通过把指针转换为程序语句,所有的指针值就会自动被用于编译程序152的编译器154所解析。
程序152的内容和结构将通过解释由程序152所生成的资源文件158的内容和结构以间接方式来解释。然而,在很大程度上,程序152包括一组数据结构语句,它包括要包含于预加载类组中每个类文件的信息。在许多数据结构语句中的元素包括对其他数据结构元素的引用,并且这些引用是指通过编译器154所解析的指针。
编译器将程序152编译成一个这里叫做JVM离线类文件的程序。程序执行器执行JVM离线类文件156,它产生一组这里叫做资源模块158的文件。由于文件数目没有特定的含义,所以资源模块158可以存储在一个或多个文件中。然而,从逻辑上看,资源模块却包括了几个截然不同的模块,每一个模块都将被单独论述并且在实际上是作为单独资源将被存储在客户端设备中。
下一步,客户端设备的编译器160用于编译几组程序136,136,312以便生成将被加载到客户端设备的程序和数据结构。在一种实施方案中,编译器160是一种用于客户端设备的C语言编译器,它生成可由客户端设备执行的本机对象代码。要编译的程序包括用于Java虚拟机的代码136,它包括一组子程序,如程序验证器、类加载器、程序解释器等以及其他子程序。用于Java虚拟机的代码136也包括一组50个左右″本机方法″,它们是用于完成硬件的特定操作的方法,例如输入/输出操作,它们必须由客户端设备使用本机对象代码来执行。
另一个由编译器160编译的程序是JVM启动程序138,它是一个特殊的程序,用于确定在JVM被执行时资源模块的当前存储单元,解析和更新资源模块中的所有指针从而就可以使它们指向存储器中的正确的存储单元。存储资源模块的物理存储器的存储单元在JVM的一次执行和下一次执行时可能会改变,并且因为客户端设备没有虚拟存储器管理器,所以JVM启动程序138就被用于更新资源模块中的所有绝对地址指针以确定资源模块的当前存储单元。
由编译器160编译的另一个数据结构是程序312,它定义了一个叫做本机方法表的数据结构。本机方法表程序312由离线类加载器150生成,它包括含有两个列的数据结构320(图6),一列用于指示方法表数据结构的偏移量,将在下面描述,另一列用于指示与客户端设备存储器中的本机方法相对应的存储器存储单元。编译器160解析本机方法的存储单元并且将它们存储在作为结果的本机方法表320(图6)中,它作为一个单独编译的程序来处理。更加具体地讲,通过编译器160,本机方法表320就包含在和一组JVM代码资源132关联的″数据资源″168中;数据资源168包括所有的已编译的JVM和启动程序所使用的变量。
资源模块158不由编译器160编译。更确切地讲,通过使用一个伪指令到作为编译器160的一部分的链接器,它们就被“包含”于由编译器160所生成的模块中。由编译器160生成的模块包括用于客户端设备的加载模块162(它基本上包括资源模块158),一组JVM代码资源163,它一起包括了所有用于JVM的已编译的代码164和用于JVM启动程序的已编译的代码166,以及一个关联的JVM数据结构资源168,它包括已编译的本机方法表320。因为JVM程序的整个大小超过了资源容量的限值,所以JVM程序断开为一组代码资源(其每一个大小均小于64K字节)。
资源模块和关键数据结构
参照图7、8、9A-9C和10-15,资源模块162,158的内容和结构将在下一部分论述。主资源模块,其中每个大小都小于客户端设备资源的容量限值(例如,64K字节),包括:
·目录表350,用于跟踪其他模块的客户端存储器的存储单元;
·暂留字符串表352,用于存储Java字符串对象;
·UTF字符串表354,用于存储长度可变字符串(UTF字符串);
·类表356,用于存储预加载的类的信息;
·方法表358,用于存储关于预加载的类方法的信息;
·域表360,用于存储关于预加载的类的域信息;
·常量池362,用于存储常量数字值以及指向预加载的类的方法所用的域,方法和暂留字符串的指针;
·处理程序表364,用于存储关于和预加载的类方法关联的异常处理程序的信息;
·接口表366,用于存储关于每个预加载的Java类所实现的接口信息;
·代码模块368,用于存储预加载的类的方法和异常处理程序的字节码;
·静态数据表370,用于存储分配给以每个类为基的变量值,与分配给以每个对象实例为基的变量相反。
随着下面进一步的描述,内容也会越来越清晰,有些,但不是所有的资源模块包含指向其它模块中数据项的指针。例如,在代码资源368、处理程序表资源364和接口表资源366中就没有任何指针。类表资源356,方法表资源358是含有指针的资源实例。更进一步地讲,除了目录资源表之外的所有模块都有被其它模块中的指针所指向的数据项,甚至连目录表也能够被设置一个指向它自身的指针。
静态数据表370实际上是一个不需要被加载到客户端设备中的位置保持器。更确切地讲,静态数据表是在JVM执行期间创建并存储在客户端设备的活动存储器中的。然而,静态数据表至少在其初始创建时,要被包含在加载模块中,因为其他模块将其指针包含在静态数据表370的各种域(即,项)中。指向静态数据表中数据项的指针需要通过启动程序来重新定位或更新,其方式与指向其他资源的指针相同。因为客户端设备活动存储器中静态数据表的存储单元在一次执行到下一次执行时可能会改变,所以指向静态数据表中数据项的指针必须在每次执行JVM启动程序时被更新。
目录表350,如图8所示,用于存储每个资源模块的存储器存储单元和大小。最初,地址的存储单元是一组任意值,例如,基于它们在模块文件内的位置。每次JVM启动程序由客户端设备执行时,目录表中的地址就被更新以指示在客户端设备存储器内的那些资源的当前存储单元。这个程序将会在下面有更详细的描述。在优选实施方案中,目录表350更进一步地会存储一组”关键值”,包括指向类表资源356中的类表,用于叫做Java.lang.Object(顶级类)的类块和如图9A、9B和10所示的哈希表以及其他关键数据结构的指针。
UTF字符串表354,如图9A所示,使用哈希表来实现。哈希表含有许多其字符串通过相应的哈希函数(它包含于JVM中)映射而成的″桶″。哈希表含有一个首标,它包括指示表中桶的数目的长度值380,指示表中UTF字符串386数目的计数值382,以及一组桶384。每个桶384含有一个指向链接的零或多个UTF字符串386列表的指针。每个桶中的指针,如果有所指向,总是指向链接列表中第一个UTF字符串。每个UTF字符串386包括一个指向下一个UTF字符串的指针390,一个指示字符串中以字节数作为长度测量值的长度域392,以及一个存储字符串本身的字节域394。
暂留字符串表352在结构上和UTF字符串表354是相似的。具体地讲,暂留字符串表352如图9B所示,使用哈希表来实现。哈希表含有许多其字符串对象通过相应的哈希函数(它包含于JVM中)映射而成的″桶”。哈希表含有一个首标,它包括指示表中桶数目的长度值400,指示表中字符串对象408数目的计数值402以及一组桶404。每个桶404含有一个指向链接的零或多个单元406列表的指针。每个桶中的指针,如果有所指向,总是指向链接列表中第一单元406。每个单元406包括一个指向下一个单元的指针以及一个指向字符串对象408(或者,更精确地讲,是”Java.lang.String″类型的对象)的指针。如图9C所示,字符串对象408典型地包括指向类″Java.lang.String″的指针410,一个指向类型char[]对象的一个实例的指针和一个到字符数组的偏移量以及一个用于当前对象的字符串的长度的指示器416。字符数组420存储字符串对象的所有字符串,数组中每个这样的字符串的存储单元是由相应的字符串对象的偏移量和长度域414,416所指示的。为了节省空间,只有一个char[]对象的实例418被存储起来,所有字符串对象均指向这个char[]对象418的同样的单一实例。
类表,如图10所示,是另一个哈希表,它含有许多指向类块424的链接列表的桶422。表包括一个指示表中桶数目的长度域425以及一个指示表中类块数目的计数域426。
每个类块424,如图11所示,包括:
·一个指针430,如果有指向,则指向下一个类块;
·一个指针432,指向和类块关联的类名;类名被存储在UTF字符串中,其地址被存储在该指针中;
·一个指针434,指向与类块关联的类的超类的类块;
·一个指针436,指向方法表450,它又指向与类块关联的类的方法;
·一个指针436,指向域表500,它定义了与类块关联的类的域;以及
·一个指针438,指向与类块关联的类的常量池表510。
方法表资源358存储一组″C″方法表450(见图7和12),这里″C″是加载模块162中的类文件数。每个类块426指向一个方法表450。相似地,域表资源360存储一组″C″域表500(图13),常量池资源362存储一组常量池表520(图14),处理程序表资源364存储一组异常表454(图12),而代码资源368存储一组代码块452(图12)。
每个方法表450含有一组方法块460,关联类的每个方法有一个方法块。表包括一个指示表中方法块数目的计数域462,一个指示表大小的长度域464。每个方法块包括一个指向代码块452的指针466和另一个指向异常表454的指针468以及与本论述不相关的信息。
每个代码块452含有一个可执行程序(也叫做代码,或可执行指令),它在优选方案中是指一个Java语言字节码程序(即,方法)。
每个异常表454含有一个异常处理程序项480,它用于通过相应方法指定的每一个异常处理程序。计数域482指示异常处理程序项的数目,并且每个项480指示适用于一个具体处理程序的方法的代码范围(即,第一和最后字节码),一个指示方法的代码块中异常处理程序的存储单元的偏移量值以及要使用该相应异常处理程序的异常类型。
如图13所示,域表资源的每个域表500含有一组域项502。每个域项502包括一个偏移量或指针,域的数据类型以及一个指向包含域名称的UTF字符串的指针。当和域项相对应的域是一个包含于关联类(对象类型)的每个对象中的″每一对象实例″域时,该域项含有一个偏移量,并且该偏移量指示关联类的每个对象中的相应域的位置。另一方面,当和域项相应的域表示一个存储于静态数据数组中的″每一类一次″变量时,域项含有一个指针,它指向静态数据数组中的项而不是指向一个偏移量值。域表500也包括一个指示表中域项502数目的长度域504。
如图14所示,一个具体类的常量池520含有一个指示池中数据项数目大小的域522。池中的每个数据项通过一个1字节的标记和一个4字节的″项″来表示。为了满足寻址边界需求,标记524存储在一个数组中,数据项存储在另一个数组中。每个标记524指示一个常量的数据类型,同时相应数据项526或是一个指向域表500中的一个域项502的指针,一个指向方法(即,指向方法表450中的方法块460)的指针,一个指向UTF字符串表354中的UTF字符串的指针,或是一个数字值(即,一个整数或浮点数)。由标记524指定的数据类型规定数据项526包含的是一个数字值还是一个指针以及指针类型。
初始化和启动客户端设备的Java虚拟机的过程
参照图15,每个资源模块在其末尾包括两个字节的空信息。这样作的原因如下。在JVM不执行时,每个模块的存储器存储单元可能改变。就是说,客户端设备可能因为各种原因要重定位存储器内的资源。由此引起的问题是客户端设备可能会把资源存储在一个非0模4地址(即,地址可由4整除)的存储单元。更具体地讲,资源的起始地址可能是一个2模4的地址。然而,JVM依赖于存储在0模4的存储单元的某种数据结构。这个问题的解决是通过(A)把2字节的空信息存储在每个资源模块的开始或结尾,(B)当JVM启动时,锁定JVM资源模块的存储单元,(C)当有必要将资源模块中非空信息的第一个字节定位在一个0模4地址的时候,将这两个字节转到每个资源模块的开始或结尾。注意,如果一个资源模块以前存储在一个2模4的地址(因此其空字节就向前移动了)并且然后下次存储在一个0模4的地址,那么空字节将必须从资源模块的前面移到后面。
每当资源模块中的空字节从后移向前时,存储在目录表350中的相应的存储单元值就要减2,每当资源模块中的空字节从前移向后时,存储在目录表350中的相应的存储单元值就要加2。目录表的这些调整就能够使资源模块中的指针的后续修改得到正确的执行。
参照图16A和16B,在执行JVM启动程序之前,JVM、启动程序和资源模块必须安装到客户端设备中(540),这意味着它们被存储在设备的存储器中。
当客户端设备将要执行JVM的任何时候,它都是在JVM启动程序(542)执行之后才执行的。启动程序一完成,JVM就被执行,并且JVM的执行一完成,被启动程序锁定的所有JVM资源就被解锁(546)。
启动程序实际上和JVM一样都是代码资源的一部分,这里叫做JVM代码资源,更进一步讲JVM包括″数据资源″,这里叫做JVM数据资源。JVM数据资源表示JVM中的所有变量,包括本机方法表。当JVM启动程序要执行时,PalmOS自动将JVM数据资源拷贝到活动存储器中(550)。就是说,对于被Palm设备执行的任何程序,PalmOS会自动将相应的数据资源拷贝到活动存储器中。
下一步,在将数据资源移动到活动存储器的同时,PalmOS会自动更新数据资源内的指针从而使其指向关联的代码资源内的正确存储单元。因此,活动存储器中本机方法表的拷贝将自动被PalmOS更新以包含己被更新的指针,它们指向JVM代码资源内的本机代码方法。
启动程序创建了一个目录表的工作拷贝(551)。如图8中指示,目录表的工作拷贝包括″Δ存储单元"列,它用于存储每个资源模块以前的和当前存储单元间的差值。
此外,它锁定JVM所用的每一资源,使得它在存储器中的存储单元在JVM的执行完成之后资源被解锁之前不能被改变。然后,程序就调整每个JVM资源模块中的2个字节空信息的存储单元,但仅是如果有必要将每个这种资源的第一个非空数据结构定位在0模4的地址的情况下,并调整模块的开始地址,如相应地记录在目录表中(551)那样。
可修改的每个类的变量数组(叫做静态数据数组或静态数据表),它和被预加载的类关联,是建立在活动存储器(552)中的。这个数组的存储单元要被记录并且在指针调整步骤556中要用到。
下一步,启动程序确定JVM资源的当前起始存储单元,并将它们和目录表中所指示的以前的起始存储单元进行比较,然后为每个JVM资源模块(554)生成一个Δ存储单元值,它等于当前和以前存储单元的差。如果所有的Δ存储单元值都等于零,表明自从上次JVM执行以来,没有任何资源模块被移动过,那么在步骤556(调整指针)中执行的绝大多数工作就被跳过。要指出的是静态数据数组是”资源”之一,在目录表中有一行与其对应,即使这个资源是和JVM的每次执行一起被重新生成的。在一次执行到下一次执行的过程中静态数据数组的存储单元的变化用于更新域表资源中的指针,它指向静态数据数组中的项(见步骤556)。
步骤(556)是基于JVM资源的起始存储单元的变化来调整JVM资源中的指针的步骤,它使得JVM能够在无虚拟存储管理器的设备中执行。指针的调整是按照如下所述来实现的。对于UTF字符串表354和暂留字符串表352,这些表内的指针值的调整是通过一个等于各个表中存储单元变化的数量来进行的。例如,如果UTF字符串表354移动了+1024字节,那么这个表中的所有指针就增加1024。在暂留字符串表352内,指向java.lang.String类的指针的调整是通过与类表资源的Δ存储单元相同的数量来实现的。
在类表356,方法表450,域表500和常量池520中,每个指针(A)要进行校验以此来确保它指向相应资源中的一个存储单元,(B)要通过前面资源的Δ存储单元来调整。要调整的指针组的发现要通过跟踪类表的所有方法块,并且跟随其中的指针从而来定位JVM资源中的所有方法表,域表和常量池,然后调整其各自指针的方式。
仅有域表资源才含有指向静态数据数组中数据项的指针。这些指针被更新以与静态数据数组存储单元(如果有存储单元)的变化相一致,存储单元的变化来自JYM以前的执行与JVM当前的执行。在优选方案中,JVM启动程序(步骤554)校验了除静态数据数组之外的所有资源的Δ存储单元值,并且当所有的Δ存储单元值都等于零时,就切换到一种“快速″更新方法。在快速更新方法中,仅有域表资源中的指向静态数据数组的指针在步骤556中被更新。
在步骤558中,方法表中指向本机方法的指针是单独更新的,使用了存储在本机方法表中的值来实现。如同前面所描述的,本机方法表中的指针是在步骤550中被更新的,以指向Java代码资源中本机方法的当前存储单元。本机方法表包括用于每个本机方法的一行,它含有一个相对于方法表资源的偏移量和一个指向本机方法的指针。在步骤558中,对于本机方法表320的每一行,行中的指针拷贝到了方法表资源中由该行的偏移量来指示的存储单元。即使当记录在目录表中的所有资源的Δ存储单元值都等于零,步骤558也要被执行。
这里要注意的是,在一种客户端是Palm设备的优选实施方案中,尽管JVM资源存储在客户端设备的″静态存储器”中,那些资源的目录却能够通过相应的操作系统命令被重写。尽管向静态存储器进行写新值的操作需要使用特定的操作系统命令,并且和按照正常方式向客户端设备的活动存储器282(图3)进行写操作相比,要消耗更多的时间,然而指针调整过程在JVM启动程序的执行中仅实施一次。
在优选实施方案中,指针的更新是在JVM资源的工作拷贝中进行的。只要有可能,这些工作拷贝均被存储在活动存储器中,但是典型情况下,由于活动存储器总量的限制迫使至少一些工作拷贝要存储在静态存储器中。工作拷贝不是由其中不含指针的JVM资源组成的。在步骤560中,目录表是通过把每个资源的Δ存储单元加到其起始存储单元而最终完成的。
然后,对于每个为其建立了一个工作拷贝的JYM资源,该JVM资源被其工作拷贝所替换。直到启动程序就要结束之前,目录表和其他JVM资源不作改变,其原因是如果启动程序在过程中被中断,目录表的目录和JVM资源就会在内部不一致,然后就不可能正确地调整JVM资源中的所有指针而从启动程序的中断处进行恢复。换句话说,在结束之前,如果目录表其他JVM资源没有改变,那么JVM资源的目录中内部不一致的总时间值将降到了最小。这就使得启动程序更加有可能从其启动过程的崩溃点或其他中断点进行恢复。
启动过程完成之后,JVM就被执行(544,图16A)。然后,在JVM自己的执行被停止之前,JVM可能会执行一单个的小应用程序,或执行多个Java程序。当JVM的执行完成时,JVM资源就被解锁,这就使得操作系统能够根据自己内部的管理策略将它们移到存储器中的新存储单元。
候选实施方案
本发明能够作为一个计算机程序产品来实现,它包括可嵌入到计算机可读的存储介质的计算机程序机制。例如,计算机程序产品可以包含如图1和2所示的程序模块。这些程序模块可以存储在CD-ROM,磁性磁盘存储产品或任何其他计算机可读的数据或程序存储产品中。计算机程序产品中的软件模块也可以使用基于载波的计算机数据信号(软件模块被嵌入其中)的传输,通过因特网或其它方式进行电子发布。
尽管本发明的描述引用了几个特殊的实施方案,然而该描述是关于发明的说明性质的并且它不能理解为限制本发明。那些对本领域很熟练的人可以有各种各样的修改方案而不违背在所附的权利要求中定义的关于本发明的实质和范围。
Claims (21)
1.准备指定的类组以便预加载到无虚拟存储管理器的客户端设备中的方法,包括:
将指定类组转换为多个资源模块,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项;每个指针指定了一个被指向的数据项的存储器地址;
提供一种由客户端设备执行的已编译的解释器;其中解释器用于执行由预先规定的计算机语言所编写的程序,并且指定的类组包括用预先规定的计算机语言所编写的方法;
提供一种已编译的启动程序,当加载执行用的解释器时,该启动程序由客户端设备执行;该启动程序用与任一具体客户端设备资源模块的实际存储器存储单元相对应的已更新的指针来替换该资源模块中的指针;以及
生成一种给客户端设备进行加载的加载模块,它包括多个资源模块、已编译的解释器和已编译的启动程序。
2.权利要求1的方法,其中资源模块包括一个类表资源模块、一个方法表资源模块、一个域表资源模块、一个常量池资源模块和一个字符串资源模块,类数据结构包括指向方法表、域表和常量池资源模块中数据项的指针,域表资源模块包括指向字符串资源模块中数据项的指针,常量池资源模块包括指向域表资源模块数据项和字符串资源模块数据项的指针。
3.权利要求1的方法,其中启动程序包括这样的指令,这些指令将子集中至少两个资源模块中的每一个的第一个数据结构定位到任一特定客户端设备中0模4地址处。
4.权利要求1的方法,其中
资源模块包括一个目录表,它指示各资源模块第二子集中每一个的存储器地址,该第二子集包括那些被资源模块中的至少一个指针所指向的资源模块;
启动程序包括这样的指令,这些指令(A)确定第二子集中每个资源模块的当前存储器地址,确定第二子集中每个资源模块的差值,它相当于当前存储器地址和目录表中所指示的存储器地址的差,以及(B)根据该差值调整资源模块中指针的至少一个子集。
5.权利要求1的方法,其中资源模块包括一个带有指向指定类组方法代码的指针的方法表模块,方法表中指针的一个子集指向已编译的解释器的本机方法。
6.准备指定的类组以便预加载到无虚拟存储管理器的客户端设备中的计算机系统,包括:
一个数据处理单元;
存储器,用于存储指定类组、解释器和启动程序;
一个类预加载器,由数据处理单元来执行,用于将指定类组转换为多个资源模块,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项;每个指针指定了一个被指向的数据项的存储器地址;
一个编译器,由数据处理单元来执行,用于编译解释器,后者由无虚拟存储管理器的客户端设备执行,以便生成一个已编译的解释器;其中解释器用于执行用预先规定的计算机语言所编写的程序,指定类组包括用预先规定的计算机语言编写的方法;
该编译器还用来编译启动程序,当加载执行用的解释器时,启动程序由客户端设备执行,以便生成一个已编译的启动程序,启动程序用与任一具体客户端设备资源模块实际存储器存储单元相对应的已更新的指针来替换资源模块中的指针;以及
该编译器还用来生成一种给客户端设备进行加载的加载模块,该加载模块包括资源模块、已编译的解释器和已编译的启动程序。
7.权利要求6的计算机系统,其中资源模块包括一个类表资源模块、一个方法表资源模块、一个域表资源模块、一个常量池资源模块和一个字符串资源模块,类数据结构包括指向方法表、域表和常量池资源模块中数据项的指针,域表资源模块包括指向字符串资源模块中数据项的指针,常量池资源模块包括指向域表资源模块中的数据项和字符串资源模块中的数据项的指针。
8.权利要求6的计算机系统,其中启动程序包括这样的指令,这些指令将至少两个资源模块中的每一个的第一个数据结构定位到任一特定客户端设备中0模4地址处。
9.权利要求6的计算机系统,其中
资源模块包括一个目录表,它指示各资源模块第二子集中每一个的存储器地址,第二子集包括那些被资源模块中的至少一个指针所指向的资源模块;
启动程序包括这样的指令,这些指令(A)确定第二子集中每个资源模块的当前存储器地址,确定第二子集中每个资源模块的差值,它相当于当前存储器地址和目录表中所指示的存储器地址的差,(B)根据该差值调整资源模块中指针的至少一个子集。
10.权利要求6的计算机系统,其中资源模块包括一个带有指向指定类组方法代码的指针的方法表模块,方法表中指针的一个子集指向已编译的解释器的本机方法。
11.操作无虚拟存储管理器的客户端设备的方法,包括:
在客户端设备的存储器中进行多个资源模块的存储,该多个资源模块表示一组类,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项;每个指针指定了一个被指向的数据项的存储器地址;
用解释器进行由预先规定的计算机语言编写的程序的执行,被执行的程序包括类组中的方法;
在加载解释器时和在用解释器执行程序之前,执行启动程序以便用与客户端设备资源模块实际存储器的存储单元相对应的已被更新的指针来替换资源模块中的指针。
12.权利要求11的方法,其中资源模块包括一个类表资源模块、一个方法表资源模块、一个域表资源模块、一个常量池资源模块和一个字符串资源模块,类数据结构包括指向方法表、域表和常量池资源模块中数据项的指针,域表资源模块包括指向字符串资源模块中数据项的指针,常量池资源模块包括指向域表资源模块中的数据项和字符串资源模块中的数据项的指针。
13.权利要求11的方法,其中启动程序包括这样的指令,这些指令将至少两个资源模块中的每一个的第一个数据结构定位到任一特定客户端设备中0模4地址处。
14.权利要求11的方法,其中
资源模块包括一个目录表,它指示资源模块第二子集中每一个的存储器地址,第二子集包括那些被资源模块中的至少一个指针所指向的资源模块;
启动程序包括这样的指令,这些指令(A)确定第二子集中每个资源模块的当前存储器地址,确定第二子集中每个资源模块的差值,它相当于当前存储器地址和目录表中所指示的存储器地址的差,以及(B)根据该差值调整资源模块中指针的至少一个子集。
15.权利要求11的方法,其中资源模块包括一个带有指向指定类组方法代码的指针的方法表模块,方法表中指针的一个子集指向已编译的解释器的本机方法。
16.一个客户端设备,包括:
一个数据处理单元;
存储器,用于存储
一个无虚拟存储管理器的操作系统;
一组资源模块,这组资源模块表示一组类,资源模块的子集中的每个资源模块都含有指向其他资源模块数据项的指针的数据项;每个指针指定了一个被指向的数据项的存储器地址;
一个解释器,由数据处理单元来执行,用于执行由预先规定的计算机语言编写的程序;指定类组包括用预先规定的计算机语言编写的方法;
一个启动程序,由数据处理单元来执行,在加载用于执行的解释器时,它由客户端设备来执行,启动程序用与客户端设备资源模块实际存储器存储单元相对应的已更新的指针来替换资源模块中的指针。
17.权利要求16的客户端设备,其中资源模块包括一个类表资源模块、一个方法表资源模块、一个域表资源模块、一个常量池资源模块和一个字符串资源模块,类数据结构包括指向方法表,域表和常量池资源模块中数据项的指针,域表资源模块包括指向字符串资源模块中数据项的指针,而常量池资源模块包括指向域表资源模块中的数据项和字符串资源模块中的数据项的指针。
18.权利要求16的客户端设备,其中启动程序包括这样的指令,这些指令将至少两个资源模块中的每一个的第一个数据结构定位到任一特定客户端设备中0模4地址处。
19.权利要求16的客户端设备,其中资源模块包括一个目录表,它指示各资源模块第二子集中每一个的存储器地址,第二子集包括那些被资源模块中的至少一个指针所指向的资源模块;
启动程序包括这样的指令,这些指令(A)确定第二子集中每个资源模块的当前存储器地址,确定第二子集中每个资源模块的差值,它相当于当前存储器地址和目录表中所指示的存储器地址的差,以及(B)根据该差值调整资源模块中指针的至少一个子集。
20.权利要求16的客户端设备,其中资源模块包括一个带有指向指定类组方法代码的指针的方法表模块,方法表中指针的一个子集指向已编译的解释器的本机方法。
21.权利要求16的客户端设备,其中
客户端设备包括一台显示器;以及
存储器,用于更进一步存储:
一个浏览器应用程序,可由客户端设备执行,用于从远程计算机下载文档,包括已经将引用嵌入到其中的一个可被解释器执行的小应用程序的文档,和用于在显示器上显示文档和通过执行小应用程序而生成的图象。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/522,268 | 2000-03-09 | ||
US09/522,268 US6745386B1 (en) | 2000-03-09 | 2000-03-09 | System and method for preloading classes in a data processing device that does not have a virtual memory manager |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1427968A CN1427968A (zh) | 2003-07-02 |
CN1218245C true CN1218245C (zh) | 2005-09-07 |
Family
ID=24080171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN018092608A Expired - Lifetime CN1218245C (zh) | 2000-03-09 | 2001-03-08 | 用于在数据处理器中预加载类的系统和方法 |
Country Status (11)
Country | Link |
---|---|
US (1) | US6745386B1 (zh) |
EP (1) | EP1269309B1 (zh) |
JP (1) | JP2003526154A (zh) |
KR (1) | KR20030044902A (zh) |
CN (1) | CN1218245C (zh) |
AT (1) | ATE268023T1 (zh) |
AU (2) | AU4202801A (zh) |
CA (1) | CA2402298A1 (zh) |
DE (1) | DE60103521T2 (zh) |
RU (1) | RU2002126996A (zh) |
WO (1) | WO2001067236A2 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6324685B1 (en) | 1998-03-18 | 2001-11-27 | Becomm Corporation | Applet server that provides applets in various forms |
GB9921720D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Loading object-oriented computer programs |
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 |
MXPA03010975A (es) * | 2001-05-30 | 2004-03-26 | Research In Motion Ltd | Sistema de procesamiento de aplicaciones para un dispositivo movil de comunicaciones. |
US8205193B2 (en) * | 2001-06-11 | 2012-06-19 | Hewlett-Packard Development Company, L.P. | Runtime updating of virtual machine class files |
JP2004152279A (ja) * | 2002-10-08 | 2004-05-27 | Matsushita Electric Ind Co Ltd | プログラム更新方法および端末装置 |
CN100365570C (zh) * | 2003-12-18 | 2008-01-30 | 中国电子科技集团公司第三十研究所 | 运用于dsp的动态加载方法 |
KR100654428B1 (ko) * | 2004-01-14 | 2006-12-06 | 삼성전자주식회사 | 자바 프로그램의 처리 속도를 향상시키는 시스템 및 그 방법 |
US7406687B1 (en) * | 2004-03-17 | 2008-07-29 | Sun Microsystems, Inc. | Sharing runtime representation of software component methods across component loaders |
US7356811B2 (en) * | 2004-07-08 | 2008-04-08 | International Business Machines Corporation | Method and apparatus for referencing a constant pool in a java virtual machine |
KR100790053B1 (ko) * | 2006-06-05 | 2008-01-02 | 주식회사 대우일렉트로닉스 | 마스터 장치의 번들 처리 장치 및 방법 |
CN100442233C (zh) * | 2007-01-31 | 2008-12-10 | 华为技术有限公司 | 实现应用系统动态升级的方法及系统 |
US8676841B2 (en) * | 2008-08-29 | 2014-03-18 | Oracle International Corporation | Detection of recurring non-occurrences of events using pattern matching |
US8799357B2 (en) | 2010-11-08 | 2014-08-05 | Sony Corporation | Methods and systems for use in providing a remote user interface |
KR20130020050A (ko) * | 2011-08-18 | 2013-02-27 | 삼성전자주식회사 | 로컬리티 센서티브 해시의 버킷 구간 관리 장치 및 그 방법 |
US9507613B2 (en) * | 2012-03-30 | 2016-11-29 | Oracle International Corporation | Methods and apparatus for dynamically preloading classes |
US8997075B2 (en) * | 2013-07-23 | 2015-03-31 | Red Hat, Inc. | System and method for dynamic class management |
US9274769B1 (en) * | 2014-09-05 | 2016-03-01 | International Business Machines Corporation | Table of contents pointer value save and restore placeholder positioning |
US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
CN108228694A (zh) * | 2017-06-30 | 2018-06-29 | 勤智数码科技股份有限公司 | 基于细化数据项的目录生成方法 |
US10877757B2 (en) * | 2017-11-14 | 2020-12-29 | Nvidia Corporation | Binding constants at runtime for improved resource utilization |
CN114519582A (zh) * | 2022-02-21 | 2022-05-20 | 中国邮政储蓄银行股份有限公司 | 服务的预热方法、预热装置和服务系统 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5548759A (en) * | 1994-07-05 | 1996-08-20 | Microsoft Corporation | System for storing executable code within a resource data section of an executable file |
US5727147A (en) * | 1995-12-08 | 1998-03-10 | Sun Microsystems, Inc. | System and method for resolving symbolic references to externally located program files |
US5692047A (en) * | 1995-12-08 | 1997-11-25 | Sun Microsystems, Inc. | System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources |
US5815718A (en) * | 1996-05-30 | 1998-09-29 | Sun Microsystems, Inc. | Method and system for loading classes in read-only memory |
US5946487A (en) * | 1996-06-10 | 1999-08-31 | Lsi Logic Corporation | Object-oriented multi-media architecture |
US5966702A (en) | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6349344B1 (en) | 1997-12-16 | 2002-02-19 | Microsoft Corporation | Combining multiple java class files into a run-time image |
FR2775805B1 (fr) | 1998-03-05 | 2001-10-12 | Alsthom Cge Alkatel | Procede et architecture logicielle pour la transmission d'objets au sein d'un environnement distribue, conservant les references entre objets |
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 |
-
2000
- 2000-03-09 US US09/522,268 patent/US6745386B1/en not_active Expired - Lifetime
-
2001
- 2001-03-08 AU AU4202801A patent/AU4202801A/xx active Pending
- 2001-03-08 JP JP2001564991A patent/JP2003526154A/ja active Pending
- 2001-03-08 AT AT01913356T patent/ATE268023T1/de not_active IP Right Cessation
- 2001-03-08 DE DE60103521T patent/DE60103521T2/de not_active Expired - Lifetime
- 2001-03-08 WO PCT/US2001/007497 patent/WO2001067236A2/en active IP Right Grant
- 2001-03-08 EP EP01913356A patent/EP1269309B1/en not_active Expired - Lifetime
- 2001-03-08 CN CN018092608A patent/CN1218245C/zh not_active Expired - Lifetime
- 2001-03-08 CA CA002402298A patent/CA2402298A1/en not_active Abandoned
- 2001-03-08 AU AU2001242028A patent/AU2001242028B2/en not_active Expired - Fee Related
- 2001-03-08 RU RU2002126996/09A patent/RU2002126996A/ru not_active Application Discontinuation
- 2001-03-08 KR KR1020027011804A patent/KR20030044902A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
DE60103521D1 (de) | 2004-07-01 |
WO2001067236A2 (en) | 2001-09-13 |
CA2402298A1 (en) | 2001-09-13 |
AU2001242028B2 (en) | 2005-05-26 |
EP1269309B1 (en) | 2004-05-26 |
KR20030044902A (ko) | 2003-06-09 |
JP2003526154A (ja) | 2003-09-02 |
AU4202801A (en) | 2001-09-17 |
DE60103521T2 (de) | 2005-06-23 |
EP1269309A2 (en) | 2003-01-02 |
US6745386B1 (en) | 2004-06-01 |
WO2001067236A3 (en) | 2002-05-30 |
ATE268023T1 (de) | 2004-06-15 |
CN1427968A (zh) | 2003-07-02 |
RU2002126996A (ru) | 2004-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1218245C (zh) | 用于在数据处理器中预加载类的系统和方法 | |
CN101697131B (zh) | 一种可重定位文件动态加载的方法及装置 | |
KR100384905B1 (ko) | 컴퓨터 메모리에서 데이터 관리 방법, 장치 및 기록매체 | |
CN1114155C (zh) | 计算机系统及其操作方法和控制装置 | |
US9519466B2 (en) | Executable code for constrained computing environments | |
CN1134730C (zh) | 用于减少预装类的脚印的系统和方法 | |
US7503034B2 (en) | Method and system for dynamically mapping archive files in an enterprise application | |
KR100518584B1 (ko) | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 | |
US20090259999A1 (en) | Method and system for applying a patch during application execution | |
US7634778B2 (en) | Operating system managing a linked list of callback dynamic function tables for acquiring exception handling information from a runtime environment | |
CN1117318C (zh) | 保密解译程序优化运行时调用专用变量函数的系统和方法 | |
US20040187102A1 (en) | Combining write-barriers within an inner loop with fixed step | |
KR20050061380A (ko) | 자기 기술적 소프트웨어 이미지 업데이트 컴포넌트 | |
US8001518B2 (en) | Configuring a shared library to accommodate relocatable data in a pervasive device | |
AU2001242028A1 (en) | System and method for preloading classes in a data processing device that does not have a virtual memory manager | |
US6507948B1 (en) | Method, system, and program for generating batch files | |
EP4237951A1 (en) | Tracking garbage collection states of references | |
US7788661B2 (en) | Method and system for applying patches to a computer program concurrently with its execution | |
US10572275B2 (en) | Compatible dictionary layout | |
CN1758220A (zh) | 一种升级软件版本的方法 | |
US20080301719A1 (en) | Mapping Of Dynamic Link Libraries In Computing Devices | |
CN103631971A (zh) | 一种可移植的执行体文件的重组方法和装置 | |
US20040111714A1 (en) | Dynamic division optimization for a just-in-time compiler | |
CN100343819C (zh) | 一种遍历和访问被测应用程序中对象的方法 | |
US20070245328A1 (en) | Method of calling a method in virtual machine environment and system including a virtual machine processing the method |
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 |
Granted publication date: 20050907 |
|
CX01 | Expiry of patent term |