CN102033804A - 辅助内存分析的方法和系统 - Google Patents
辅助内存分析的方法和系统 Download PDFInfo
- Publication number
- CN102033804A CN102033804A CN2009101756922A CN200910175692A CN102033804A CN 102033804 A CN102033804 A CN 102033804A CN 2009101756922 A CN2009101756922 A CN 2009101756922A CN 200910175692 A CN200910175692 A CN 200910175692A CN 102033804 A CN102033804 A CN 102033804A
- Authority
- CN
- China
- Prior art keywords
- task
- internal storage
- class
- storage access
- run
- 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/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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
- G06F11/3471—Address tracing
-
- 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/86—Event-based monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
提出了一种用于辅助运行时内存分析的方法和系统,该方法包括:为程序运行中的每一个任务分配一个唯一的ID;记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID;响应于一任务结束,发出任务结束通知,该任务结束通知包括该结束任务的ID;以及响应于该任务结束通知,释放内存中具有该结束任务的ID的所有内存访问事件。本发明的方法和系统可确保内存中存储的内存访问事件不会无限制地增长,从而显著地减少其内存开销,并使得动态内存分析更快和更有效率。
Description
技术领域
本发明涉及计算机领域,具体涉及运行时内存分析,更具体涉及一种用于辅助运行时内存分析的方法和系统。
背景技术
为了检测程序中潜在的运行时内存问题,通常进行程序插装以跟踪程序运行时的内存访问事件,就是说,将某些额外的语句或指令插入程序中,这样,当程序运行时,这些额外的语句或指令将与原来的程序指令一起运行。这些插入的语句或指令将调用“内存访问跟踪”模块中的例程,而“内存访问跟踪”模块中的例程将把内存访问事件记录在存储器(例如,内存中的列表、数据库等)中。
程序插装已被广泛应用于分析工具(例如动态内存分析工具)、优化工具和测试工具。这些工具利用程序插装来修改二进制码或字节码,以便实现诸如性能分析、代码优化和覆盖性测试分析等目标。
图1示出了用于内存访问跟踪的程序插装的示意图。如图所示,程序经过插装后在运行时环境中运行,在运行过程中将通过插入的额外代码调用内存访问跟踪模块,内存访问跟踪模块将把内存访问事件存储在存储器中,并可从存储器中加载已存储的内存访问事件,以用于进行相关的分析。
例如,对于如下所述的简单的Java程序:
对其中的某些语句进行插装以便记录内存访问操作,插装后的程序如下(实际上,所有的插装都是针对二进制码或字节码进行的,而不是针对源码进行的,所示程序仅是为了例示插装时代码是如何修改的):
这样,在该程序运行过程中,当程序在类Simple的域i中写入一个新值时,方法addMemAccess将被调用。该方法addMemAccess具有4个参数,包括内存访问对象引用、域名称、访问类型和当前线程ID(标识)。这样,该方法将在存储器中记录一个包含上述信息的内存访问事件,并可以针对已记录的内存访问事件进行动态内存分析。
线程是一种独立的、可调度的指令流,是在进程上下文中运行的逻辑流程。由于当今的多核处理器对并行软件的需求,线程成为越来越重要的编程模型。虽然线程与进程相比是一种远为轻量级的执行单位,频繁地创建和终止线程仍然是很昂贵的。为了减少线程创建和终止,现代系统允许线程在其生命期中持续地获取和执行多个任务。
任务是一种代表指令序列的单独的作业,并且与其他作业完全独立。一个线程实际上包含多个任务,每个任务运行在线程的上下文中。当一个任务在线程中执行完毕后,线程获取准备好执行的另一个任务。线程中的任务通常是顺序执行的,而没有交错。典型的线程/任务模型是线程池和工作队列,其在行业软件中被广泛使用以提高系统吞吐量和性能。
由于动态内存分析工具应当记录每一次内存访问事件,随着程序的运行,将有越来越多的内存访问事件被记录在存储器(例如内存)中,这样,内存开销将会越来越大,与此同时,动态内存分析将变得越来越慢。
图2示出了两种示例性应用在使用程序插装进行动态内存分析前后的内存占用的比较。如图所示,对于WAS Trade应用,动态内存分析的内存开销是3.3倍,而对于Tomcat应用,动态内存分析的内存开销是3-5倍。可见,在动态内存分析中跟踪内存访问将带来极大的额外内存占用。
因此,本领域中需要一种能够减少运行时内存分析中的内存开销从而使运行时内存分析更为高效的方法。
发明内容
在本发明的一个方面,提出了一种用于辅助内存分析的方法,包括:为程序运行中的每一个任务分配一个唯一的ID(标识);记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID;响应于一任务结束,发出任务结束通知,该任务结束通知包括该结束任务的ID;以及响应于该任务结束通知,释放内存中具有该结束任务的ID的所有内存访问事件。
在本发明的另一个方面,提出了一种用于辅助内存分析的系统,包括:任务ID分配模块,用于为程序运行中的每一个任务分配一个唯一的ID;内存访问跟踪模块,用于记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID;任务结束通知模块,用于响应于一任务结束,发出任务结束通知,该任务结束通知包括该结束任务的ID;以及任务跟踪处理模块,用于响应于该任务结束通知,释放内存中具有该结束任务的ID的所有内存访问事件。
附图说明
所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中:
图1是用于内存访问跟踪的程序插装的示意图;
图2示出了两种示例性应用在使用程序插装进行动态内存分析前后的内存占用的比较;
图3示出了一Thread对象A和Runnable对象R1、R2和R3之间的关系;
图4示出了根据本发明的实施例的用于辅助运行时内存分析的方法;
图5示出了实现Runnable接口的类在经过添加整数域和修改构造器的插装前后的结构;
图6示出了实现Runnable接口的类的run方法在经过添加beforeRun()和afterRun()的插装前后的结构;以及
图7示出了根据本发明的实施例的用于辅助运行时内存分析的系统。
具体实施方式
下面参照附图来说明本发明的实施例。在下面的说明中,阐述了许多具体细节以便更全面地了解本发明。但是,对于本技术领域内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和要素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。
本发明的基本思想是当由线程执行的任务改变时,释放内存中该线程的内存访问事件,或将其转储在其他存储介质中。也就是说,在线程的运行过程中,当线程完成旧任务的执行,并转而执行新任务时,这些任务之间基本上是相互独立的、并没有相关性。也就是说,线程执行任务R1时发生的内存访问,对后来工具分析线程执行任务R2时的内存错误并没有关系,因此,这些信息能安全地移除或转储,以此减少内存开销,而不会影响动态内存分析的精确性。
现以Java为例说明本发明的实施例,当然,本发明不限于Java环境,而是也适合于其他面向对象语言的环境或其他编程语言环境。图3示出了一Thread对象A和Runnable对象R1、R2和R3之间的关系。其中,Tread对象A对应于一个物理线程,Runnable对象R1、R2、R3等对应于逻辑任务。当线程运行时,线程逐一地执行一系列任务。当Thread A完成运行Runnable R1时,它将获取Runnable R2来执行。此时,R2占据了ThreadA,而在执行R1时发生的内存访问事件可以被移除,因为现在对于动态内存分析有贡献的内存访问来自于R2,而来自R1的内存访问已属于过去,因而对于动态内存分析来说是多余的。
现参照附图4,其示出了根据本发明的实施例的用于辅助运行时内存分析的方法。如图所示,该方法包括以下步骤:
在步骤401,为程序运行中的每一个任务分配一个唯一的ID。根据本发明的一实施例,任务是由线程从工作队列中获取的。在Java环境中,可通过实现Runnable接口来执行特定任务,而实现了Runnable接口的类的对象可称为Runnable对象,因此,每一个Runnable对象可代表一个任务。可以通过程序插装(例如字节码插装)向每一个实现Runnable接口的类添加一个整数域(可称为ObjectID),同时修改该类的构造器,使得当Runnable对象被构造时分配给该整数域一个唯一整数值,作为该Runnable对象的唯一ID。可使用本领域中所知的任何方法为该整数域分配一个唯一数值,例如,可以设置一个计数器,一Runnable对象可以从该计数器获取计数值作为分配的唯一数,并且每当一Runnable对象获取一计数值后,该计数器自动加1。
图5示出了实现Runnable接口的类在经过添加整数域和修改构造器的插装前后的结构。如图所示,与插装前相比,该类增加了一个ObjectId域,并且修改了构造器<init>。
在步骤402,记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID。这可以通过修改前文中所述的现有的由插装代码调用的内存访问跟踪模块,或创建新的内存访问跟踪模块,使其除记录内存访问对象引用、域名称、访问类型和当前线程ID等信息外,还记录当前Runnable对象的ID来实现。
在步骤403,响应于一任务(例如,由一线程执行的任务)结束,发出包括结束的任务的ID的通知,例如向一任务跟踪处理模块发出该通知。在Java环境中,可以使用字节码插装技术在实现Runnable接口的类的方法runO的结尾处添加一个afterRun()方法,该方法负责将当前Runnable对象的ID发送给任务跟踪处理模块。afterRun()方法可以从当前Runnable对象的ObjectID域获取其ID,并发送给任务跟踪处理模块。
作为另一种选择,还可以使用字节码插装技术在实现Runnable接口的类的方法run()的开始处添加一个beforeRun()方法,该方法负责从当前Runnable对象的ObjectID域中取出其ID,并存储在一个专用于存储该线程的Runnable对象的ID的数据结构中,该数据结构例如是为每一个线程维护的栈。这样,afterRun()方法就可以从该栈的栈顶取出正在结束的Runnable对象的ID,并将其发送给任务跟踪处理模块。
图6示出了实现Runnable接口的类的run方法在经过添加beforeRun()和afterRun()的插装前后的结构。如图所示,与插装前相比,在该类的run方法中,在开始处增加了一个beforeRun()方法,并在结尾处增加了一个afterRun()方法。
在步骤404,得到通知后,释放内存中具有该任务的ID的内存访问事件,例如由任务跟踪处理模块进行释放。当任务跟踪模块得到通知(包括结束的Runnable对象的ID)后,它可以在内存中的内存访问事件记录中查找具有该ID的所有内存访问事件记录,并将其或其一部分删除或转储在其他存储设备中。这样,就提高了动态内存分析的效率,降低了内存开销。
以上参照附图描述了根据本发明的实施例的用于辅助运行时内存分析的方法,应指出的是,以上描述仅为示例性,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的步骤,且各步骤之间的关系和顺序可以与描述的不同。例如,尽管在以上描述中,本发明的方法用于在线程中顺序执行的任务,但显然,本发明的方法也适用于在线程中并行、嵌套或交错执行的任务,以及在线程之外执行的任务。再例如,尽管在以上描述中以Java环境中的Runnable对象来代表任务为例说明了本发明的方法,但这仅为示例,而不是对本发明的限制。在本发明其他实施例中,该方法也适合于在Java或其他编程环境中以其他对象或其他程序单元(例如实现了其他任务执行接口的类的对象)来代表任务。
下面以C#语言为例,对本发明的用于辅助运行时内存分析的方法进行进一步的示例性说明。C#语言作为.Net框架中的重要组成部分,广泛应用于各种本地和网络应用程序。.Net框架中ThreadPool类为程序员提供了一个线程池,可以向该线程池发送任务请求,这些任务请求会被插入到一个任务队列中。ThreadPool类管理的多个线程并发地从任务队列中获取任务来执行,直到任务队列为空。线程池优势在于不需要为每个任务频繁地创建和销毁单独的线程,从而减少了开销,因此广泛应用于多线程编程环境中。
以下示出对使用ThreadPool类的C#语言程序进行分析的示例
上面的代码首先定义了一个System.Threading.WaitCallback对象waitCallback。WaitCallback是一个委托(相当于Java中的接口),表示线程池线程要执行的回调方法,它的原型如下:
[ComVisibleAttribute(true)]
public delegate void WaitCallback(Object state)
WaitCallback的参数为″Object state″,这个参数包含回调方法要使用的信息的对象。根据WaitCallback委托的原型,声明一个跟它签名相同的函数,如下所示:
public static void MyThreadWork(object state)
这个函数就是要线程完成的一个任务。程序员通过ThreadPool.QueueUserWorkItem方法向线程池提交任务请求。
根据以上分析可知,在上述C#语言的程序示例中,类WaitCallback的实例waitCallback表示线程池中的线程要完成的一个任务,voidMyThreadWork(object state)方法定义了这个任务需要完成的工作,线程池中的线程通过执行该方法完成waitCallback任务。
本发明的实施例首先会使用现有的代码插装技术在类System.Threading.WaitCallback中添加一个整数域(可称为ObjectID),同时修改该类的构造函数,使得当System.Threading.WaitCallback对象被构造时分配给该整数域一个唯一整数值,作为该System.Threading.WaitCallback对象的唯一ID。
在线程执行任务waitCallback时,即方法MyThreadWork运行过程中会产生内存访问事件,如i++。在i++操作后,通过代码插装插入代码来记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID,如以下代码片段。
在程序运行过程中,插入的runtimeRecorder.addMemAccess方法除记录内存访问对象引用、域名称、访问类型和当前线程ID等信息外,还记录当前waitCallback对象的ID,这些信息会被记录在内存中。
在任务waitCallback运行结束,即MyThreadWork方法执行完毕时,本发明的实施例在MyThreadWork方法的最后一条指令后插入runtime.removeEvent方法,如以下代码所示。runtime.removeEvent接收唯一参数是结束任务waitCallback的ID,该方法通过任务ID在内存中查找在该任务运行时产生的内存访问事件,并把这些事件删除,以此减少动态内存分析工具的内存使用量。
现参照图7,其示出了根据本发明的实施例的用于辅助运行时内存分析的系统。如图所示,该系统包括任务ID分配模块701、内存访问跟踪模块702、任务结束通知模块703、任务跟踪处理模块704。
任务ID分配模块701用于向由程序运行中的每一个任务分配一个唯一的任务ID。根据本发明的实施例,在Java环境中,该任务ID分配模块701可以通过以下方式来实现:使用程序插装在每一个实现Runnable接口的类中添加一个可称为ObjectID的整数域,并在该类的构造器中插入用于为该整数域赋一个唯一的整数值的代码,该整数值将作为该类的Runnable对象的唯一ID。
内存访问跟踪模块702用于记录内存访问事件,且所记录的内存访问事件中包括执行内存访问操作的任务的ID。根据本发明的实施例,在Java环境中,该内存访问跟踪模块702可以通过以下方式来实现:修改现有的由插装的代码调用的内存访问跟踪模块,或创建新的内存访问跟踪模块,使其除记录内存访问对象引用、域名称、访问类型和当前线程ID等信息外,还记录当前Runnable对象的ID。
任务结束通知模块703用于当一任务(例如,由一线程执行的任务)结束时通知任务跟踪处理704模块进行处理。根据本发明的实施例,在Java环境中,该任务结束通知模块703可通过以下方式实现:使用程序插装(例如字节码插装)技术在实现Runnable接口的类的方法run()的结尾处添加一个afterRun()方法,该方法负责将当前Runnable对象的ID发送给任务跟踪处理模块704。该afterRun()方法可以直接从当前Runnable对象的objectID域中获得其ID,并将其发送给任务跟踪处理模块。根据本发明的另一实施例,还可以使用字节码插装技术在实现Runnable接口的类的方法run()的开始处添加一个beforeRun()方法,该方法负责从当前Runnable对象的ObjectID域中取出其ID,并存储在一个专用于存储该线程的Runnable对象的ID的数据结构中,这样,在run()方法结束时,afterRun()方法就可以从该栈的栈顶取出正在结束的Runnable对象的ID,并将其发送给任务跟踪处理模块704。
任务跟踪处理模块704用于在接收到来自任务结束通知模块703的通知后,根据通知中包含的结束任务的ID从内存中存储的全部内存访问事件记录中查找包含该结束任务ID的内存访问事件记录,并将包含该结束任务ID的内存访问事件记录全部或部分删除或转储在其他存储器中,以便提高动态内存分析的效率,并节省其内存开销。
以上参照附图描述了根据本发明的实施例的用于使用运行时内存分析的系统,应指出的是,以上描述仅为示例性,而不是对本发明的限制。在本发明的其他实施例中,该系统可具有更多、更少或不同的模块,且各步骤之间的关系可以与描述的不同。例如,本发明的系统既可以包含在现有的运行时内存分析工具中,也可以作为单独的系统而存在。
根据本发明的实施例的用于辅助运行时内存分析方法和系统能够确保内存中存储的内存访问事件不会无限制地增长,从而显著地减少其内存开销,并使得动态内存分析更快和更有效率。
本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机系统,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,并构成本发明的装置。
本发明也可体现在计算机程序产品中,该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机系统中时,能够执行所述方法。
尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围。
Claims (12)
1.一种用于辅助内存分析的方法,包括:
为程序运行中的每一个任务分配一个唯一的ID;
记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID;
响应于一任务结束,发出任务结束通知,该任务结束通知包括该结束任务的ID;以及
响应于该任务结束通知,释放内存中具有该结束任务的ID的所有内存访问事件。
2.根据权利要求1的方法,其中,所述程序运行在面向对象语言环境中,且所述为程序运行中的每一个任务分配一个唯一的ID是通过以下方式实现的:
使用程序插装在代表任务的对象的类中添加一个用于存储对象ID的域;以及
修改该类的构造器,以使其为该域分配一个唯一的数值,作为对象的唯一ID。
3.根据权利要求1或2的方法,其中,所述响应于一任务结束,发出任务结束通知是通过以下方式实现的:
使用程序插装在代表任务的对象的类中插入在对象运行结束时执行的方法,该方法用于发出包括该对象的ID的任务结束通知。
4.根据权利要求3的方法,其中,包括在任务结束通知中的该对象的ID是通过以下方式获得的:
使用程序插装在代表任务的对象的类中插入在对象开始运行时执行的方法,该方法用于将该对象的ID存储在一栈中;以及
由所述在对象运行结束时执行的方法从该栈的栈顶取出该对象的ID。
5.根据权利要求3的方法,其中,所述代表任务的对象的类为实现了任务执行接口的类。
6.根据权利要求1的方法,其中,所述任务是由线程从工作队列中获取的。
7.一种用于辅助内存分析的系统,包括:
任务ID分配模块,用于为程序运行中的每一个任务分配一个唯一的ID;
内存访问跟踪模块,用于记录程序运行过程中发生的内存访问事件,包括进行内存访问的任务的ID;
任务结束通知模块,用于响应于一任务结束,发出任务结束通知,该任务结束通知包括该结束任务的ID;以及
任务跟踪处理模块,用于响应于该任务结束通知,释放内存中具有该结束任务的ID的所有内存访问事件。
8.根据权利要求7的系统,其中,所述程序运行在面向对象语言环境中,且所述任务ID分配模块是通过以下方式实现的:
使用程序插装在代表任务的对象的类中添加一个用于存储对象ID的域;以及
修改该类的构造器,以使其为该域分配一个唯一的数值,作为对象的唯一ID。
9.根据权利要求7或8的系统,其中,所述任务结束通知模块是通过以下方式实现的:
使用程序插装在代表任务的对象的类中插入在对象运行结束时执行的方法,该方法用于发出包括该对象的ID的任务结束通知。
10.根据权利要求9的系统,其中,包括在任务结束通知的该对象的ID是通知以下方式获得的:
使用程序插装在代表任务的对象的类中插入在对象开始运行时执行的方法,该方法用于将该对象的ID存储在一栈中;以及
由所述在对象运行结束时执行的方法从该栈的栈顶取出该对象的ID。
11.根据权利要求9的系统,其中,所述代表任务的对象的类为实现了任务执行接口的类。
12.根据权利要求7的系统,其中,所述任务是由线程从工作队列中获取的。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101756922A CN102033804A (zh) | 2009-09-29 | 2009-09-29 | 辅助内存分析的方法和系统 |
US12/886,741 US8615760B2 (en) | 2009-09-29 | 2010-09-21 | Facilitating memory analysis |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101756922A CN102033804A (zh) | 2009-09-29 | 2009-09-29 | 辅助内存分析的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102033804A true CN102033804A (zh) | 2011-04-27 |
Family
ID=43781762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101756922A Pending CN102033804A (zh) | 2009-09-29 | 2009-09-29 | 辅助内存分析的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8615760B2 (zh) |
CN (1) | CN102033804A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102301343A (zh) * | 2011-06-14 | 2011-12-28 | 华为技术有限公司 | 软件监测方法、装置以及系统 |
CN104142817A (zh) * | 2013-05-10 | 2014-11-12 | 中国电信股份有限公司 | 在Java应用中测量用户资源使用量的方法与装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722432B (zh) * | 2011-03-29 | 2016-02-24 | 国际商业机器公司 | 追踪内存访问的方法和装置 |
US20140157279A1 (en) * | 2011-07-29 | 2014-06-05 | Nec Corporation | Information processing apparatus, information processing system, information processing method and control program storage medium |
WO2013117002A1 (zh) * | 2012-02-09 | 2013-08-15 | 华为技术有限公司 | 一种数据重建方法、装置和系统 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB8613070D0 (en) | 1986-05-29 | 1986-07-02 | Univ Manchester | Memory space clearing control |
US6298422B1 (en) * | 1996-06-17 | 2001-10-02 | Network Associates, Inc. | Method for reducing the memory requirements for an application program executing in a multi-tasking environment |
US5935258A (en) * | 1997-03-04 | 1999-08-10 | Micron Electronics, Inc. | Apparatus for allowing data transfers with a memory having defective storage locations |
US6055612A (en) * | 1997-07-11 | 2000-04-25 | Geodesic Systems, Inc. | Incremental garbage collector with decommit barrier |
GB9813592D0 (en) * | 1998-06-25 | 1998-08-19 | Philips Electronics Nv | Dynamic memory space allocation |
US6842901B1 (en) * | 1999-04-23 | 2005-01-11 | Nortel Networks Limited | Thread memory reclamation |
US6401181B1 (en) * | 2000-02-29 | 2002-06-04 | International Business Machines Corporation | Dynamic allocation of physical memory space |
US7024668B2 (en) * | 2000-05-15 | 2006-04-04 | Matsushita Electric Industrial Co., Ltd. | Application execution apparatus and method |
US6502111B1 (en) * | 2000-07-31 | 2002-12-31 | Microsoft Corporation | Method and system for concurrent garbage collection |
CN1183453C (zh) | 2001-12-21 | 2005-01-05 | 上海贝尔有限公司 | 一种内存管理系统及其分配方法 |
US7076511B1 (en) * | 2002-05-07 | 2006-07-11 | Oracle International Corporation | Simplified deallocation of memory for programming objects |
US7840969B2 (en) * | 2006-04-28 | 2010-11-23 | Netapp, Inc. | System and method for management of jobs in a cluster environment |
US8443341B2 (en) * | 2006-11-09 | 2013-05-14 | Rogue Wave Software, Inc. | System for and method of capturing application characteristics data from a computer system and modeling target system |
-
2009
- 2009-09-29 CN CN2009101756922A patent/CN102033804A/zh active Pending
-
2010
- 2010-09-21 US US12/886,741 patent/US8615760B2/en not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102301343A (zh) * | 2011-06-14 | 2011-12-28 | 华为技术有限公司 | 软件监测方法、装置以及系统 |
WO2012171171A1 (zh) * | 2011-06-14 | 2012-12-20 | 华为技术有限公司 | 软件监测方法、装置以及系统 |
CN102301343B (zh) * | 2011-06-14 | 2014-02-19 | 华为技术有限公司 | 软件监测方法、装置以及系统 |
CN104142817A (zh) * | 2013-05-10 | 2014-11-12 | 中国电信股份有限公司 | 在Java应用中测量用户资源使用量的方法与装置 |
CN104142817B (zh) * | 2013-05-10 | 2017-08-22 | 中国电信股份有限公司 | 在Java应用中测量用户资源使用量的方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
US8615760B2 (en) | 2013-12-24 |
US20110078684A1 (en) | 2011-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8776014B2 (en) | Software build analysis | |
Ekanayake et al. | Mapreduce for data intensive scientific analyses | |
US7386577B2 (en) | Dynamic determination of transaction boundaries in workflow systems | |
Mey et al. | Score-P: A unified performance measurement system for petascale applications | |
US7178134B2 (en) | Method and apparatus for resolving memory allocation trace data in a computer system | |
CN100442245C (zh) | 用于分析运行时存储器访问错误的方法和系统 | |
US20130318504A1 (en) | Execution Breakpoints in an Integrated Development Environment for Debugging Dataflow Progrrams | |
US8307375B2 (en) | Compensating for instrumentation overhead using sequences of events | |
US20120131559A1 (en) | Automatic Program Partition For Targeted Replay | |
CN107533549A (zh) | 用于创建数据库的选择性快照的系统和方法 | |
CN102033804A (zh) | 辅助内存分析的方法和系统 | |
US9594656B2 (en) | Analysis and visualization of application concurrency and processor resource utilization | |
Coppa et al. | Estimating the empirical cost function of routines with dynamic workloads | |
Zhang et al. | Understanding the performance of GPGPU applications from a data-centric view | |
Li et al. | Fast data-dependence profiling by skipping repeatedly executed memory operations | |
CN110187884A (zh) | 一种多线程应用场景下的访存指令插桩优化方法 | |
Kinneer et al. | Sofya: A flexible framework for development of dynamic program analyses for Java software | |
Garbatov et al. | Data access pattern analysis and prediction for object-oriented applications | |
Kabbaj et al. | Towards an active help on detecting data flow errors in business process models. | |
Su et al. | GASP! A standardized performance analysis tool interface for global address space programming models | |
Geimer et al. | A parallel trace-data interface for scalable performance analysis | |
Hagedorn et al. | Cost-based sharing and recycling of (intermediate) results in dataflow programs | |
Wang et al. | Lightweight hardware transactional memory profiling | |
Song et al. | A parallel fasttrack data race detector on multi-core systems | |
Champaign et al. | Stability and volatility in the Linux kernel |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110427 |