复常量制造技术

技术编号:14698134 阅读:55 留言:0更新日期:2017-02-24 04:01
在方法中,虚拟机在一组指令内识别加载常量的指令;基于加载常量的指令识别数据结构中的第一条目,该数据结构识别一个或多个常量类型中的特定常量类型,其中第一条目至少指定常量数据以及用于从常量数据组装值或部分值的第一组指令;执行第一组指令以从常量数据组装值或部分值;将特定值或对特定值的引用存储到被用于在运行环境中执行的指令组之间传递值或引用的运行时数据结构上,其中特定值基于从常量数据组装的值或特定值。

【技术实现步骤摘要】
【国外来华专利技术】优先权要求;相关申请本申请是于2014年7月12日提交的、名称为“ComplexConstants(复常量)”的美国专利申请No.62/011,411的非临时申请,该申请的全部内容出于所有目的并入本文,如同在此完全阐述一样。
实施例一般涉及用于在编程语言内支持和/或利用复常量结构体的技术。
技术介绍
常量表(还被称为常量池)是在程序中存储固定值的数据结构。例如,在Java虚拟机(JavaVirtualMachine)的背景下,存储在常量池中的值可以表示在执行的过程中不改变的值,诸如文本(诸如字符串、整数(integer)、双精度浮点数(double)、浮点数(float)等)、字段引用、方法引用、接口引用、名称/类型信息以及其他。常量表的一种用途是向执行程序的运行环境提供与程序员对于常量值的意图有关的信息。然后运行环境可以使用该知识以在静态存储器中创建这些常量值的实例以供程序使用。由于常量值被存储在它们不能被改变的位置中,因此运行环境可以在需要时自由地重复使用这些常量值以避免为了每次使用而重新实例化常量值(或者在一些情况中避免为了垃圾收集而追踪值的需要)。例如,假设程序的源代码定义了两个变量,这两个变量都指代字符串文本“helloworld”。在诸如Java虚拟机之类的一些运行环境中,在不使用常量的情况下环境将需要实例化“helloworld”两次,并且然后将每个变量赋值到其各自的字符串的存储器位置。然而,如果字符串“helloworld”是常量,则操作环境可以自由地作为替代创建“helloworld”的一个实例化并且将两个变量都赋值到同一引用。由于“helloworld”字符串在存储器中是不可变的,因此不存在操作可能使用第一变量来修改“helloworld”字符串并且引发对于第二变量的意外的交叉影响的风险。如果指令试图修改第一变量,则表示修改后的字符串的第二实例化被创建,并且由第一变量存储的引用被转移到修改后的字符串的位置。因此,常量值通过节省存储器以及阻止工作不必要地重复而作为优化程序的执行的重要部分。当前,常量表以及从这些常量表加载常量的过程被定制为适合由运行环境硬编码或本地(native)支持的特定类型的值。这些技术允许运行环境的开发者精调这些常量的处理以及开发特定于特定类型的值的优化。然而,从利用常量值可以获得的运行时效率适用于几乎任何类型的值(诸如复数、元组(tuple)、点(point)、组(group)等)。将常量值的概念扩张到其他类型的一个问题是对于运行环境(诸如执行程序的虚拟机)的设计者来说预见可能对于软件开发者有用的每种类型的常量值几乎是不可能的。因此,在常量表中表示常量值以及使得这些常量值在运行时存储器中可用的灵活方法将会是在有表现力并且高效执行的程序的追求中的重大进步。附图说明在附图的图中通过示例的方式而不是通过限制的方式示出了本专利技术,在附图中相似的附图标记指代相似的元件,并且在附图中:图1是示出了根据各种实施例的在其中可以实现本文所描述的某些技术的示例计算架构的框图。图2是示出了根据实施例的示例类文件的框图。图3是示出了根据实施例的用于虚拟机运行环境的示例架构的框图。图4是示出了根据实施例的用于虚拟机栈上的帧的示例结构的框图。图5是示出了根据实施例的用于常量表的复常量条目的示例结构的框图。图6是示出了根据实施例的常量表201的复常量条目的运行时存储器表示的框图。图7是示出了根据实施例的利用复常量条目创建类文件的示例过程的框图。图8是示出了根据实施例的用于加载复常量的示例过程的框图。图9是示出了适用于实现本文所描述的方法和特征的计算机系统的一个实施例的框图。具体实施方式在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本专利技术的深入理解。然而,明显可以在没有这些具体细节的情况下实践本专利技术。在其他实例中,公知的结构和设备以框图形式示出,以便于避免不必要地使本专利技术模糊。本文根据以下提纲描述实施例:1.0总体概述2.0示例操作环境2.1示例类文件结构2.2示例虚拟机架构2.3加载、链接和初始化3.0复常量3.1类文件表示3.2运行时存储器表示3.3模板化常量3.4示例编译器过程3.5示例虚拟机过程3.6引用vs.值类型3.7常量的可组合性4.0硬件概述5.0扩展和替代物6.0第一附加公开7.0第二附加公开8.0第三附加公开1.0总体概述本文所描述的技术使用来自Java编程语言、Java虚拟机(“JVM”)和Java运行环境的术语和定义。然而,预期所描述的技术可以结合任何编程语言、虚拟机架构或运行环境来使用。因此,例如诸如“方法”之类的在Java术语中所描述的术语是与诸如“函数”之类的其他术语可互换的。此外,术语“方法”还与术语“类方法”或“对象方法”同义。方法是由名称指代并且可以在使得方法的代码被执行的程序中的各个点处被调用(援用)的一组代码或代码块。术语“援用(invoke)”还与术语“调用(call)”同义。因此,当第一方法“调用”或“援用”第二方法时,这表示第一方法使得第二方法被执行。在实施例中,运行环境提供对于被称为“复常量”的任意类型的常量的支持。因此,运行环境可以甚至对于不是由操作环境“本地”支持的类型提供类似常量的优化和行为。在实施例中,编译器被配置为执行对源代码的分析以及生成较低级的指令,诸如字节码或硬件级指令。在分析期间,编译器确定作为成为常量值的候选者的数据值。例如,用户代码可以包括具体指定值作为常量的注释或语法。作为另一示例,编译器可以检测值的聚合,其中该聚合的至少部分是常量。然后编译器可以指定聚合的常量部分作为成为复常量的候选者。在实施例中,编译器将源代码文件转换为中间表示,诸如字节码。本文呈现的示例假设源语言是诸如Java之类的面向对象的语言,并且因此“类”表示用于一批数据和方法的蓝图(blueprint),而对象是类的实例化。因此,表示中间表示的文件被称为“类文件”,其中每个单独的文件与特定类相关。然而,本文讨论的技术不限于面向对象的编程语言,而术语“类文件”被用作方便的术语而不是被用作限制。在实施例中,每个类文件由诸如虚拟机之类的运行环境处理,以在运行时存储器中生成相关联的类的表示。例如,运行环境可以被配置为在类由程序第一次使用时加载该类。响应于该使用,运行环境解析相关联的类文件、为常量、静态字段、类的方法代码等分配存储器,然后初始化这些值。在条目来自常量表的情况中,为这些常量分配的存储器被保护以使得这些存储器区域不能被修改。下文在节2.3“加载、链接和初始化”中提供了更深入的解释。在实施例中,类文件包括识别程序内的各种常量值的常量表。例如,常量表中的每个条目可以表示固定的整数、双精度浮点数、浮点数、字符串、长整数、方法引用、字段引用、接口引用等等。在实施例中,表示复常量的条目包括根据其构造常量的原始数据以及对汇编来自原始数据的复常量的汇编器方法的引用。取决于实施例,原始数据可以被直接存储在常量表条目中,或者原始数据可以被存储在其他常量表条目中并且用对常量表的引用或索引来表示。在一些实施例中,常量表具有被称为“字节型”的条目类型,该条目类型表示用于存储数据的原始字节的容器。取决于实施例,汇编器方法可以从源代码导出、由编译本文档来自技高网...
复常量

