CN115968468A - 推导用于编译器优化的简档数据 - Google Patents
推导用于编译器优化的简档数据 Download PDFInfo
- Publication number
- CN115968468A CN115968468A CN202180051387.1A CN202180051387A CN115968468A CN 115968468 A CN115968468 A CN 115968468A CN 202180051387 A CN202180051387 A CN 202180051387A CN 115968468 A CN115968468 A CN 115968468A
- Authority
- CN
- China
- Prior art keywords
- code segment
- code
- computer
- compiler
- profile data
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- 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/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开了一种方法,该方法包括由编译器响应于第一代码段的执行来请求与第一代码段相关联的第一简档数据集。该方法还包括响应于接收到第一简档数据集不可用的指示来执行查询过程,该查询过程基于与第一代码段的属性有关的指定标准搜索其他代码段。该方法还包括从查询过程接收搜索结果,其中搜索结果包括第二代码段。实施例还包括至少部分地基于第二代码段生成外插简档数据集。该方法将外插简档数据集与第一代码段相关联地存储在存储器中,并且编译器使用外插简档数据集对第一代码段执行优化过程。
Description
背景技术
本发明总体上涉及用于编译器优化(compiler optimization)的方法、系统和计算机程序产品。更具体地,本发明涉及用于推导用于编译器优化的简档数据的方法、系统和计算机程序产品。
计算机程序通常以有经验的程序员可容易理解的编程语言编写,然后转换成计算机处理器理解的机器语言。对于许多编程语言,编译器或解释器将计算机程序翻译成机器语言。通常,编译器将尝试一次翻译整个程序文件并在此过程结束时报告错误,而解释器将尝试一次一行翻译程序文件且当遇到错误时将停止。
对于使用Java编程语言编写的程序,源代码通常首先被翻译成称为字节码的中间语言,其然后被翻译成机器代码。Java的主要编译器是Javac,其将Java源代码转换成类文件中组织的字节码。称为类加载器的实用程序然后将字节码加载到Java虚拟机(JVM)中。JVM包括解释器和即时(JIT)编译器,其翻译字节码并将所得机器代码提供给计算机处理器用于运行程序。
发明内容
说明性实施例提供用于推导用于编译器优化的简档数据。实施例包括由编译器响应于第一代码段的执行来请求与第一代码段相关联的第一简档数据集。实施例还包括响应于接收到第一简档数据集不可用的指示来执行查询过程,该查询过程基于与第一代码段的属性有关的指定标准搜索其他代码段。实施方式还包括从查询过程中接收搜索结果,其中,搜索结果包括第二代码段。实施例还包括至少部分地基于第二代码段生成外插简档数据集。实施例还包括将外插简档数据集存储在存储器中,使得外插简档数据集在存储器中与第一代码段相关联。实施例还包括由编译器至少部分地基于外插简档数据集对第一代码段执行优化过程。该方面的其他实施例包括记录在一个或多个计算机存储设备上的对应的计算机系统、装置和计算机程序,每个计算机系统和计算机存储设备被配置为执行实施例的动作。
实施例包括计算机可用程序产品。计算机可用程序产品包括计算机可读存储介质和存储在存储介质上的程序指令。
实施例包括计算机系统。计算机系统包括处理器、计算机可读存储器和计算机可读存储介质,以及存储在存储介质上以供处理器经由存储器执行的程序指令。
附图说明
在所附权利要求中阐述了被认为是本发明的新颖特征的特征。然而,当结合附图阅读时,通过参考说明性实施例的以下详细描述,将最好地理解本发明本身以及使用的优选模式、其进一步的目的和优点,其中:
图1描绘了可以实现说明性实施例的数据处理系统的网络的框图;
图2描绘了可以实现说明性实施例的数据处理系统的框图;
图3描绘了根据说明性实施例的示例计算系统的框图;
图4描绘了根据说明性实施例的虚拟机存储器的示例布局的框图;
图5描绘了根据说明性实施例的示例虚拟机的框图;
图6描绘了根据说明性实施例的示例JIT编译器的流程图;
图7描绘了根据说明性实施例的示例简档推导单元的流程图;
图8描绘了根据说明性实施例的备选示例简档推导单元示例虚拟机的框图;
图9描绘了根据说明性实施例的用于生成简档数据的示例过程的流程图;以及
图10描绘了根据说明性实施例的用于生成简档数据的可替代示例过程的流程图。
具体实施方式
软件应用通常以源代码编写,源代码是便于程序员编写和理解的应用的高级表示。专用程序然后被用于将应用转换成机器可以直接执行的另一格式。这些专用程序可以包括编译器、解释器以及组合编译器和解释器的元件的混合系统。然而,为了方便起见,除非另外指明,否则这些专用程序在本文中简称为编译器,并且类似地,转换过程在本文中简称为编译。
一般而言,编译器通常在运行时之前或在运行期间执行编译过程。这两个选项中的每一个提供某些优点。例如,运行时编译器允许可移植性、自动存储器管理和代码的动态加载。另一方面,与在运行时之前编译的应用相比,运行时编译的处理花费具有导致性能降低的潜力。为此,运行时编译器通常还使用优化算法来减少运行时编译对程序性能的影响。
在运行时使用的优化算法通常包括基于简档数据执行优化的简档引导的优化。简档数据通常包括概括在正执行的应用中的某个简档点处的指令的行为的信息。编译器使用简档数据来确定何时和何处编译和优化代码段,诸如方法。例如,在一些情况下,简档数据包括特定指令已被虚拟机执行的次数的计数。该计数允许编译器估计该代码段的未来执行的频率。如果计数超过阈值,则编译器对该代码段应用优化。其他类型的简档数据包括关于达到类型测试的对象的类型、虚拟方法分派的目标、以及阵列和串的长度的信息。
用于收集简档数据的两种常见技术是采样和编程插装。采样涉及使用定时器周期性地收集简档数据,而程序插装涉及使用添加到应用的触发器,诸如计数器增量。当编译器查询简档数据时,它请求这样的简档数据以获得特定方法和字节码偏移。如果已针对特定方法和字节码偏移记录了简档数据,则响应于该请求而返回该简档数据。否则,如果没有简档数据可用于特定方法和字节码偏移,则表示缺少简档数据的标记值(sentinel value)响应于该请求而返回到编译器,并且结果,编译器不能执行预期的简档引导的优化。
由此,说明性实施例认识到,简档数据的缺乏阻碍编译器实现简档引导的优化的能力。例如,在不存在简档信息的情况下,编译器将不能识别程序代码的哪些片段被最频繁地执行(例如,程序内的执行的重复序列),这阻碍了运行时性能。通常,慢速运行时性能是不期望的,因为它导致低程序吞吐量、高存储器开销或其他次优行为。例如,在一个测试实现中,X86机器在不存在简档信息的情况下导致峰值吞吐量降低40%。由此,如果简档信息不可用于编译器,通常将导致显著的性能降级。
说明性实施例包括通过适配编译器优化过程来减少由于缺少简档数据而不执行优化的实例来解决这一挑战的实施例。说明性实施例认识到,当简档数据不可用时,备选信息可用于编译器优化。例如,在说明性实施例中,这样的备选信息包括程序状态信息,例如来自类层次结构表的状态的信息,或外插的简档信息,例如从程序的其他部分外插的简档信息。说明性实施例认识到,与先前的优化相比,由于简档信息的完全不存在,使用这种备选信息的编译器优化提供了显著的性能改进。
本文描述的说明性实施例涉及Java编程语言、Java虚拟机(“JVM”)、JIT编译器、解释器和Java运行时环境。然而,备选实施例结合其他编程语言、虚拟机架构或运行时间环境使用。因此,例如,以Java术语描述的术语,诸如“方法”可与其他术语,诸如“功能”互换。此外,术语“方法”也与术语“类方法”和“对象方法”同义。一种方法是通过名称引用的并且在程序中的各个点可被调用(唤起)的一组代码,这促使执行该方法的代码。
在一些实施例中,在没有代码段的简档信息的情况下,编译器使用程序状态信息来优化代码段。例如,在一些这种实施例中,编译器使用类层次结构表的状态来优化代码段。这种优化的示例涉及对潜在地为多态的方法的调用,诸如对虚拟方法的调用。例如,在具有子类“Circle”(“圆形”)和另一子类“Square”(“正方形”)的抽象类“Shape”(“形状”)中,Circle通过生成圆形形状的显示实现虚拟方法“绘制”,而Square实现生成正方形形状的显示的虚拟方法“绘制”。如果阵列被声明保持形状对象并且利用在每个对象上调用的“绘制”方法被迭代,则对虚拟方法“绘制”的每个调用的实现将取决于对象是圆形还是正方形而具有不同的结果。在一些实施例中,编译器确定是否通常加载一个特定派生类并且相应地优化代码段。例如,如果始终加载或最经常加载Square,则编译器可以内联Square实现并且注入包括类型测试的“导引代码(guard code)”以确认对象是Square。如果是,则可执行内联方法代码,否则恢复对另一对象类型的未优化虚拟方法调用。
在一些这样的实施例中,处理对这样的虚拟方法的调用的编译器访问表示类层次结构表的当前状态的数据,以评估派生的类中的任何类是否已经被加载或实例化。如果编译器确定派生类的一个或多个已经被加载但从未被实例化,则编译器仅内联虚拟方法的父类的实现,因为派生类中没有一个是可行分派目标。
在一些这样的实施例中,通过在对象实例化的点处的剖析仪器来跟踪派生类的实例化。在备选实施例中,通过在快照被拍摄的点处处理应用堆来跟踪派生类的实例化。在其他备选实施例中,通过组合关于哪些类被哪些方法(例如,如在解释器中跟踪的)实例化的数据和来自构建用于从快照点捕获控制流的调用图的数据来跟踪派生类的实例化。在这样的实施例中,编译器将动态执行状态(例如,关于哪些类被哪些方法实例化的数据)与静态分析(例如,来自快照点的数据,诸如来自调用图的数据)组合以产生对在某个代码位置处缺少剖析信息的替代。具有调用图并且实质上对开始于类被实例化的代码位置处的被实例化的类进行可达性分析将确定给定类的实例可以到达哪些方法。朝向在快照点处使用程序状态的这种上下文敏感的方法有利地基于可达性分析过滤出不能到达特定程序点的实例化类。
在一些实施例中,当编译器检查特定代码段的简档信息并确定简档信息不可用时,编译器发起搜索程序代码中满足指定标准的其他代码段的查询过程。如果查询处理返回满足指定标准的代码段,则编译器使用由查询处理找到的代码段生成外插简档信息。
在一些实施例中,在本文中有时称为句法匹配实施例,搜索标准包括用于特定代码段的句法匹配的标准。在备选实施例中,在本文中有时称为语义匹配实施例,搜索标准包括用于特定代码段的语义匹配的标准。在其他备选实施例中,在本文中有时称为上下文匹配实施例,搜索标准包括用于特定代码段的上下文敏感匹配的标准。在另外的备选实施例中,搜索标准包括特定代码段的句法、语义和/或上下文敏感匹配的不同组合。
在一些句法匹配实施例中,处理用于优化的特定代码段的编译器发起针对路径执行频率信息和/或值简档信息的查询过程。在这样的实施例中,编译器基于特定代码段内的序列的句法静态地构造一组感兴趣的句法模式。
例如,对于路径执行频率信息,特定代码段可包括以下字节码序列:
aload_0
instanceof#1“CustomerName”
ifeq
编译器将通过查询字节码偏移和方法来确定是否存在用于ifeq字节码的任何简档信息。如果不存在简档信息,则编译器搜索程序代码中的将对象测试为CustomerName的实例的其他位置(例如,程序代码中的与简档信息相关联的其他代码段,诸如用于从字节码的实例馈送的ifeq的分支偏差信息)。在一些实施例中,编译器通过生成句法搜索标准来执行该搜索,该句法搜索标准包括静态构建的感兴趣句法模式的集合,比如后面跟随有ifeq的CusomerName实例。
在一些实施例中,编译器向每个这样的序列分配唯一标识符。每当类被加载时,编译器扫描其字节码以查找与该组模式的匹配,并且将用于任何模式匹配的方法和字节码偏移存储到以该模式的唯一标识符为键(keyed)的映射数据结构中,其中映射数据结构保持匹配相应的键控模式的方法和字节码偏移的元组。在一些这样的实施例中,编译器随后在简档信息不可用的情况下查找模式id,并且随后检查针对与相同模式匹配的其他位置记录的简档信息。在模式通过值或类型参数化的情况下,编译器使用模式id到参数到参数到方法和表示匹配位置的字节码偏移元组的集合的多级映射。
作为另一实例,对于值简档信息,特定代码段可包含以下序列:
Object obj=table.get(customerName);
String s=obj.toString();
编译器基于上述代码段的句法搜索看到该相同代码模式的其他代码位置,调用所声明类型java/lang/Object的对象上的toString,并使用合并的值简档信息来确定是否应内联CustomerRecord.toString。如果是,则编译器在无任何简档信息的代码位置处用经剖析的导引对代码进行内联。
在一些语义匹配实施例中,处理用于优化的特定代码段的编译器将基于特定代码段内的序列静态地构建感兴趣的语义模式的集合(例如,程序中可以提供来自不同模式的类似信息的其他位置)。例如,特定代码段可包括以下字节码序列:
aload_0
instanceof#1“CustomerName”
ifeq
在一些情况下,如果编译器尝试句法匹配,则其可能在程序代码中找不到存在具有简档信息的句法匹配的代码段的任何其他位置。由此,作为备选实施例,编译器搜索能够提供与具有不同句法模式的代码段相关联的类似简档信息的其他代码段。例如,程序代码可以包括与简档信息相关联的代码段,其中该代码段如下:
Object obj=table.get(customerName);
String s=obj.toString();
在一些这样的实施例中,编译器将针对任何这样的模式匹配的方法和字节码偏移存储到以模式的唯一标识符为键的映射数据结构中,其中映射数据结构保持匹配相应的键控模式的方法和字节码偏移的元组。遵循该示例,在一些实施例中,编译器确定接收机是CustomerName类型对另一类型的概率,然后使用该概率来估计特定实现是否应被内联为toString调用的最可能调用目标。
在一些实施例中,编译器使用用于识别代码中的逻辑相关条件的规则搜索可以提供与具有不同句法模式的代码段相关联的类似简档信息的其他代码段。例如,特定代码段可以包括以下序列:
boolean condition=getSomeCondition();
If(condition)
{
在一些这种实施例中,编译器检查用于上述代码段的简档信息。如果编译器确定不存在用于该代码段的简档信息,则编译器接着基于该特定代码段内的序列来构造感兴趣的语义模式的集合(例如,程序中可以提供来自不同模式的类似信息的其他位置)。编译器将针对任何这样的模式匹配的方法和字节码偏移存储到以模式的唯一标识符为键的映射数据结构中。例如,模式匹配可以包括以下序列:
boolean condition=getSomeCondition();
if(!condition)
{
…
}
在一些这种实施例中,编译器检查用于上述代码段的简档信息。如果编译器确定上述代码段具有简档信息,则编译器对正在执行的特定代码段执行优化。例如,如果简档信息指示分支偏差,那么编译器可使用此信息来推导特定代码段的分支偏差且相应地优化特定代码段。
在一些实施例中,编译器使用用于看穿使两个代码模式实际上语义上类似的事实模糊的分配的规则来搜索能够提供与具有不同句法模式的代码段相关联的类似简档信息的其他代码段。例如,特定代码段可以包括以下序列:
Object obj=table.get(customerName);
String s=obj.toString();
在一些这种实施例中,编译器检查用于上述代码段的简档信息。如果编译器确定不存在用于该代码段的简档信息,则编译器接着基于规则和该特定代码段内的序列来构造感兴趣的语义模式的集合。例如,模式匹配可以包括以下序列:
Object obj1=table.get(customerName);
...其它不相关代码...
Object obj=obj1;
String s=obj.toString();
在一些这种实施例中,编译器检查用于上述代码段的简档信息。如果编译器确定上述代码段具有简档信息,则编译器对正在执行的特定代码段执行优化。例如,如果简档信息指示对象的类型,则编译器可以使用该信息来推导特定代码段的对象的类型,并且通过对推导的对象的类型执行简档引导内联来优化特定代码段。
在一些这样的实施例中,编译器使用多种模式识别技术中的任一种来找到语义上类似的代码,例如达到定义、抽象解释、或值传播。这样的语义匹配实施例允许通过基于代码段的语义进行搜索来比句法匹配更完全地对代码段进行匹配,而对代码的实际结构的关注较少。
在一些上下文匹配实施例中,处理特定代码段以进行优化的编译器将例如根据句法匹配或语义匹配实施例来识别候选代码段。当编译器执行句法或语义搜索时,编译器正在搜索看起来正在做与经历优化处理的特定代码段相同的事情的其他操作。例如,编译器可以搜索抽象Shape类的“绘制”方法,以确定Shape是Square的概率。然而,有时出现的问题在于,可能具有许多不同的上下文相关和不相关的地方,这些地方针对正方形测试形状或者给予你Shape是Square的概率。例如,应用可以作为绘制不同复合形状的较大代码段的一部分放置在调用针对Square的“绘制”的应用代码中。针对正方形测试形状的这些位置包括编译器正在寻找的信息的类型。然而,那些位置中的一些将针对与经历优化处理的特定代码相同的复合形状,并且因此将在上下文上相似,而其他位置将针对其他复合形状,并且因此将在上下文上不相似。这种情况可能导致不确定的结果,因为类型测试概率可能根据绘制哪种复合形状而非常不同。由此,如果编译器简单地在句法或语义上聚合类似的代码,则结果可能太不确定而不能用作简档数据的替代。
因此,上下文匹配实施例例如根据句法匹配或语义匹配实施例识别候选代码段,并且然后通过评估候选代码段周围的代码段来执行候选代码段中的每一个的上下文敏感分析。在这样的实施例中,编译器进一步搜索候选代码段之前的特定重要操作和/或候选代码段之后的特定重要操作。在一些实施例中,根据可调谐参数设置或限制操作的长度。被搜索的操作的长度越长,就对其进行搜索以进行匹配的处理而言越昂贵,并且编译器越不可能找到匹配,但是所找到的任何搜索结果越可能产生可靠的信息。
在一些上下文匹配实施例中,编译器生成匹配模式,该匹配模式包括针对经历优化处理的特定代码段的句法或语义搜索标准,以及与踪迹信息相关的标准,该标准包括作为对特定代码段的前缀和/或后缀操作的一些操作长度。编译器执行句法或语义搜索以识别匹配搜索标准并且具有剖析信息的候选代码段。对于每个候选代码段,编译器为每个候选代码段生成踪迹,该踪迹包括在该候选代码段之前和/或之后的指令序列。一旦编译器已经生成针对每个候选代码段的踪迹,编译器检查每个踪迹以标识与踪迹标准匹配的其他模式,从而产生针对每个候选代码段的被识别和剖析的模式的踪迹。
在一些上下文匹配实施例中,一旦编译器已经生成候选代码段的被识别和剖析的模式的踪迹,编译器就将这些踪迹插入到候选代码段的数据结构中。在一些实施例中,数据结构的布置至少部分基于特定代码段与每个候选代码段之间的相应相似度。例如,在一些实施例中,编译器将这些踪迹插入到后缀树数据结构中以允许快速搜索和模糊匹配。编译器然后在没有剖析信息的点开始,模式匹配特定代码段,从特定代码段的前缀和后缀操作生成踪迹,并将踪迹映射到模式踪迹。编译器采用此模式踪迹且使用已知后缀树匹配算法来将模式踪迹与具有简档数据的一个或多个现有踪迹匹配。然后,编译器使用所匹配的踪迹的剖析数据来推导用于经历优化处理的特定代码段的替代剖析信息。未知点。例如,特定代码段可以包括以下序列,该序列包括具有简档数据的方法和不具有简档数据的方法:
在此实例中,对arg2.toString()的调用不具有简档信息以告诉编译器最有可能调用toString的哪一实现。在一些上下文匹配实施例中,编译器选择踪迹,例如包括在上面的样本代码中示出的所有语句的踪迹。在该示例中,编译器具有匹配操作的实例和虚拟调用的模式。编译器取得踪迹语句并将语句踪迹减少至以下模式踪迹:
Instanceof(Object,CustomerRecord)->instanceof(Object,CustomerRecord)->
virtual_call(CustomerRecord,toString)->virtual_call(CustomerRecord,toString)
->equals(Object,Object)
编译器使用该模式踪迹来匹配搜索具有简档数据的踪迹,并尝试找到与匹配序列中的第二virtual_call的简档数据最接近的匹配。编译器然后可以使用匹配踪迹来提供要被聚合并用于预测toString调用的可能分派目标的接收器简档信息。
为了描述的清楚起见,并且不暗示对其的任何限制,使用一些示例配置来描述说明性实施例。根据本公开,本领域普通技术人员将能够设想用于实现所描述的目的的所描述的配置的许多改变、适配和修改,并且在说明性实施例的范围内设想相同的改变、适配和修改。
此外,在附图和说明性实施例中使用数据处理环境的简化图。在实际计算环境中,在不脱离说明性实施例的范围的情况下,可存在本文未示出或描述的额外结构或组件,或不同于所示但与本文所述类似功能的结构或组件。
此外,仅作为实例,针对特定的实际或假设的部件描述说明性实施例。例如,不同说明性实施例所描述的步骤可以被适配成用于提供针对机器学习分类器模型所做出的决策的解释。
这些和其他类似产物的任何特定表现不旨在限制本发明。在说明性实施例的范围内,可以选择这些和其他类似产物的任何合适的表现。
本公开中的示例仅用于描述的清晰,并且不限于说明性实施例。在此列出的任何优点仅是实例并且不旨在限制这些说明性实施例。通过具体的说明性实施例可以实现另外的或不同的优点。此外,特定说明性实施例可具有上文所列的优点中的一些、全部或没有其任一个。
此外,可以相对于任何类型的数据、数据源或通过数据网络对数据源的访问来实现说明性实施例。在本发明的范围内,任何类型的数据存储装置可以在数据处理系统本地或通过数据网络将数据提供给本发明的实施例。在说明性实施例的范围内,在使用移动装置描述实施例的情况下,适于与移动装置一起使用的任何类型的数据存储装置可在移动装置本地或通过数据网络将数据提供到此实施例。
使用具体代码、对比解释、计算机可读存储介质、高级特征、历史数据、设计、架构、协议、布局、示意图、以及工具描述示例性实施方式仅作为实例并且不限于示例性实施方式。此外,为了描述的清楚,在一些实例中使用特定软件、工具和数据处理环境仅作为实例来描述说明性实施例。说明性实施例可以结合其他可比较的或相似用途的结构、系统、应用或架构使用。例如,在本发明的范围内,其他类似的移动设备、结构、系统、应用或架构可以与本发明的这种实施例结合使用。说明性实施例可以在硬件、软件或其组合中实现。
本公开中的示例仅用于描述的清晰,并且不限于说明性实施例。另外的数据、操作、动作、任务、活动和操纵将从本公开想到,并且在说明性实施例的范围内设想相同的数据、操作、动作、任务、活动和操纵。
在此列出的任何优点仅是实例并且不旨在限制这些说明性实施例。通过具体的说明性实施例可以实现另外的或不同的优点。此外,特定说明性实施例可具有上文所列的优点中的一些、全部或没有其任一个。
参考附图并且具体参考图1和2,这些图是其中可以实现说明性实施例的数据处理环境的示例图。图1和2仅是示例并且不旨在断言或暗示关于其中可以实现不同实施例的环境的任何限制。特定实现方式可以基于以下描述对所描绘的环境做出许多修改。
图1示出了其中可以实现说明性实施例的数据处理系统网络的框图。数据处理环境100是其中可以实施说明性实施例的计算机网络。数据处理环境100包括网络102。网络102是用于提供在数据处理环境100内连接在一起的不同设备和计算机之间的通信链路的介质。网络102可以包括诸如有线、无线通信链路或光纤电缆之类的连接。
客户端或服务器仅是连接到网络102的某些数据处理系统的示例角色,并且不旨在排除这些数据处理系统的其他配置或角色。数据处理系统104耦合到网络102。软件应用可以在数据处理环境100中的任何数据处理系统上执行。被描述为在图1中的处理系统104中执行的任何软件应用可被配置成以类似方式在另一数据处理系统中执行。在图1中的数据处理系统104中存储或产生的任何数据或信息可以被配置成以类似方式在另一数据处理系统中存储或产生。数据处理系统(诸如数据处理系统104)可以包含数据并且可以具有在其上执行计算过程的软件应用或软件工具。在一个实施例中,数据处理系统104包括存储器124,该存储器包括应用105A,该应用105A可以被配置为根据一个或多个实施例实现在此描述的数据处理器功能中的一个或多个。
服务器106与存储单元108一起耦合到网络102。存储单元108包括数据库109,该数据库109被配置为存储如在此相对于不同实施例所描述的数据,例如图像数据和属性数据。服务器106是常规的数据处理系统。在一实施例中,服务器106包括应用105B,该应用105B可被配置成实现根据一个或多个实施例的本文描述的处理器功能中的一个或多个。
客户端110、112和114也耦合到网络102。诸如服务器106或客户端110、112或114的常规数据处理系统可以包含数据并且可以具有在其上执行常规计算过程的软件应用或软件工具。
仅作为示例,并且不暗示对这样的架构的任何限制,图1描绘了在实施例的示例实现中可用的某些组件。例如,服务器106和客户端110、112、114仅作为示例被描绘为服务器和客户端,而不是暗示对客户端-服务器架构的限制。作为另一实例,实施例可以分布在几个数据处理系统以及所示的数据网络上,而在说明性实施例的范围内,可以在单个数据处理系统上实现另一实施例。常规数据处理系统106、110、112和114还表示集群、分区和适于实现实施例的其他配置中的示例节点。
设备132是本文描述的常规计算设备的示例。例如,设备132可以采取智能电话、平板计算机、膝上型计算机、固定或便携式形式的客户端110、可穿戴计算设备或任何其他合适的设备的形式。在一实施例中,设备132向服务器106发送由神经网络应用105B执行一个或多个数据处理任务的请求,诸如发起神经网络的在本文中描述的进程。被描述为在图1中的另一常规数据处理系统中执行的任何软件应用可被配置成以类似方式在设备132中执行。在图1中的另一常规数据处理系统中存储或产生的任何数据或信息可以被配置成以类似方式在设备132中存储或产生。
服务器106、存储单元108、数据处理系统104、以及客户端110、112和114、以及设备132可以使用有线连接、无线通信协议或其他合适的数据连接性耦合到网络102。客户端110、112和114可以是例如个人计算机或网络计算机。
在所描绘的示例中,服务器106可以向客户端110、112和114提供诸如引导文件、操作系统映像和应用之类的数据。在该示例中,客户端110、112和114可以是服务器106的客户端。客户端110、112、114或其某种组合可以包括它们自己的数据、引导文件、操作系统映像和应用。数据处理环境100可以包括附加的服务器、客户端和未示出的其他设备。
在所描绘的示例中,存储器124可以向处理器122提供数据,诸如引导文件、操作系统映像和应用。处理器122可包括其自身的数据、引导文件、操作系统映像和应用。数据处理环境100可以包括附加的存储器、处理器和未示出的其他设备。
在所描绘的示例中,数据处理环境100可以是互联网。网络102可以表示使用传输控制协议/互联网协议(TCP/IP)和其他协议来彼此通信的网络和网关的集合。互联网的核心是主节点或主计算机(包括路由数据和消息的数千个商业、政府、教育和其他计算机系统)之间的数据通信链路的骨架。当然,数据处理环境100还可以被实现为许多不同类型的网络,诸如例如内联网、局域网(LAN)或广域网(WAN)。图1旨在作为实例,而不是作为对于不同说明性实施例的架构限制。
除了其他用途之外,数据处理环境100可以用于实现其中可以实现说明性实施例的客户端-服务器环境。客户机-服务器环境使得软件应用和数据能够跨网络分布,以使得应用通过使用常规客户机数据处理系统与常规服务器数据处理系统之间的交互来发挥功能。数据处理环境100还可以采用面向服务的架构,其中,跨网络分布的可互操作的软件组件可以被一起封装为一致的业务应用。数据处理环境100还可以采取云的形式,并且采用服务递送的云计算模型,用于使得能够方便地、按需地网络访问可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储装置、应用、虚拟机和服务)的共享池,其能够以最小的管理努力或与服务的提供商的交互快速地供应和释放。
参见图2,该图描绘了其中可以实现说明性实施例的数据处理系统的框图。数据处理系统200是传统计算机的实例,诸如图1中的数据处理系统104、服务器106或客户端110、112和114,或者对于说明性实施例实施过程的计算机可用程序代码或指令可以位于其中的另一类型的设备。
数据处理系统200还表示传统的数据处理系统或其中的配置,诸如图1中的传统的数据处理系统132,实施说明性实施例的处理的计算机可用程序代码或指令可以位于其中。数据处理系统200仅作为示例被描述为计算机,而不限于此。呈其他装置(例如,图1中的装置132)的形式的实施例可例如通过添加触摸接口来修改数据处理系统200,且甚至从数据处理系统200消除某些所描绘的组件,而不脱离本文中所描述的数据处理系统200的操作和功能的一般描述。
在所描绘的示例中,数据处理系统200采用包括北桥和存储器控制器中枢(NB/MCH)202和南桥和输入/输出(I/O)控制器中枢(SB/ICH)204的中心架构。处理单元206、主存储器208和图形处理器210耦合到北桥和存储器控制器中枢(NB/MCH)202。处理单元206可以包含一个或多个处理器并且可以使用一个或多个异构处理器系统来实现。处理单元206可以是多核处理器。在某些实现方式中,图形处理器210可以通过加速图形端口(AGP)耦合到NB/MCH202。
在所描绘的示例中,局域网(LAN)适配器212耦合到南桥和I/O控制器中枢(SB/ICH)204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、通用串行总线(USB)和其他端口232、以及PCI/PCIe设备234通过总线238耦合到南桥和I/O控制器中枢204。硬盘驱动器(HDD)或固态驱动器(SSD)226和CD-ROM 230通过总线240耦合到南桥和I/O控制器中枢204。PCI/PCIe设备234可包括例如以太网适配器、插入卡和用于笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 224可以是例如闪存二进制输入/输出系统(BIOS)。硬盘驱动器226和CD-ROM 230可以使用例如集成驱动电子器件(IDE)、串行高级技术附件(SATA)接口或诸如外部SATA(eSATA)和微SATA(mSATA)的变体。超级I/O(SIO)设备236可以通过总线238耦合到南桥和I/O控制器中枢(SB/ICH)204。
诸如主存储器208、ROM 224或闪存(未示出)的存储器是计算机可用存储装置的一些示例。硬盘驱动器或固态驱动器226、CD-ROM 230和其他类似可用的装置是包括计算机可用存储介质的计算机可用存储装置的一些实例。
操作系统运行在处理单元206上。操作系统协调并提供图2中的数据处理系统200内的不同组件的控制。操作系统可以是用于任何类型的计算平台的市售操作系统,包括但不限于服务器系统、个人计算机和移动设备。面向对象的或其他类型的编程系统可以与操作系统结合操作,并且提供从在数据处理系统200上执行的程序或应用对操作系统的调用。
操作系统、面向对象的编程系统和应用或程序(诸如图1中的应用105)的指令位于存储设备上(诸如以硬盘驱动器226上的代码226A的形式),并且可被加载到一个或多个存储器(诸如主存储器208)中的至少一个中以供处理单元206执行。示例性实施方式的处理可以通过使用计算机实现的指令由处理单元206执行,这些指令可以位于存储器中,诸如,例如,主存储器208、只读存储器224、或者一个或多个外围设备中。
此外,在一种情况下,代码226A可通过网络201A从远程系统201B下载,其中类似代码201C被存储在存储装置201D上。在另一情况下,代码226A可通过网络201A被下载到远程系统201B,其中所下载的代码201C被存储在存储装置201D上。
图1-2中的硬件可以取决于实现方式而变化。除了或代替图1-2中所描绘的硬件,可使用其他内部硬件或外围设备,例如快闪存储器、等效非易失性存储器或光盘驱动器等。此外,示例性实施例的过程可以应用于多处理器数据处理系统。
在一些说明性示例中,数据处理系统200可以是个人数字助理(PDA),其通常配置有闪速存储器以提供用于存储操作系统文件和/或用户生成的数据的非易失性存储器。总线系统可包括一条或多条总线,诸如系统总线、I/O总线和PCI总线。当然,总线系统可以使用在附接到结构或架构的不同组件或设备之间提供数据传送的任何类型的通信结构或架构来实现。
通信单元可包括用于发送和接收数据的一个或多个设备,诸如调制解调器或网络适配器。存储器可以是例如主存储器208或高速缓存,诸如在北桥和存储器控制器中枢202中发现的高速缓存。处理单元可包含一个或以上处理器或CPU。
图1-2中描绘的示例和上述示例不意味着暗示架构限制。例如,数据处理系统200除了采取移动或可穿戴设备的形式之外还可以是平板计算机、膝上型计算机或电话设备。
在计算机或数据处理系统被描述为虚拟机、虚拟设备或虚拟组件的情况下,虚拟机、虚拟设备或虚拟组件以数据处理系统200的方式使用数据处理系统200中描绘的一些或所有组件的虚拟化表现来操作。例如,在虚拟机、虚拟设备或虚拟组件中,处理单元206表现为主机数据处理系统中可用的所有或某些数量的硬件处理单元206的虚拟化实例,主存储器208表现为主机数据处理系统中可用的主存储器208的所有或某个部分的虚拟化实例,并且盘226表现为主机数据处理系统中可用的盘226的所有或某个部分的虚拟化实例。在这种情况下,主机数据处理系统由数据处理系统200表示。
参见图3,该图描绘了根据说明性实施例的示例计算系统300的框图。该图描绘了包括虚拟机314(诸如JVM)的计算系统300的实施例。在一些实施例中,虚拟机314根据图9或10中所示的流程图执行过程。在一些实施例中,虚拟机314是图1的应用105A/105B的实例。
在一些实施例中,计算系统300还包括编译器304和操作系统312。操作系统312在计算机硬件上运行并且为由虚拟机314运行的应用提供操作环境。虚拟机314包括类加载器子系统316、解释器318、JIT编译器320和存储器322。存储器322的实施例可以包括任何形式的电子或计算机可用存储设备。在一些实施例中,本文描述的功能分布在多个系统中,这些系统可以包括基于软件和/或硬件的系统的组合,例如专用集成电路(ASIC)、计算机程序或智能电话应用。
在一些实施例中,计算系统300包括源代码302,该源代码302包含已用特定编程语言(诸如Java、C、C++、C#、Ruby或Perl)编写的代码。由此,源代码302遵从用于相关联的语言的句法和/或语义规则的特定集合。例如,以Java编写的代码遵守Java语言规范。然而,由于规范随时间被更新和修改,源代码302可与指示源代码302遵循的规范的修改的版本号相关联。
在一些实施例中,编译器304将源代码302变换成类文件306,例如以字节码的形式,表示要执行的程序。例如,在一些实施例中,源代码302包括被输入到编译器304的一个或多个文件。编译器304处理一个或多个文件并将所得到的字节码输出为一个或多个类文件306。
在一些实施例中,类文件306然后被包括运行时环境310和操作系统312的执行引擎308加载和执行。运行时环境310包括虚拟机314,其接收类文件306并将类文件306的字节码输入到解释器318或JIT编译器320中。解释器318和JIT编译器320生成虚拟机314输出至操作系统312以便运行程序的机器代码。在一些实施例中,虚拟机314在程序正在执行时处理程序的字节码。因此,虚拟机314的处理时间影响程序的运行时性能。在一些实施例中,JIT编译器320使用本文描述的优化技术来减少虚拟机314的处理时间,并且由此改进程序的运行时性能。
在一些实施例中,虚拟机314使用解释器318和JIT编译器320来使用解释和编译技术的组合来执行程序。在一些这样的实施例中,虚拟机314最初通过在收集与程序行为有关的简档数据时使用解释器318解释表示程序的字节码来开始。例如,一些实施例收集表示代码的不同部分或块由虚拟机314执行的频率的简档数据。在一些实施例中,当执行解释的方法调用时,虚拟机314递增“调用计数器”,该调用计数器是存储在与所调用的方法相关联的简档结构中的元数据。当调用计数器超过编译阈值时,虚拟机314生成编译线程(或使用现有编译线程)以编译/优化该方法。在备选实施例中,虚拟机314跟踪在使用“后边沿计数器”的方法中的循环迭代通过的次数,并且当后边沿计数器达到编译阈值时触发编译。
在一些实施例中,一旦代码块超过指定阈值(是“热”),虚拟机314调用JIT编译器320以使用优化技术来减少由虚拟机314用于将代码块处理为机器级指令的处理时间量。然而,一些这样的实施例包括未优化程序执行时段,在此期间,虚拟机314处理代码块(例如,通过以解释的模式执行代码)直到在将块标识为热代码块之前的JIT编译。
在一些实施例中,虚拟机314实现本文所描述的技术以在程序执行期间,包括在程序执行期间当极少或没有简档数据可用于一个或多个代码段或代码块时,执行编译器优化。这样的程序执行时段不限于程序执行的早期或初始时段,而是可以贯穿程序的执行而发生。例如,由于执行类的动态加载的强大能力,基于Java技术的程序可以在程序执行期间的任何时刻实时地改变。类的该动态加载使虚拟机314在类改变之前收集的编译器优化和简档数据无效。当编译器优化和简档数据由于动态加载而变为无效时,这创建可在程序执行期间的任何点发生的程序执行周期,在该周期期间很少或没有简档数据可用于与动态加载的类相关联的代码段。在一些实施例中,虚拟机314使用本文所描述的技术,其允许在任何此类程序执行时段期间对代码段的编译器优化。与在这样的时段期间缺乏优化的实施例相比,这样的实施例具有在整个程序执行中改善程序性能的潜力。
虽然所示实施例将存储器322示出为虚拟机314的一部分,但备选实施例将存储器322定位在虚拟机314之外的别处,但与虚拟机314通信。存储器322的实施例包括单个电子或计算机可用存储设备上的存储器或分布在任何数量的电子或计算机可用存储设备之间的存储器。
参见图4,该图描绘了根据说明性实施例的虚拟机存储器400的示范性布局的框图。虽然虚拟机存储器400的组件可以被图示或称为存储器区域、块或其他,但是并不要求存储器区域是连续的。在一些实施例中,虚拟机存储器400是图3的存储器322的示例。
在所示实施例中,虚拟机存储器400包括堆402、类数据区404、线程数据区412和方法区418。在实施例中,堆402表示运行时数据区域,从该运行时数据区域中分配用于类实例和阵列的存储器。在实施例中,类数据区404表示存储有关每个单独类的数据的存储器区域。在实施例中,对于每个加载的类,类数据区404包括表示来自每个类的常数表的数据的运行时常数池406、表示用于类的方法的虚拟机指令的方法代码408、以及表示诸如每个类的静态字段数据之类的数据的字段和方法数据410。方法区域418包括跨虚拟机中运行的所有线程共享的类数据,包括运行时常数池420。
在所示出的实施例中,线程数据区域412表示存储器区域,其中存储特定于各个线程中的每一个的结构。对于在虚拟机(例如,图3的虚拟机314)上执行的每个线程,线程区域412包括线程堆栈414和程序计数器416。在实施例中,程序计数器416存储针对每个相应线程正在执行的虚拟机指令的当前地址。因此,当线程步进通过指令时,程序计数器被更新以保持当前指令的索引。在一实施例中,线程堆栈414存储其相应线程的帧,所述帧保持局部变量和部分结果,且还用于方法调用。
参见图5,该图描绘了根据说明性实施例的示例虚拟机500的框图。在一些实施例中,虚拟机500是图3的虚拟机314的示例。
在所示实施例中,虚拟机500包括JIT编译器502和解释器504。虽然所示实施例将JIT编译器502和解释器504描绘为单独的组件,但是在备选实施例中,JIT编译器502和解释器504可以集成到单个组件中。在一些实施例中,虚拟机500包括控制字节码将由JIT编译器502编译还是由解释器504解释的决策机制506。在一些实施例中,决策机制506基于简档数据524对于被调用段的可用性选择JIT编译器502。然而,本文公开的实施例允许针对缺少简档数据的代码段推导简档信息。这样的实施例允许决策机制选择JIT编译器502,即使在简档数据524对于给定的被调用代码段不可用或不够的情况下。例如,在一些实施例中,决策机制506基于所调用的代码段中的代码的类型来选择JIT编译器502,而不管简档数据存储器524的可用性。
在所示实施例中,虚拟机500包括类加载器子系统514,类加载器子系统514提供用于加载类型的机制,所述类型是类和接口,并且使它们对于JIT编译器502和解释器504是可访问的。在所示实施例中,虚拟机500还包括频率数据分量520和类型数据分量522,它们是获得用于在简档数据存储器524中构建简档数据的信息的剖析仪器的示例。类型数据分量522收集关于程序中的每个变量的类型信息,并将类型信息记录在简档数据存储器524中。频率数据分量520收集指示每个功能被执行多少次的频率信息并将该信息记录在简档数据存储器524中。
在一些实施例中,JIT编译器502执行第二级编译以创建作为优化代码输出并且由执行组件516执行的代码(例如,JIT代码),其更新数据堆518并且在操作系统526上执行应用。在一些实施例中,JIT编译器502使用来自简档数据存储器524的简档数据来优化代码段。在一些实施例中,如果没有用于给定代码段的简档数据,则JIT编译器502将替代地尝试使用备选数据来优化代码段,备选数据诸如类层次结构数据512或来自应用堆510的在拍摄应用快照508的点处的数据(例如,快照在应用的状态中保留)。
在一些实施例中,存在将执行组件516耦合到JIT编译器502和解释器504中的每一个的故障安全路径。当优化代码(例如,优化JIT代码)中的某些假设在运行时间期间变得无效并且执行需要落入解释器时,这些失效安全路径将控制从执行组件516传递到解释器504,解释器不做这样的假设。
参见图6,该图描绘了根据说明性实施例的示例JIT编译器600的框图。虽然所示实施例示出了JIT编译器600,但是备选实施例包括其他类型的优化编译器。在一些实施例中,JIT编译器600是图5的JIT编译器502的示例。
在一些实施例中,JIT编译器600包括检测器602,检测器602例如以字节码接收代码段612,并且检测或推导关于代码段的信息,诸如字节码表示的指令的类型。例如,字节码可以涉及对潜在地多态的方法的调用,诸如对虚拟方法的调用,或具有要由JIT编译器600优化的可能性的其他类型的代码。在所示实施例中,检测器602向简档请求模块604发送关于由检测器602检测到的代码段612的信息。简档请求模块604接收关于代码段612的信息,该信息触发简档请求模块604请求代码段612的简档数据。例如,在一些实施例中,简档请求模块604通过发送对与特定方法相关联的简档信息和与代码段612相关联的字节码偏移的请求来请求简档信息。在一些实施例中,本文描述的功能分布在多个系统中,这些系统可以包括基于软件和/或硬件的系统的组合,例如专用集成电路(ASIC)、计算机程序或智能电话应用。
在一些实施例中,JIT编译器600包括确定简档请求模块604是否响应于请求而接收到任何简档信息的决策模块606。如果是,则简档数据被提供给优化编译器608。否则,简档推导单元610通过缺少简档数据来触发以生成可以在缺少简档数据的情况下作为替代方案用于优化的数据。例如,在一些实施例中,简档推导单元610接收由检测器602检测到的关于代码段612的信息和相关联的状态信息614作为用于生成备选简档数据的基础。在一些实施例中,简档推导单元610直接从检测器602接收由检测器602检测到的信息,而在备选实施例中,简档推导单元610接收从简档请求模块604转发的由检测器602检测到的信息。简档备选数据然后被提供给优化编译器608。优化编译器608接收简档数据或简档备选数据,并使用其接收到的任何数据来创建经优化可执行代码,该经优化可执行代码优化编译器608输出到执行组件(例如,图5的执行组件516)以供在操作系统(例如,图5的操作系统526)上执行。
参见图7,该图描绘了根据说明性实施例的示例简档推导单元700的框图。在一些实施例中,简档推导单元700是图6的简档推导单元610的示例。
在所示实施例中,简档推导单元700接收与正在编译的代码段相关联的代码段信息706。例如,在实施方式中,代码段信息706是简档推导单元610从检测器602接收的关于图6中的代码段612的由检测器602检测的信息的实例。
在所示实施例中,简档推导单元700在没有代码段的简档信息的情况下使用状态信息708来优化代码段。例如,在一些这样的实施例中,编译器使用类层次结构数据(例如,图5的类层次结构数据512)来优化代码段。
在所示实施例中,简档推导单元700包括查询构建器702、查询引擎704和结果处理器710。在一些实施例中,本文描述的功能分布在多个系统中,这些系统可以包括基于软件和/或硬件的系统的组合,例如专用集成电路(ASIC)、计算机程序或智能电话应用。
在一些实施例中,查询构建器702评估代码段信息706以生成搜索状态信息708的标准。例如,在一些实施例中,查询构建器702生成用于搜索表示类层次结构表的当前状态的数据的一个或多个标准。查询引擎704从查询构建器702接收一个或多个标准并发起对一个或多个数据源的搜索。结果处理器710接收查询引擎704发起的一个或多个查询的结果,并且过滤可用于优化过程的数据的结果。结果处理器710将过滤的结果作为优化数据714提供给优化编译器,诸如图6的优化编译器608。在一些实施例中,结果处理器710产生优化数据714,其格式与图6中的简档请求模块604输出的简档数据相同。
作为示例,在一实施例中,查询构建器702识别代码段信息706涉及对潜在地多态的方法的调用,诸如对虚拟方法的调用,并且因此生成对状态信息708的查询以确定是否通常加载一个特定派生类,使得代码段可被相应地优化。在一些这样的实施例中,查询构建器702生成已经被加载的任何派生类作为查询的标准。在备选实施例中,查询构建器702还生成已经实例化的任何派生类作为查询的另一标准。在一些实施例中,查询引擎704从查询构建器702接收一个或多个标准(搜索已被加载的派生类)并且发起状态信息708(诸如类层次结构数据)的搜索。结果处理器710接收由查询引擎704发起的一个或多个查询的结果,其在该示例中可以包括已经加载的类的列表,并且可替代地还可以包括已经被实例化的类的列表。结果处理器710针对可用于优化过程的数据过滤这些结果,例如通过确定存在总是或最频繁地从加载的和/或实例化的类中被调用的一个特定派生类。结果处理器710将过滤的结果作为优化数据714提供至优化编译器,诸如图6的优化编译器608,其在该示例中可以内联通常调用的派生类并且注入包括类型测试的“导引代码”以确认对象是派生类。在一些实施例中,结果处理器710产生优化数据714,其格式与图6中的简档请求模块604输出的简档数据相同。
在一些这样的实施例中,在对象实例化的点处,通过剖析仪器722(诸如图5的频率数据分量520)来跟踪派生类的实例化。在备选实施例中,通过在快照716被拍摄的点处处理应用堆718来跟踪派生类的实例化。在其他备选实施例中,通过组合关于哪些类被哪些方法实例化(例如,如在解释器724中跟踪的)的数据和来自调用图726的数据或构建成从快照716捕获控制流的其他类层次结构数据720来跟踪派生类的实例化。在这样的实施例中,编译器将动态执行状态(例如,关于哪些类被哪些方法实例化的数据)与静态分析(例如,来自快照点的数据,诸如来自调用图726的数据)组合以产生对在某个代码位置处缺少剖析信息的替代。具有调用图726并且实质上对开始于类被实例化的代码位置处的实例化的类进行可达性分析揭示给定类的实例可以到达哪些方法。朝向在快照点处使用程序状态的这种上下文敏感的方法有利地基于可达性分析过滤出不能到达特定程序点的实例化类。
参考图8,该图描绘了根据说明性实施例的备选示例简档推导单元800的框图。在一些实施例中,简档推导单元800是图6的简档推导单元610的示例。
在所示实施例中,简档推导单元800接收与正在编译的代码段相关联的代码段信息820。例如,在实施方式中,代码段信息820是简档推导单元610从检测器602接收的关于图6中的代码段612的由检测器602检测的信息的实例。
在所示实施例中,简档推导单元800在没有代码段的简档信息的情况下使用状态信息822来优化代码段。例如,在一些这样的实施例中,编译器使用类层次结构数据(例如,图5的类层次结构数据512)来优化代码段。
在所示实施例中,简档推导单元800包括查询构建器802、查询引擎804、查询结果处理器806、踪迹生成器808、踪迹分析器810、上下文匹配模块812、上下文结果处理器814和存储器818。在一些实施例中,本文描述的功能分布在多个系统中,其可以包括基于软件和/或硬件的系统的组合,例如专用集成电路(ASIC)、计算机程序或智能电话应用。
在一些实施例中,查询构建器802评估代码段信息820以生成用于搜索状态信息822的标准。例如,在一些实施例中,查询构建器802生成用于搜索表示类层次结构表的当前状态的数据的一个或多个标准。查询引擎804从查询构建器802接收一个或多个标准,并发起对状态信息822和/或一个或多个其他数据源的搜索。查询结果处理器806接收查询引擎804发起的一个或多个查询的结果,并且将所得到的代码段作为候选代码段836存储在存储器818中。查询结果处理器806还向踪迹生成器808提供状态信息822。
踪迹生成器808从调用代码段之前和调用代码段之后的应用代码中检索包括上下文代码段的语句踪迹。踪迹生成器808然后将语句踪迹作为踪迹数据838存储在存储器818中。在一些实施例中,踪迹生成器808然后从查询结果检索候选代码段836中的每一个的相应结果上下文踪迹,其中结果上下文踪迹包括来自在结果代码段之前和之后的应用代码的结果上下文代码段。在一些实施例中,踪迹分析器810将上下文代码段减少至所调用的模式踪迹。在一些实施例中,踪迹分析器810随后从候选代码段836及其相应模式踪迹产生后缀树数据结构。踪迹分析器810然后将后缀树数据结构作为后缀树数据840存储在存储器818中。上下文匹配模块812将调用的模式踪迹映射到后缀树以识别最接近的匹配结果和具有相关简档数据的结果上下文代码段。上下文匹配模块812将最接近的匹配结果和结果上下文代码段提供给上下文结果处理器814。上下文结果处理器814基于来自上下文匹配模块812找到的最接近的匹配结果的数据来生成外插简档数据集。上下文结果处理器814向优化编译器(诸如图6的优化编译器608)提供外插的简档数据集,在该示例中,优化编译器可以内联通常调用的派生类并且注入包括类型测试的“导引代码”以确认对象是派生类。在一些实施例中,上下文结果处理器814产生与由图6中的简档请求模块604输出的简档数据具有相同格式的优化数据842。
在一些这种实施例中,在对象实例化的点处,通过诸如图5的频率数据分量520的剖析仪器830来跟踪派生类的实例化。在备选实施例中,通过在快照824被拍摄的点处处理应用堆826来跟踪派生类的实例化。在其他备选实施例中,通过组合关于哪些类被哪些方法实例化(例如,如在解释器832中跟踪的)的数据和来自调用图834的数据或构建用于从快照824捕获控制流的其他类层次结构数据828来跟踪派生类的实例化。在这样的实施例中,编译器将动态执行状态(例如,关于哪些类被哪些方法实例化的数据)与静态分析(例如,来自快照点的数据,诸如来自调用图834的数据)组合以产生对在某个代码位置处缺少剖析信息的替代。具有调用图834,并且实质上对在实例化类的代码位置处开始的实例化类进行可达性分析,揭示给定类的实例可以到达哪些方法。朝向在快照点处使用程序状态的这种上下文敏感的方法有利地基于可达性分析过滤出不能到达特定程序点的实例化类。
参见图9,该图描绘了根据说明性实施例的用于生成简档数据的示例过程900的流程图。在具体实施例中,诸如JIT编译器502的编译器执行过程900。
在实施例中,在框902,编译器接收触发编译的调用的代码段。接下来,在框904处,编译器请求所调用的代码段的简档数据。接下来,在框906处,编译器接收指示简档数据不可用于所调用的代码段的响应。接下来,在框908处,编译器执行查询过程,该查询过程基于与所调用的代码段的属性相关的指定标准来搜索经剖析的代码段。接下来,在框910处,编译器从查询过程接收包括结果代码段的搜索结果。接下来,在框912,编译器基于相关简档数据生成外插简档数据集。接下来,在框914,编译器将外插简档数据集存储在存储器中,使得外插简档数据集在存储器中与所调用的代码段相关联。接下来,在框916,编译器基于外插的简档数据集对所调用的代码段执行优化过程。
参见图10,该图描绘了根据说明性实施例的用于生成简档数据的示例过程1000的流程图。在具体实施例中,诸如JIT编译器502的编译器执行过程1000。
在一实施例中,在框1002处,编译器接收触发编译的所调用的代码段。接下来,在框1004处,编译器请求所调用的代码段的简档数据。接下来,在框1006处,编译器接收指示简档数据不可用于所调用的代码段的响应。接下来,在框1008,编译器从在所调用的代码段之前和所调用的代码段之后的应用代码中检索包括上下文代码段的语句踪迹。接下来,在框1010处,编译器将上下文代码段缩减到所调用的模式踪迹。接下来,在框1012处,编译器执行查询过程,其基于与调用的代码段的属性相关的指定标准来搜索经剖析的代码段。接下来,在框1014处,编译器从查询过程接收包括结果代码段的搜索结果。接下来,在框1016处,编译器从结果代码段之前和之后的应用代码检索结果上下文代码段。接下来,在框1018处,编译器从候选代码段836以及在结果代码段之前和之后的结果上下文代码段产生后缀树数据结构。接下来,在框1020处,编译器将调用的模式踪迹映射到后缀树以识别最接近的匹配结果和具有相关简档数据的结果上下文代码段。接下来,在框1022处,编译器基于相关简档数据生成外插简档数据集。接下来,在框1024,编译器将外插简档数据集存储在存储器中,使得外插简档数据集在存储器中与所调用的代码段相关联。接下来,在框1026,编译器基于外插简档数据集对所调用的代码段执行优化过程。
以下定义和缩写将用于解释权利要求书和说明书。如在此使用的,术语“包括”、“包含”、“具有”、“有”、“含有”或其任何其他变体旨在涵盖非排他性的包括。例如,包含一系列元素的组合物、混合物、工艺、方法、物品或装置不必仅限于那些元素,而是可以包括未明确列出的其他要素或这种组合物、混合物、工艺、方法、物品或设备固有的其他要素。
此外,术语“说明性的”在本文中用于表示“用作实例、例子或例证”。在此描述为“说明性的”任何实施例或设计不一定被解释为是比其他实施例或设计优选的或有利的。术语“至少一个”和“一个或多个”应理解为包括大于或等于一的任何整数,即,一个、两个、三个、四个等。术语“多个”应理解为包括大于或等于二的任何整数,即,两个、三个、四个、五个等。术语“连接”可包括间接“连接”和直接“连接”。
说明书中对“一个实施例”、“实施例”、“示例性实施例”等的引用表示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以包括或可以不包括特定特征、结构或特性。此外,这样的短语不一定指相同的实施方式。进一步,当结合实施例描述特定特征、结构或特性时,认为结合其他实施例(无论是否明确描述)影响这样的特征、结构或特性在本领域技术人员的知识范围内。
术语“约”、“基本上”、“大致”及其变型旨在包括与基于提交申请时可用的设备的特定量的测量相关联的误差程度。例如,“约”可以包括给定值的±8%或5%、或2%的范围。
已经出于说明的目的呈现了本发明的各种实施方式的描述,但并不旨在是详尽的或者限于所公开的实施方式。在不脱离所描述的实施例的范围的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。本文使用的术语被选择来最好地解释实施例的原理、实际应用或优于市场中发现的技术的技术改进,或者使得本领域普通技术人员能够理解本文描述的实施例。
已经出于说明的目的呈现了本发明的各种实施方式的描述,但并不旨在是详尽的或者限于所公开的实施方式。在不脱离所描述的实施例的范围的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。本文使用的术语被选择来最好地解释实施例的原理、实际应用或优于市场中发现的技术的技术改进,或者使得本领域普通技术人员能够理解本文描述的实施例。
因此,在说明性实施例中提供了用于管理在线社区的参与和其他相关特征、功能或操作的计算机实现的方法、系统或装置以及计算机程序产品。当关于装置的类型描述实施例或其部分时,计算机实现的方法、系统或装置、计算机程序产品或其部分被适配或配置用于与该类型装置的合适且可比较的表现一起使用。
在实施例被描述为在应用中实现的情况下,将软件即服务(SaaS)模型中的应用的传递构想在说明性实施例的范围内。在SaaS模型中,通过在云基础设施中执行应用来将实现实施例的应用的能力提供给用户。用户可通过诸如web浏览器(例如,基于web的电子邮件)或其他轻量级客户机-应用之类的瘦客户机接口使用各种客户机设备来访问应用。用户不管理或控制包括网络、服务器、操作系统或云基础设施的存储的底层云基础设施。在一些情况下,用户甚至可能不管理或控制SaaS应用的能力。在一些其他情况下,应用的SaaS实现可允许有限的用户特定应用配置设置的可能异常。
本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质(一个或多个)。
计算机可读存储介质可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储装置、磁存储装置、光存储装置、电磁存储装置、半导体存储装置、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式紧凑盘只读存储器(CD-ROM)、数字通用盘(DVD)、记忆棒、软盘、诸如穿孔卡之类的机械编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储装置。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如Smalltalk、C++等)和过程程序设计语言(诸如“C”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
在此将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的一个或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者这些块有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
本发明的各实施例还可作为与客户端公司、非盈利组织、政府实体、内部组织结构等的服务参与的一部分来递送。这些实施例的方面可以包括配置计算机系统以执行和部署实现本文所描述的方法中的一些或全部的软件、硬件和web服务。这些实施例的各方面还可包括分析客户机的操作、响应于该分析创建推荐、构建实现推荐的各部分的系统、将系统集成到现有过程和基础设施中、计量系统的使用、向系统的用户分配花费和对系统的使用记账。虽然通过分别陈述它们各自的优点描述了本发明的上述实施例,但是本发明不限于它们的特定组合。相反,这样的实施例也可以根据本发明的预期部署以任意方式和数量组合,而不损失其有益效果。
Claims (20)
1.一种计算机实现的方法,包括:
由编译器响应于第一代码段的执行来请求与所述第一代码段相关联的第一简档数据集;
响应于接收到所述第一简档数据集不可用的指示,执行查询过程,所述查询过程基于与所述第一代码段的属性相关的指定标准搜索其他代码段;
接收来自所述查询过程的搜索结果,其中所述搜索结果包括第二代码段;
至少部分地基于所述第二代码段生成外插简档数据集;
将所述外插简档数据集存储在存储器中,使得所述外插简档数据集在所述存储器中与所述第一代码段相关联;以及
由所述编译器至少部分地基于所述外插简档数据集对所述第一代码段执行优化过程。
2.根据权利要求1所述的计算机实现的方法,其中,所述查询过程仅搜索聚集程序状态信息。
3.根据权利要求2所述的计算机实现的方法,其中,所述程序状态信息包括类层次结构表。
4.根据权利要求1所述的计算机实现的方法,其中,所述指定标准包括至少部分地基于所述第一代码段的句法的句法标准。
5.根据权利要求4所述的计算机实现的方法,其中,所述指定标准包括所述第一代码段的句法匹配。
6.根据权利要求4所述的计算机实现的方法,其中,所述指定标准包括描述所述第一代码段的语义匹配的规则。
7.根据权利要求1所述的计算机实现的方法,其中,所述查询过程包括:
基于所述候选代码段与所述第一代码段的语义匹配来识别所述候选代码段;
从在所述第一代码段之前和之后的应用代码中检索上下文代码段;
从在所述候选代码段之前和之后的应用代码中检索结果上下文代码段;以及
基于所述结果上下文代码段与所述上下文代码段的模糊匹配,将所述候选代码段识别为所述第二代码段。
8.根据权利要求7所述的计算机实现的方法,其中,所述查询过程包括生成候选代码段的数据结构,其中所述数据结构的布置至少部分地基于所述第一代码段与每个所述候选代码段之间的相应相似度。
9.根据权利要求1所述的计算机实现的方法,其中,所述查询过程包括将所述搜索结果限制为具有相关联的简档数据集的代码段。
10.根据权利要求9所述的计算机实现的方法,其中,生成所述外插简档数据集包括至少部分地基于所述第二代码段的第二简档数据集生成所述第一代码段的所述外插简档数据集。
11.一种用于推导简档数据的计算机程序产品,所述计算机程序产品包括一个或多个计算机可读存储介质以及共同存储在所述一个或多个计算机可读存储介质上的程序指令,所述程序指令可由处理器执行以使所述处理器执行包括以下各项的操作:
由编译器响应于第一代码段的执行来请求与所述第一代码段相关联的第一简档数据集;
响应于接收到所述第一简档数据集不可用的指示,执行查询过程,所述查询过程基于与所述第一代码段的属性相关的指定标准搜索其他代码段;
接收来自所述查询过程的搜索结果,其中所述搜索结果包括第二代码段;
至少部分地基于所述第二代码段生成外插简档数据集;
将所述外插简档数据集存储在存储器中,使得所述外插简档数据集在所述存储器中与所述第一代码段相关联;以及
由所述编译器至少部分地基于所述外插简档数据集对所述第一代码段执行优化过程。
12.根据权利要求11所述的计算机程序产品,其中,所存储的程序指令被存储在数据处理系统中的计算机可读存储装置中,并且其中所存储的程序指令通过网络从远程数据处理系统传输。
13.根据权利要求11所述的计算机程序产品,其中,所存储的程序指令被存储在服务器数据处理系统中的计算机可读存储装置中,并且其中,所存储的程序指令通过网络被下载到远程数据处理系统,以用于与所述远程数据处理系统相关联的计算机可读存储装置中,所述计算机程序产品进一步包括:
用于计量与所述请求相关联的所述程序指令的使用的程序指令;以及
用于基于经计量的使用生成发票的程序指令。
14.根据权利要求11所述的计算机程序产品,其中,所述查询过程仅搜索聚集程序状态信息,并且其中,所述程序状态信息包括类层次结构表。
15.根据权利要求11所述的计算机程序产品,其中,所述指定标准包括至少部分地基于所述第一代码段的句法的句法标准,并且其中,所述指定标准包括所述第一代码段的句法匹配。
16.根据权利要求11所述的计算机程序产品,其中,所述查询过程包括:
基于所述候选代码段与所述第一代码段的语义匹配来识别所述候选代码段;
从在所述第一代码段之前和之后的应用代码中检索上下文代码段;
从在所述候选代码段之前和之后的应用代码中检索结果上下文代码段;以及
基于所述结果上下文代码段与所述上下文代码段的模糊匹配,将所述候选代码段识别为所述第二代码段。
17.一种计算机系统,包括处理器和一个或多个计算机可读存储介质,以及共同存储在所述一个或多个计算机可读存储介质上的程序指令,所述程序指令可由所述处理器执行以使所述处理器执行包括以下各项的操作:
由编译器响应于第一代码段的执行来请求与所述第一代码段相关联的第一简档数据集;
响应于接收到所述第一简档数据集不可用的指示,执行查询过程,所述查询过程基于与所述第一代码段的属性相关的指定标准搜索其他代码段;
接收来自所述查询过程的搜索结果,其中所述搜索结果包括第二代码段;
至少部分地基于所述第二代码段生成外插简档数据集;
将所述外插简档数据集存储在存储器中,使得所述外插简档数据集在所述存储器中与所述第一代码段相关联;以及
由所述编译器至少部分地基于所述外插简档数据集对所述第一代码段执行优化过程。
18.根据权利要求17所述的计算机系统,其中,所述查询处理仅搜索聚集程序状态信息,并且其中所述程序状态信息包括类层次结构表。
19.根据权利要求17所述的计算机系统,其中,所述指定标准包括至少部分地基于所述第一代码段的句法的句法标准,并且其中,所述指定标准包括所述第一代码段的句法匹配。
20.根据权利要求17所述的计算机系统,其中,所述查询过程包括:
基于所述候选代码段与所述第一代码段的语义匹配来识别所述候选代码段;
从在所述第一代码段之前和之后的应用代码中检索上下文代码段;
从在所述候选代码段之前和之后的应用代码中检索结果上下文代码段;以及
基于所述结果上下文代码段与所述上下文代码段的模糊匹配,将所述候选代码段识别为所述第二代码段。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/007,577 | 2020-08-31 | ||
US17/007,577 US11226799B1 (en) | 2020-08-31 | 2020-08-31 | Deriving profile data for compiler optimization |
PCT/CN2021/115034 WO2022042685A1 (en) | 2020-08-31 | 2021-08-27 | Deriving profile data for compiler optimization |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115968468A true CN115968468A (zh) | 2023-04-14 |
Family
ID=79293833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180051387.1A Pending CN115968468A (zh) | 2020-08-31 | 2021-08-27 | 推导用于编译器优化的简档数据 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11226799B1 (zh) |
JP (1) | JP2023539594A (zh) |
CN (1) | CN115968468A (zh) |
GB (1) | GB2614164A (zh) |
WO (1) | WO2022042685A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200086284A (ko) * | 2017-11-09 | 2020-07-16 | 엔체인 홀딩스 리미티드 | 최적화된 확인 가능한 계산을 위해 실행 가능한 명령어를 단순화하기 위한 시스템 |
US11200038B1 (en) * | 2020-06-25 | 2021-12-14 | Paypal, Inc. | Fast compiling source code without dependencies |
US11314496B2 (en) | 2020-06-25 | 2022-04-26 | Paypal, Inc. | Ultra-fast install and update of an operating system |
US11656856B2 (en) * | 2021-10-07 | 2023-05-23 | International Business Machines Corporation | Optimizing a just-in-time compilation process in a container orchestration system |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360360B1 (en) * | 1996-02-08 | 2002-03-19 | International Business Machines Corporation | Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects |
US6954747B1 (en) * | 2000-11-14 | 2005-10-11 | Microsoft Corporation | Methods for comparing versions of a program |
US20030066060A1 (en) * | 2001-09-28 | 2003-04-03 | Ford Richard L. | Cross profile guided optimization of program execution |
US20040117760A1 (en) * | 2002-12-11 | 2004-06-17 | Microsoft Corporation | Reality-based optimization |
US20080028378A1 (en) * | 2006-07-27 | 2008-01-31 | Microsoft Corporation | Utilizing prior usage data for software build optimization |
US8087006B2 (en) * | 2007-05-31 | 2011-12-27 | Microsoft Corporation | Static performance analysis of software |
CN101398758B (zh) | 2008-10-30 | 2012-04-25 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
US8543907B1 (en) | 2009-10-16 | 2013-09-24 | Google Inc. | Context-sensitive optimization level selection |
US10387293B2 (en) | 2012-10-09 | 2019-08-20 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
US10127138B2 (en) * | 2013-06-06 | 2018-11-13 | Microsoft Technology Licensing, Llc. | Debugging native code by transitioning from execution in native mode to execution in interpreted mode |
US9348567B2 (en) | 2014-07-03 | 2016-05-24 | Microsoft Technology Licensing, Llc. | Profile guided optimization in the presence of stale profile data |
US10324741B2 (en) | 2014-08-30 | 2019-06-18 | Oracle International Corporation | Speeding up dynamic language execution on a virtual machine with type speculation |
US10353679B2 (en) | 2014-10-31 | 2019-07-16 | Microsoft Technology Licensing, Llc. | Collecting profile data for modified global variables |
WO2016068999A1 (en) * | 2014-10-31 | 2016-05-06 | Hewlett Packard Enterprise Development Lp | Integrated heterogeneous processing units |
US10853044B2 (en) | 2017-10-06 | 2020-12-01 | Nvidia Corporation | Device profiling in GPU accelerators by using host-device coordination |
US11138018B2 (en) | 2018-12-14 | 2021-10-05 | Nvidia Corporation | Optimizing execution of computer programs using piecemeal profiles |
CN110399133B (zh) | 2019-06-25 | 2020-10-27 | 西北大学 | 一种基于前端字节码技术的JavaScript代码优化方法 |
-
2020
- 2020-08-31 US US17/007,577 patent/US11226799B1/en active Active
-
2021
- 2021-08-27 WO PCT/CN2021/115034 patent/WO2022042685A1/en active Application Filing
- 2021-08-27 JP JP2023513408A patent/JP2023539594A/ja active Pending
- 2021-08-27 GB GB2304163.5A patent/GB2614164A/en active Pending
- 2021-08-27 CN CN202180051387.1A patent/CN115968468A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2614164A (en) | 2023-06-28 |
US11226799B1 (en) | 2022-01-18 |
WO2022042685A1 (en) | 2022-03-03 |
JP2023539594A (ja) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11226799B1 (en) | Deriving profile data for compiler optimization | |
US11941400B2 (en) | Methods and apparatus for intentional programming for heterogeneous systems | |
EP3465428B1 (en) | Sample driven profile guided optimization with precise correlation | |
Xin et al. | Helix: Holistic optimization for accelerating iterative machine learning | |
Xu et al. | Finding low-utility data structures | |
EP3970002A1 (en) | Persistent annotation of syntax graphs for code optimization | |
US20130283250A1 (en) | Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces | |
CN103858099A (zh) | 用于在异构计算机上编译和运行高级程序的技术 | |
US11029876B2 (en) | Determining an age category for an object stored in a heap | |
US8458679B2 (en) | May-constant propagation | |
Ahmad et al. | Leveraging parallel data processing frameworks with verified lifting | |
US20090037690A1 (en) | Dynamic Pointer Disambiguation | |
US10684873B2 (en) | Efficient data decoding using runtime specialization | |
US11474832B2 (en) | Intelligently determining a virtual machine configuration during runtime based on garbage collection characteristics | |
US10296363B2 (en) | Tuning a virtual machine startup parameter | |
US10719314B2 (en) | Probabilistic call-graph construction | |
US11392356B1 (en) | Online machine learning based compilation | |
US20210397549A1 (en) | Efficient continuation stack storage in languages with a garbage collector | |
Zhang et al. | Optimizing random access to hierarchically-compressed data on GPU | |
Islam et al. | PyMigBench and PyMigTax: A benchmark and taxonomy for Python library migration | |
Clarkson et al. | Bifrost: A future graph database runtime | |
Pleines | Analysis of Git Repositories for Software Visualization | |
Cheung | Rethinking the application-database interface | |
Navasca | An Observational and Statistical Technique for Efficient Big Data Applications | |
US20210208914A1 (en) | Resolution of segmented constant pools |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |