产生用于存储在具有有限存储单元的设备中的可解译代码的方法技术

技术编号:2858108 阅读:246 留言:0更新日期:2012-04-11 18:40
在本发明专利技术的一些实施例中,根据.java文件或.class文件或.jar文件来产生文件。所产生的文件可直接由Java虚拟机链接和解译。可以将所产生的文件存储在设备的可直接寻址存储器中。类文件之间的引用可以出现在所产生的文件中作为符号引用的硬偏移。可以对所产生的文件进行组合,从而使相同组中的所产生文件之间的交叉引用表现为硬偏移。(*该技术在2022年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及一种。
技术介绍
由Java编译器将Java源代码文件(.java文件)编译为.class文件。可以由Java虚拟机(VM)以适合于由VM进行解译的存储器内格式,将这些.class文件读取到存储器中。然后,将该.class文件与已经类似读取的其他.class文件进行链接。利用字符串,对.class文件之间的引用进行符号解析。在包含定义的.class文件和引用该定义的.class文件中均出现了这些字符串。因此,在.class文件之间的引用的存在可能会增加.class文件的大小。可以将.class文件归档(和可选地压缩)为.jar文件。然而,.jar文件不能够直接由Java VM解译,并且必须从.jar文件中提取(如果适用,则解压).class文件(以及读取到存储器中),以便由Java VM对其进行链接、解析和解译。尽管包括归档和压缩的.class文件的.jar文件小于.class文件自身(并且因此更适合于通信设备之间的传输),但是用于所提取的(如果适用,则解压的)存储空间需要能够在要执行应用程序的环境下可用,从而使Java VM可以访问.class文件。结果,涉及.jar文件的解决方案并不表示存储空间的节省。事实上,涉及.jar文件的解决方案可能会需要额外的存储空间,用于.jar文件和所提取的.class文件。一旦已经将所提取的.class文件加载到存储器中并进行链接和解析,则不需要保留该提取的.class文件。然而,必须保留.jar文件和.class文件的存储器内表示。因此,优选地,在其中存储空间非常珍贵的具有有限存储单元的环境下,仅存储.class文件而不使用涉及.jar文件的解决方案。然而,如以上所解释的,当.class文件之间的引用数增加时,.class文件的大小也会增加。因此,有利的是,在提供.class文件的引用解决方案的同时,产生可直接解译的文件,其具有比.class文件更小的大小。附图说明在说明书的结论部分中具体指出且明确地要求保护关于本专利技术的主题。然而,在参考附图阅读以下详细描述的同时,其相关组织和操作方法以及目的、特征和优点将得到最好地理解,在附图中图1A和1B是六个典型.class文件的简化现有技术图示;图2A和2B是根据本专利技术的一些实施例的典型.cod文件的简化图示;图3是根据本专利技术的一些实施例,用于产生.cod文件的方法的流程图;以及图4是根据本专利技术的一些实施例,具有计算单元和可直接寻址存储器的设备的简化方框图。将会意识到,为了简化和明确说明,附图中所示的元素不必一定按照比例绘制。例如,为了清楚,可以相对于其他元素夸大一些元素的大小。此外,当进行适当考虑时,可以在附图中重复参考符号以表示相应或类似的元素。具体实施例方式在以下详细描述中,阐明了大量具体细节以便提供对本专利技术的全面理解。然而,本领域的技术人员将会理解,可以脱离这些具体细节来实施本专利技术。在其他实例中,没有详细描述公知方法、过程和元素以使本专利技术更清楚。由Java编译器将Java源代码文件(.java文件)编译为.class文件。一旦读取到存储器中,则可以由Java虚拟机(VM)对这些.class文件进行链接、解析和解译。图1A和1B是六个典型.class文件的简化现有技术图示,即Aa.class文件100A、Bb.class文件100B、Cc.class文件100C、Dd.class文件100D、Ee.class文件100E和Ff.class文件100F,统称为文件100。.class文件的结构是已知文档,这里将不再详细描述。为了清楚地说明,以简化的格式示出了文件100,然而,本领域的技术人员将会理解,该简化格式并非对文件100的结构的准确表示。每一个文件100包括常数存储库(pool)102。常数存储库102包括索引的cp_info条目,其中一些包括表示类和父类名、方法名、方法类型、字段名、字段类型等的字符串,被引用在ClassFile结构内。每一个文件100还包括“字节代码和信息结构”104,涉及类属性、类的方法、字段和特性、以及其类型。可以利用顺序索引号将这些结构指向常数存储库102中的条目。在Aa.class文件100A中,方法G包括对另一方法(在类Bb中找到的方法K)的引用。事实上,在.class文件中将方法G定义为method_info结构,尤其包括常数存储库102A中条目索引。然而,为了清楚地描述,以简化的格式在图1A中示出了方法G的定义和其对方法K的引用。因此,将字符串“K”和“Bb”包括在常数存储库102A中。将“K”和“Bb”包括在常数存储库102A中实际上表现为多个cp_info结构的一部分。然而,为了清楚地描述,在图1A中仅示出了字符串“K”和“Bb”。由于方法K的参量为整型,因此将基本类型字符“I”包括在常数存储库102A中。在字节代码和信息结构104A中由方法G对方法K的符号引用包括常数存储库102A中的相关cp_info结构的索引。类似地,在Bb.class文件100B中,将方法K定义在类Bb中,从而使常数存储库102B包括所有字符串“Bb”、“K”和基本类型字符“I”(表示“整”型)。图2A和2B是典型.cod文件的简化图示,以下将参考图3来描述其生成。.cod文件是可直接解译文件,以需要比.class文件自身需要更少的存储空间的方式包括.class文件的信息。.cod文件可以是“单独”.cod文件或“同胞(sibling)”.cod文件,如以下更详细地解释地那样。在图2B所示的示例中,单独.cod文件220命名为“EeFf.cod”,以表明其通过组合文件Ee.class和Ff.class而产生,尽管本专利技术的范围并不局限于此。单独EeFf.cod文件220包括常数存储库222、一个或多个固定表(fixup table)228和“字节代码和信息结构”224,涉及类属性、类方法、字段和特性、以及其类型。图3是根据.java文件或.class文件的集合来产生.cod文件的方法的简化流程图。所述方法可以由通用计算机上的可执行软件来执行,例如,可以将该软件作为软件开发者工具包(SDK)的一部分来提供。接收.java文件或.class文件的列表(步骤300)。如果输入是java文件,则将Java编译器应用于该java文件以产生相应的.class文件(步骤302)。可选地,尽管在图3中并未如此示出,但是可以接收一个或多个.jar文件,并且可以从中提取与归档的.class文件有关的信息。可执行软件识别.class文件的常数存储库中的公共条目(步骤304)。例如,在图1B中,父类名字符串“java/lang/Object”、方法名字符串“T”和基本类型字符串“C”(表示“字符”型)对于Ee.class文件100E和Ff.class文件100F是公共的。可执行软件识别.class文件中的类、方法和字段的交叉引用(步骤306)。例如,在图1B中,由方法Ff.U来引用方法Ee.T。然后,可执行软件通过组合.class文件的元素来产生.cod文件(步骤308)。与不管其内容对数据进行压缩的标准压缩算法不同,根据其元素类型和其内容,不同地执行.class文件到.cod文件中的元素组合。本文档来自技高网...

【技术保护点】
一种设备,包括:    计算单元,能够执行Java虚拟机;以及    可由所述计算单元直接寻址的存储器,所述存储器存储的文件直接由所述Java虚拟机链接和解译而无需重新格式化,所述文件包括硬偏移和符号引用。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:格雷戈里R本茨约翰FA达姆斯戴维P雅奇
申请(专利权)人:捷讯研究有限公司
类型:发明
国别省市:CA[加拿大]

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

1