【技术保护点】
一种方法,包括:在一组程序指令内识别加载常量的指令;基于加载所述常量的所述指令识别第一条目,所述第一条目与识别由程序使用的一个或多个常量的数据结构中的常量相关联,其中所述第一条目至少指定常量数据以及用于从所述常量数据组装值或部分值的第一组指令;执行所述第一组指令以从所述常量数据组装所述值或所述部分值;将特定值或对所述特定值的引用存储到被用于在运行环境中执行的指令组之间传递值或引用的运行时数据结构上,其中所述特定值基于从所述常量数据组装的所述值或所述部分值,其中所述方法由一个或多个计算设备执行。

【技术特征摘要】
【国外来华专利技术】2014.06.12 US 62/011,411;2015.05.29 US 14/726,1551.一种方法,包括:在一组程序指令内识别加载常量的指令;基于加载所述常量的所述指令识别第一条目,所述第一条目与识别由程序使用的一个或多个常量的数据结构中的常量相关联,其中所述第一条目至少指定常量数据以及用于从所述常量数据组装值或部分值的第一组指令;执行所述第一组指令以从所述常量数据组装所述值或所述部分值;将特定值或对所述特定值的引用存储到被用于在运行环境中执行的指令组之间传递值或引用的运行时数据结构上,其中所述特定值基于从所述常量数据组装的所述值或所述部分值,其中所述方法由一个或多个计算设备执行。2.如权利要求1所述的方法,其中所述常量表示数组、组、序列、字典、复数、点或对象中的一个或多个。3.如权利要求1-2中的任何一项权利要求所述的方法,其中识别由所述程序使用的所述一个或多个常量的所述数据结构是包含多个条目的常量表,其中所述多个条目中的每个条目与不同常量相关。4.如权利要求1-3中的任何一项权利要求所述的方法,其中执行所述第一组指令在常量值高速缓存中存储所述值或所述部分值。5.如权利要求4所述的方法,其中存储在所述常量值高速缓存中的所述值或所述部分值被存储在其中所述值或部分值不可变的存储器位置处。6.如权利要求4-5中任何一项权利要求所述的方法,其中执行所述第一组指令生成第二组指令,当所述第二组指令被执行时,基于存储在所述常量值高速缓存中的所述值或所述部分值来生成所述特定值以及执行将所述特定值或对所述特定值的引用存储到所述运行时数据结构上。7.如权利要求6所述的方法,其中所述数据结构中的所述第一条目包括指向所述第...

【专利技术属性】
技术研发人员:J·R·罗斯B·戈茨
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:美国;US

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

1