CN105393216B - 运行时内存调节 - Google Patents

运行时内存调节 Download PDF

Info

Publication number
CN105393216B
CN105393216B CN201480039673.6A CN201480039673A CN105393216B CN 105393216 B CN105393216 B CN 105393216B CN 201480039673 A CN201480039673 A CN 201480039673A CN 105393216 B CN105393216 B CN 105393216B
Authority
CN
China
Prior art keywords
memory
modification
calling
called
memory management
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.)
Active
Application number
CN201480039673.6A
Other languages
English (en)
Other versions
CN105393216A (zh
Inventor
J·G·德里斯科尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN105393216A publication Critical patent/CN105393216A/zh
Application granted granted Critical
Publication of CN105393216B publication Critical patent/CN105393216B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

一种在响应于启动软件代码的编译接收语法树时在运行时实现内存管理策略的系统,该系统识别语法树内的多个调用并且利用对应的内存修改调用修改所述多个调用中的每个调用以创建多个内存修改调用。每个内存修改调用与内存管理类关联,并且所述修改发生在软件代码的编译期间。在修改所述多个调用中的每个调用之后,该系统编译所述多个内存修改调用以产生字节码。

Description

运行时内存调节
相关申请的交叉引用
本申请要求于2013年8月15日提交的序列号为61/866,223的临时专利申请的优先权,其内容通过引用包含于此。
技术领域
一个实施例一般地涉及一种计算机系统,并且具体地讲,涉及一种编译软件指令的计算机系统。
背景技术
对于所有类型的计算机系统,内存会是有限的资源。无论计算系统变得多快,总是依赖于有限量的内存来运行软件应用。作为结果,软件开发者在编写和开发软件应用时通常考虑可用的内存资源。
JAVA编程语言提供吸引大规模分布式系统的开发者的几个特征,诸如一次写入、到处运行的便携性、对多线程编程的便携式支持和对分布式编程的支持,包括远程方法调用和垃圾收集。然而,JAVA在分配和解除分配(de-allocate)内存的方式方面不同于许多传统的编程语言。许多编程语言(诸如,C和C++)明确地允许由应用程序员/开发者执行内存的分配和解除分配。相比之下,JAVA虚拟机(“VM”)经对于JAVA应用的程序员而言故意不透明的结构来管理内存。当在共享用户环境(诸如,服务器VM)中运行脚本时,这种不透明存在问题,因为耗尽内存的一个线程具有破坏其它运行的线程的可能性。这种跨线程污染能够使整个JAVA VM停机。
发明内容
一个实施例是一种在响应于启动软件代码的编译接收语法树时在运行时实现内存管理策略的系统。该系统识别语法树内的多个调用并且利用对应的内存修改调用修改所述多个调用中的每个调用以创建多个内存修改调用。每个内存修改调用与内存管理类关联,并且所述修改发生在软件代码的编译期间。在修改所述多个调用中的每个调用之后,该系统编译所述多个内存修改调用以产生字节码。
附图说明
图1是根据本发明的实施例的计算机服务器/系统的方框图。
图2是根据一个实施例的当在运行时调节内存时的图1的内存调节模块的功能的流程图。
图3是根据另一实施例的当在运行时调节内存时的图1的内存调节模块的功能的流程图。
图4是根据另一实施例的用于执行使用在编译期间修改的语法树创建的字节码的图1的内存调节模块的功能的流程图。
具体实施方式
在内存中编译程序的同时,一个实施例拦截创建新对象的所有调用,并且基于内存策略确定是否能够考虑到JAVA VM内存考虑因素/限制而创建该新对象。如果该新对象的创建不会负面地影响内存,则能够创建该对象。通过阻止内存中对象(in-memory object)的无意的失控创建,实施例显著提高了允许最终用户输入要在多用户服务器上运行的脚本的系统的稳定性和性能。
图1是根据本发明的实施例的计算机服务器/系统10的方框图。虽然被示出为单个系统,但系统10的功能能够被实现为分布式系统。另外,这里公开的功能能够被实现在分开的服务器或装置上,所述分开的服务器或装置可经网络耦接在一起。另外,可不包括系统10的一个或多个部件。例如,对于用户客户端的功能,系统10可以是包括处理器、内存和显示器的智能电话,但可不包括图1中示出的一个或多个其它部件。
系统10包括用于传送信息的总线12或其它通信机构和用于处理信息的耦接到总线12的处理器22。处理器22可以是任何类型的通用或专用处理器。系统10还包括用于存储将要由处理器22执行的信息和指令的内存14。内存14能够由随机存取存储器(“RAM”)、只读存储器(“ROM”)、静态存储装置(诸如,磁盘或光盘)或任何其它类型的计算机可读介质的任何组合组成。系统10还包括通信装置20(诸如,网络接口卡)以提供对网络的访问。因此,用户可直接与系统10对接,或者通过网络或任何其它方法远程地与系统10对接。
计算机可读介质可以是能够由处理器22访问的任何可用介质,并且包括易失性介质和非易失性介质、可移除介质和不可移除介质以及通信介质。通信介质可包括计算机可读指令、数据结构、程序模块或已调数据信号(诸如,载波或其它传输机构)中的其它数据,并且包括任何信息递送介质。
处理器22还经总线12耦接到显示器24(诸如,液晶显示器(“LCD”))。键盘26和光标控制装置28(诸如,计算机鼠标)还耦接到总线12以便使用户能够与系统10对接。
在一个实施例中,内存14存储软件模块,所述软件模块在由处理器22执行时提供功能。所述模块包括为系统10提供操作系统功能的操作系统15。所述模块还包括用于在运行时调节内存的内存调节模块16和这里公开的所有其它功能。系统10能够是更大的系统的一部分。因此,系统10能够包括一个或多个另外的功能模块18以包括另外的功能(诸如,另外的GROOVY或JAVA相关功能)。数据库17被耦接到总线12以便为模块16和18提供集中存储。
一个实施例使用允许在编译处理期间修改语法树的编程语言,并且实现一个或多个内存调节规则(在这里被称为“内存策略”)。作为例子,用户可从远程计算机系统向服务器提交代码以用于编译和执行。这个服务器可由不同于用户的第三方操作,并且该第三方可能希望实施防止由用户的代码执行某些动作的内存策略。尽管由用户(相对于该服务器位于远处或本地)提交的代码可能不包含内存策略功能,但该服务器可基于由用户提供的代码修改语法树中的方法调用。一旦已基于该代码创建语法树,可执行对语法树的分析。该分析能够识别根据内存策略严格地禁止的各种方法、构造器访问和/或属性访问。这些对内存策略的违反可阻止代码被编译成字节码,并且可导致输出异常。对异常的指示能够被提供给用户。
在一个实施例中,该编程语言是“GROOVY”编程语言或,在产生字节码(或机器码)之前在编译处理期间允许访问语法树的某种其它编程语言。GROOVY是用于JAVA平台的面向对象的编程语言。通常,GROOVY是JAVA的超集,并且因此,JAVA代码可能在GROOVY中在语法上是有效的。除了JAVA中可用的语法和特征之外,GROOVY还包括另外的语法和特征。类似于JAVA,GROOVY代码能够被编译为字节码。这种字节码能够由虚拟机(“VM”)转换成机器码。
当GROOVY代码正被编译时,在产生字节码之前,基于该代码创建抽象语法树(“AST”)。在具有语法树的形式的同时,实施例在创建字节码之前编辑AST。因此,能够对AST做出各种修改,这些修改将会影响字节码的创建以及字节码将会如何在运行时执行。替代于使用GROOVY,其它实施例能够使用允许在将代码编译为字节码(或机器码)之前在语法树水平编辑代码的任何编程语言。
通常,使用GROOVY的实施例包括下面的功能:(1)注解,放置在GROOVY代码上(自动地或手工地);(2)AST操纵类,执行方法和属性访问的重写;和(3)可选QuotaPolicy类,在运行时执行内存约束。所有三个部分能够具有多个交叠的实现方式以允许使用的差异(例如,嵌入vs.独立使用)。
在一个实施例中,注解是标准GROOVY AST注解。它被用于将GROOVY AST操纵类应该被调用通知给GROOVY编译器(经命令行或经GroovyShell.parse()调用)。例如,一个类型的注解能够被用于GROOVY脚本代码,而另一类型的注解能够被用于GROOVY类代码。
Groovy AST操纵拦截所有循环代码,并且利用新代码包装(wrap)它,该新代码负责确定该循环是否已超过某个允许的内存配额(即,内存策略)。类似地,监测所有收集类和字符串的大小,并且另外的检查可被添加以对再一次受限于配额的创建的内存密集对象的数量进行计数。对于可消耗过度的量的系统资源的其它操作(诸如,在其他方面无害的对象的组合),也可添加另外的检查。一旦AST操纵完成,就能够以与Java VM中的任何其它类相同的方式访问该类,并且在一定程度上确保防止内存耗尽。
可通过系统范围指定的属性、通过使用QuotaPolicy类、通过与脚本关联的元数据、通过由最终用户放置在脚本中的变量、或通过某种其它方法或方法的组合来确定配额。
图2是根据一个实施例的当在运行时调节内存时的图1的内存调节模块16的功能的流程图。在一个实施例中,以下的图2以及图3和4的流程图的功能由存储在内存或其它计算机可读或有形介质中并且由处理器执行的软件实现。在其它实施例中,功能可由硬件(例如,通过使用专用集成电路(“ASIC”)、可编程门阵列(“PGA”)、现场可编程门阵列(“FPGA”)等)或硬件和软件的任何组合执行。
在210,识别语法树内的调用。语法树可以是基于由用户编写或以其它方式提供的代码创建的抽象语法树。语法树可被创建为编译代码的处理的一部分。在一些编程语言中,可在已产生语法树之后编辑代码。例如,编译GROOVY代码可允许在已产生语法树之后但在产生字节码之前修改代码。用户可将一个或多个注解添加到指示一个或多个语法树操纵类应该被调用的代码。除了识别方法调用之外,还可识别构造器调用和/或属性访问调用。可通过解析语法树来完成方法调用、构造器调用和/或属性访问调用(“调用”)的识别。
在220,用内存修改调用替换每个识别的方法调用。除了替换方法调用之外,还可利用内存修改调用替换构造器调用和/或属性访问调用。如以下详细所公开,内存修改调用引起基于内存策略的对调用的许可的检查。以内存修改调用替换调用可涉及:使该调用与内存类关联,使得在执行该调用之前,内存类被评估以确定是否授予许可。例如,利用内存修改方法调用替换方法调用可涉及:在内存类调用中包装该方法调用或以其它方式修改该方法调用,以使得针对内存策略检查该方法调用。该方法调用可变为内存类的参数,从而创建内存修改方法调用。可仅当内存检查导致该方法调用被识别为许可时执行该方法调用。如此,将会在执行该方法调用之前针对基于内存策略的内存类检查用于执行该方法调用的许可。对于构造器调用和/或属性访问调用,可发生类似的关联和/或包装。
在230,在替换之后,编译现在可能包含一个或多个内存修改方法调用、内存修改构造器调用和/或内存修改属性访问调用(“内存修改调用”)的语法树。对已修改的语法树的编译导致字节码的创建,该字节码被配置为被解释为机器码以便执行。当执行时,使用内存类针对内存策略检查每个内存修改调用。如果内存修改调用未能通过内存策略,则停止执行字节码并且产生异常。该异常能够被存储和/或输出给用户。在一些实施例中,可跳过引起问题的内存修改调用并且尝试继续执行字节码。
图3是根据另一实施例的当在运行时调节内存时的图1的内存调节模块16的功能的流程图。
在310,接收内存策略。内存策略能够包括一个或多个内存规则,所述一个或多个内存规则识别可能由于过多的内存使用而在已编译的代码的执行期间不被允许并且可在静态分析期间被检测到的方法调用、构造器调用和/或属性访问调用的类型。内存策略可以是由正在编译代码的实体提供或提供给该实体的默认内存策略,和/或可以是定制的内存策略。在一个实施例中,内存策略使用JAVA VM中的已有内存阵列的大小的知识或它的库,并且确定是否能够使该大小更大,或将所有新对象创建限制于单个阵列。能够动态地调整和改变对内存大小的限制。
在一个实施例中,内存策略由正在编译代码以供执行的系统存储。在一些实施例中,内存策略可被远程地存储,但正在编译代码以供执行的系统可访问该内存策略。
在320,接收未编译代码。可按照用户编写代码或提供包含代码的一个或多个文件的形式接收这种代码。在一些实施例中,经用户计算机系统,用户可通过基于web的界面将代码提交给远程服务器以便编译和执行。远程服务器可相对于用户计算机系统远程地接收未编译代码,编译该代码,并且执行该代码。除了远程用户计算机系统之外,可从其它源接收代码。
在325,一个或多个内存管理注解被添加到未编译代码。内存管理注解用作对编译器的指示:操纵类(诸如,GROOVY AST操纵类)应该被调用。能够添加用于脚本代码(例如,GROOVY脚本代码)的注解和/或用于类代码(例如,GROOVY类代码)的注解。能够由用户手工地添加或自动地添加这种内存管理注解。在使用GROOVY的实施例中,内存管理注解可被添加为全局或局部变换,并且可在编译步骤被触发,该编译步骤可来自命令行或来自GROOVY应用编程接口(“API”)(诸如,GroovyShell.parse())。在一些实施例中,替代于注解,能够使用某种其它触发机构(诸如,配置开关、属性文件或环境变量)。
在330,启动代码的编译,这使得基于在320接收的未编译代码创建抽象语法树。AST是以编程语言(诸如,GROOVY)编写的在320接收的未编译代码的树表示。在一个实施例中,AST的每个节点对应于未编译代码中的要素。用于一些实施例的编程语言(诸如,GROOVY)允许在语法树被用于编译字节码(或机器码)之前编辑语法树。
在335,通过解析语法树来识别在330创建的语法树内的调用。这可包括方法调用、构造器调用和/或属性访问调用。
在340,在310接收的内存策略被用于执行对语法树的静态分析。静态分析识别将会违反内存策略(即,在内存策略下不允许)的一个或多个构造器调用、方法调用和/或属性访问调用。例如,当读取已知较大的可扩展标记语言(“XML”)文件时,使用将整个文档保持在内存中的文档对象模型(“DOM”)方法会导致不允许编译脚本。作为另一例子,创建一批非常大的静态字符串对象也会导致不允许编译脚本,在已知这些字符串较大的情况下,从文件或数据库读取这些字符串也会导致不允许编译脚本。
如果根据内存策略不能允许一个或多个构造器调用、方法调用和/或属性访问调用,则该功能继续前进至390。
在390,基于在340的一个或多个失败调用产生并且输出内存异常。在一个实施例中,如果经web界面从用户接收在320接收的未编译代码,则web界面能够被用于为用户提供所述一个或多个失败调用的指示。可阻止将语法树编译为字节码,至少直至在未编译代码中校正内存异常为止。
如果在340的静态分析根据内存策略未识别出任何内存异常,则该功能继续前进至370。在370,通过修改方法调用、构造器调用和/或属性访问调用来用内存修改方法调用替换在335识别的每个方法调用。以内存修改方法调用替换方法调用包括:使该方法调用与内存类关联,使得内存类被评估以确定是否允许执行该方法调用。可仅当内存检查导致该方法调用被识别为许可时执行该方法调用。利用内存修改方法调用替换方法调用可涉及:在内存类调用中包装该方法调用。如此,该内存类被用于在执行该方法调用之前检查用于执行该方法调用的许可。对于构造器调用和/或属性访问调用,可发生类似的关联和/或包装。在一些实施例中,当解析语法树时,一起执行335和370的功能。例如,第一方法调用可被识别并且在识别第二方法调用之前利用内存修改方法调用替换第一方法调用。
在380,在370完成替换之后,编译现在包含一个或多个内存修改方法调用、内存修改构造器调用和/或内存修改属性访问调用的语法树。修改语法树的编译导致字节码,该字节码被配置为由虚拟机解释为机器码以便执行。在一些实施例中,可由编译器直接创建机器码。
图4是根据另一实施例的用于执行使用在编译期间修改的语法树创建的字节码的图1的内存调节模块16的功能的流程图。能够使用图3的功能创建字节码。图4的功能也可由与图1的系统10分开的系统执行。
在410,尝试执行字节码的第一内存修改调用。该调用能够是内存修改方法调用、内存修改构造器访问调用或内存修改属性访问调用。当执行时,可使用与该调用关联的内存类,而非直接执行该调用。
在420,基于内存策略和已有配额执行对内存修改调用的内存检查。如果该调用未能通过内存策略,则该功能在430继续。在430,产生并且输出内存异常。可阻止进一步执行该字节码,并且向用户通知该异常。
如果该调用在420满足内存策略,则在440,执行该调用。因此,如果第一调用被用于在图3的370创建内存修改调用,则在该方法调用符合内存策略的情况下将会在440执行第一调用。在440的成功执行之后,当执行另一内存修改调用时,功能继续前进至410。这将会继续进行,直至字节码已被完全执行为止。
如以上所公开,实施例在编译期间拦截编译调用并且基于内存策略允许该调用或不允许该调用。通过阻止内存中对象的无意的失控创建,实施例能够显著提高允许最终用户输入将要在多用户服务器(诸如,具有JAVA VM的GROOVY)上运行的脚本的系统的稳定性和性能。由于实施例不依赖于对JAVA VM的改变,所以它能够被与当前实现的JAVA VM一起使用。
这里具体地示出和/或描述了几个实施例。然而,将会理解,在不脱离本发明的精神和预期范围的情况下,公开的实施例的修改和变化由以上教导覆盖并且落在所附权利要求的范围内。

Claims (18)

1.一种存储有指令的计算机可读介质,所述指令在由处理器执行时使处理器在运行时实现内存管理策略,其中,所述内存管理策略包括一个或多个内存规则,所述一个或多个内存规则识别由于过多的内存使用而在已编译的代码的执行期间不被允许的方法调用、构造器调用和/或属性访问调用的类型,该实现包括:
响应于启动软件代码的编译,接收语法树;
识别语法树内的多个调用;
利用对应的内存修改调用修改所述多个调用中的每个调用以创建多个内存修改调用,其中每个内存修改调用与内存管理类关联并且所述修改发生在软件代码的编译期间;以及
在修改所述多个调用中的每个调用之后,编译所述多个内存修改调用以产生字节码,
其中,所述编译所述多个内存修改调用包括:
执行所述多个内存修改调用中的一个内存修改调用以使得所述内存管理类被用于
确定内存修改调用是否满足所述内存管理策略;以及
当内存修改调用未能满足所述内存管理策略时,产生内存异常。
2.如权利要求1所述的计算机可读介质,所述实现还包括:
当所述内存修改调用未能满足所述内存管理策略时,停止字节码的产生。
3.如权利要求1所述的计算机可读介质,其中所述修改包括将一个或多个注解添加到未编译软件代码,该注解指示操纵类应该被调用。
4.如权利要求1所述的计算机可读介质,其中所述未编译代码被编写为GROOVY语言。
5.如权利要求1所述的计算机可读介质,其中所述字节码由JAVA虚拟机转换成机器码。
6.如权利要求1所述的计算机可读介质,其中所述内存管理策略基于JAVA内存约束。
7.如权利要求1所述的计算机可读介质,其中从远程方接收所述软件代码。
8.一种在运行时实现内存管理策略的方法,其中,所述内存管理策略包括一个或多个内存规则,所述一个或多个内存规则识别由于过多的内存使用而在已编译的代码的执行期间不被允许的方法调用、构造器调用和/或属性访问调用的类型,所述方法包括:
响应于启动软件代码的编译,接收语法树;
识别语法树内的多个调用;
利用对应的内存修改调用修改所述多个调用中的每个调用以创建多个内存修改调用,其中每个内存修改调用与内存管理类关联并且所述修改发生在软件代码的编译期间;以及
在修改所述多个调用中的每个调用之后,编译所述多个内存修改调用以产生字节码,
其中,所述编译所述多个内存修改调用包括:
执行所述多个内存修改调用中的一个内存修改调用以使得所述内存管理类被用于
确定内存修改调用是否满足所述内存管理策略;以及
当内存修改调用未能满足所述内存管理策略时,产生内存异常。
9.如权利要求8所述的方法,所述实现还包括:
当所述内存修改调用未能满足所述内存管理策略时,停止字节码的产生。
10.如权利要求8所述的方法,其中所述修改包括将一个或多个注解添加到未编译软件代码,该注解指示操纵类应该被调用。
11.如权利要求8所述的方法,其中所述未编译代码被编写为GROOVY语言。
12.如权利要求8所述的方法,其中所述字节码由JAVA虚拟机转换成机器码。
13.如权利要求8所述的方法,其中所述内存管理策略基于JAVA内存约束。
14.一种用于实现内存管理策略的软件编译器,其中,所述内存管理策略包括一个或多个内存规则,所述一个或多个内存规则识别由于过多的内存使用而在已编译的代码的执行期间不被允许的方法调用、构造器调用和/或属性访问调用的类型,所述软件编译器包括:
处理器;
内存装置,耦接到处理器并且存储当由处理器执行时产生模块的指令,所述模块包括:
识别模块,响应于启动软件代码的编译接收语法树,并且识别语法树内的多个调用;和
修改模块,利用对应的内存修改调用修改所述多个调用中的每个调用以创建多个内存修改调用,其中每个内存修改调用与内存管理类关联并且所述修改发生在软件代码的编译期间;以及
编译器模块,在修改所述多个调用中的每个调用之后,编译所述多个内存修改调用以产生字节码;
其中,所述编译所述多个内存修改调用包括:
执行所述多个内存修改调用的一个内存修改调用以使得所述内存管理类被用于
确定内存修改调用是否满足所述内存管理策略;
当内存修改调用未能满足所述内存管理策略时,产生内存异常。
15.如权利要求14所述的软件编译器,所述编译还包括:
当所述内存修改调用未能满足所述内存管理策略时,停止字节码的产生。
16.如权利要求14所述的软件编译器,其中所述修改包括将一个或多个注解添加到未编译软件代码,该注解指示操纵类应该被调用。
17.如权利要求14所述的软件编译器,其中所述未编译代码被编写为GROOVY语言。
18.如权利要求14所述的软件编译器,其中所述字节码由JAVA虚拟机转换成机器码。
CN201480039673.6A 2013-08-15 2014-06-30 运行时内存调节 Active CN105393216B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361866223P 2013-08-15 2013-08-15
US61/866,223 2013-08-15
PCT/US2014/044827 WO2015023366A1 (en) 2013-08-15 2014-06-30 Runtime memory throttling

Publications (2)

Publication Number Publication Date
CN105393216A CN105393216A (zh) 2016-03-09
CN105393216B true CN105393216B (zh) 2018-08-31

Family

ID=51257584

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480039673.6A Active CN105393216B (zh) 2013-08-15 2014-06-30 运行时内存调节

Country Status (5)

Country Link
US (1) US9213530B2 (zh)
EP (1) EP3033674B1 (zh)
JP (1) JP6505700B2 (zh)
CN (1) CN105393216B (zh)
WO (1) WO2015023366A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928804B (zh) * 2018-09-20 2024-05-28 斑马智行网络(香港)有限公司 垃圾回收的优化方法、装置、终端设备及机器可读介质
JP7473145B2 (ja) * 2019-05-31 2024-04-23 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102187358A (zh) * 2008-09-26 2011-09-14 雅虎公司 开放广告与电子商务活动的集成
CN102298528A (zh) * 2010-06-28 2011-12-28 汤姆森特许公司 执行软件应用程序的方法、系统以及安全处理器

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7290288B2 (en) 1997-06-11 2007-10-30 Prism Technologies, L.L.C. Method and system for controlling access, by an authentication server, to protected computer resources provided via an internet protocol network
US6516416B2 (en) 1997-06-11 2003-02-04 Prism Resources Subscription access system for use with an untrusted network
KR20010072477A (ko) * 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
US6401182B1 (en) * 1999-02-10 2002-06-04 International Business Machines Corporation Method and apparatus for memory management
US20080243970A1 (en) 2007-03-30 2008-10-02 Sap Ag Method and system for providing loitering trace in virtual machines
JP4935626B2 (ja) * 2007-10-30 2012-05-23 富士通株式会社 制御プログラム及び方法並びにコンピュータ
US20110029822A1 (en) 2009-08-03 2011-02-03 Sap Ag Tracking of java objects during request processing
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US9027075B2 (en) 2011-09-29 2015-05-05 Oracle International Corporation Enforcing security rules at runtime
US9696974B2 (en) * 2013-03-13 2017-07-04 Microsoft Technology Licensing, Llc. Graph-based model for type systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102187358A (zh) * 2008-09-26 2011-09-14 雅虎公司 开放广告与电子商务活动的集成
CN102298528A (zh) * 2010-06-28 2011-12-28 汤姆森特许公司 执行软件应用程序的方法、系统以及安全处理器

Also Published As

Publication number Publication date
WO2015023366A1 (en) 2015-02-19
US20150052506A1 (en) 2015-02-19
JP2016528638A (ja) 2016-09-15
EP3033674B1 (en) 2019-07-24
JP6505700B2 (ja) 2019-04-24
US9213530B2 (en) 2015-12-15
CN105393216A (zh) 2016-03-09
EP3033674A1 (en) 2016-06-22

Similar Documents

Publication Publication Date Title
RU2445682C2 (ru) Графоориентированное программирование и выполнение на основе производителей
US10146522B1 (en) Live code updates
US8954939B2 (en) Extending a development environment
US20170364339A9 (en) Generation of Specialized Methods Based on Generic Methods and Type Parameterizations
US8448132B2 (en) Systems and methods for modifying code generation templates
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US10296297B2 (en) Execution semantics for sub-processes in BPEL
US20070257715A1 (en) System and method for abstract configuration
US20040268301A1 (en) Adding new compiler methods to an integrated development environment
US8141035B2 (en) Method for accessing internal states of objects in object oriented programming
US20050065953A1 (en) System and method for changing defined elements in a previously compiled program using a description file
CN107041158A (zh) 用于模块化反射的限制性访问控制
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
Yang et al. Powerstation: Automatically detecting and fixing inefficiencies of database-backed web applications in ide
US20130019225A1 (en) Incremental Inferences for Developing Data Models
Spoto A java framework for smart contracts
US8578352B1 (en) Optimizing object oriented programs using limited customization
US20150046929A1 (en) Using-sub-processes across business processes in different composites
CN105393216B (zh) 运行时内存调节
CN111880804A (zh) 应用程序代码的处理方法及装置
US20070005745A1 (en) Method for consistent and efficient management of program configuration and customizing data
CN112748946A (zh) 应用程序安装文件生成方法和装置、计算设备、存储介质
US20150046905A1 (en) Subprocess definition and visualization in bpel
Oppermann et al. Design and compilation of an object-oriented macroprogramming language for wireless sensor networks
Ogel et al. Towards active applications: the virtual virtual machine approach

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant