创建和使用预内在化程序文件的方法和设备技术

技术编号:2869780 阅读:266 留言:0更新日期:2012-04-11 18:40
一个设备(45)接收新的程序文件(46),并使用预内在化的映像以避免在每次程序执行出现时必须内在化一个程序文件。在一种实施例中,该设备中的一个软件虚拟机(50)用于执行所述预内在化。一旦将所述程序文件预内在化以创建存储在该设备的永久性存储器(56)内的映像,则随后在不必执行一个预内在化操作的情况下可以执行所述映像。此外,减少了与随后程序执行有关的动态存储器(52)的使用,并减少了新程序文件的执行时间。(*该技术在2021年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术一般涉及以高级语言编写的程序文件的处理,尤其涉及以能够动态加载的高级编程语言编写的程序文件。
技术介绍
随着手持式和其它电子设备的数量和种类不断增加,在这些设备上运行和与之接口的应用程序也相应地增加,并且所期望的用户添加特定程序和功能的灵活性也增加。这些设备有时称作“内嵌式设备”,因为它们包括一个执行指令的处理器、特定的功能单元和提供所期望的功能的指令。内嵌式设备通常是独立设备,它们具有自己的电源,但是通常包括与其它系统接口的能力。例如,诸如蜂窝电话机、寻呼机和个人数字助理(PDA)的内嵌式设备通常包括一个用于执行在该设备内存储的计算机程序的中央处理单元(CPU)和一个允许移动性的电池。在一个内嵌式设备制造之后,个人用户可能希望通过添加特定的功能或应用程序来定制它们的设备。希望使用以高级编程语言编写的计算机程序或代码,所述高级编程语言例如是JavaTM,一种由Sun微系统公司开发的语言,它便于用户提供程序的随后安装。Java是很有吸引力的,因为它是独立于平台的,这意味着它并不专用于一种操作系统或者硬件结构。为内嵌式设备开发编码的一种限制是有限的存储容量,这降低了设备能够存储的编码数量,同时也影响设备的计算能力。因此,为内嵌式设备设计编码的一个主要目的是最大化存储效率和所安装的应用程序的速度。当前,存在若干种提高内嵌式应用程序存储效率的方法,然而,这些方法通常并不涉及用户随后安装附加的应用程序。Java具体而言是一种面向对象的编程语言,它是可移植的、易于编程和结构中性的。面向对象的设计集中于称作“对象”的数据以及与对象的接口。Java程序能够在一个包括多种处理单元和操作系统结构的网络内任何位置处执行。Java程序是编译和解译的。编译一旦完成,将编译后的Java编程代码称作“Java字节码”(JBC)。JBC是一种结构中性或独立于平台的中间语言。Java解释器在处理器上解析和运行JBC指令。解译在每次执行程序时出现。一个称作类文件的Java二进制文件包括用于给定程序的JBC以及诸如符号数据的支持信息。一个类文件或者程序文件包括与类有关的“项目”或信息,例如字段、方法、JBC阵列和一个符号引用表格。具体地说,一个Java程序包括一个或多个Java文件,它们在编译时生成一个或一组类文件。JBC是用于一个“Java虚拟机”(Java VM)的有效机器代码指令。每个Java解释器,例如Java开发环境或者支持Java的网页浏览器,使用一个Java VM工具。通常,这些工具将使用已经安装在一个系统上的Java VM,或者可以与一个Java VM捆绑在一齐。应当指出Java VM也可以用硬件来实现。以这种方式,可以在任意一个具有Java编译器的机器上编译程序,并可以在Java VM的任意一个工具上运行由此获得的JBC。为了使以Java编写的应用程序可移植,保存了大量的符号信息。在JBC的普通Java VM执行过程中,由Java VM使用符号数据来执行动态捆绑,由此获得到引用结构的实际指针。例如,每个到一个函数的引用通过下述符号信息来表示,即类名、函数名和签名。类名识别包含方法说明的类对象。这些方法识别可用于该类的各种函数,JBC阵列是实现一个方法所执行的程序。函数名和签名一齐识别其类中的给定函数。签名描述传送给一个函数和由一个函数返回的参数的组成和类型。符号信息加大了Java二进制文件,并且这种加大产生了存储器的存储问题。在执行过程中,维持两个JBC和符号信息的复本第一个复本存储在永久性存储器内;第二个复本以易于Java VM控制的格式存储在动态存储内。对于小型内嵌式设备来说,例如寻呼机、蜂窝电话机和PDA,动态存储器是非常有限的。因此,希望减少动态存储器的使用。另一个问题是在执行过程中由于使用处理符号引用的高成本检查表所导致的延迟。为了解决这些问题,使用允许压缩和格式化Java类文件的工具以更有效地使用存储器。“预内在化”是将Java类文件信息重新格式化成在放入存储器时表示一个类对象的格式的一个处理。内在化在类文件加载过程中出现,是从类文件中提取类信息和将这些信息存储在动态存储器内结构中的过程。预内在化处理消除了符号引用和类加载,减少了动态存储器的需要,并加速了应用程序的执行。预内在化文件的格式专用于每个Java VM工具。预内在化出现在编译之后但是在JBC的普通加载和执行之前。预内在化的类目标被重新构造以消除将它们存储在动态存储器内的需要,并因此可以保存在永久性存储器内。这释放了更多的用于在执行过程中创建动态目标的动态存储器。将用于保存状态以及动态对象的信息和结构存储在所谓的“Java堆栈”中。预内在化产生一个问题,即因为将类信息存储在永久性存储器内,导致不能在执行过程中更新该信息。现在的解决方案通过要求在目标设备上类安装之前解析所有的符号引用,避免了在动态存储器内存储符号信息。解析引用涉及用被引用项的位置即地址来替代该引用。在预内在化一组类文件或“类文件单元”时存在一个问题,其中引用已经安装在设备上的多个类,并且被引用项的位置是未知或者不可靠的。为了避免复制被引用的类信息,将所安装的类从设备上删除,并与该组新文件一起重新包装。附图说明图1图示处理程序文件也称作类文件的现有技术的处理方法6。由预处理器10加载标记有“类1”、“类2”和“类3”的程序文件8。预处理器10生成格式化的类文件信息12。该格式化将每个程序文件,类1,类2和类3,转换成在执行过程中使用的类对象,其中这些类对象专用于所使用的JVM工具。预处理器10是可以用软件或硬件实现的工具。格式化后的类文件信息12被构建以存储在一个目标设备中,其中该设备同时具有动态和永久性存储器。编译器和链接器16组合格式化的类文件信息12和Java VM源代码14。Java VM源代码14专用于在目标设备中实现的Java VM。编译器和链接器16的输出是Java VM映像18,它具有两个部分第一部分存储Java VM 19;第二部分存储预加载的类信息20。预加载的类信息20是格式化类文件信息的编译形式。此时,Java VM映像18存储在目标设备的设备存储器22内。在这种情况下,该设备存储器22包括动态存储器26和永久性存储器24。在一种实施例中,使用RAM实现动态存储器26,使用ROM和/或闪存实现永久性存储器24。在存储中间数值和变量的执行过程中使用动态存储器26。永久性存储器24包括多个部分第一部分28,用于存储一个类加载程序;第二部分30,用于存储一个JBC解释程序;和第三部分32,用于存储预加载的类信息20。部分28的类加载程序用于格式化Java VM使用的二进制类信息,但是预加载的类信息20并不需要它来格式化,因为它们在预处理和编译过程中格式化。在设备存储器22中存储的Java VM映像18用于运行Java程序文件,程序文件8中的类1,类2和类3。因此,在一个设备内实现设备存储器22,所述设备例如是一个手持式设备或者其它的应用设备。在制造商已经执行处理方法6之后经常希望从永久性存储器24中删除程序文件。不幸地是,一旦将类文件8存储在永久性存储器24内,在没有设备制造商的帮助下,用户不能删除所存储的程序文件。所述帮助采用的形式是将设本文档来自技高网...

【技术保护点】
一种操作虚拟机的处理方法,所述虚拟机包括一种普通操作模式和一种预内在化操作模式,所述处理方法包括:从一组可用的程序文件中选择一个程序文件以识别出一个选定的程序文件; 确定是否已经创建所述选定程序文件的一个可重复使用的预内在化 的映像,其中随后在执行之前不内在化所述选定的程序文件的情况下,能够执行所述可重复使用的预内在化的映像;如果所述选定程序文件的一个可重复使用的预内在化的映像尚未创建,则以预内在化模式选择地操作所述虚拟机,包括:创建所述选定程序 文件的可重复使用的预内在化的映像;和将所述选定程序文件的可重复使用的预内在化的映像存储在存储器内。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:艾里斯M普拉克斯顿塞缪尔J劳赫约翰H奥斯曼安德鲁A比约克斯滕贾森M贝内特
申请(专利权)人:飞思卡尔半导体公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1