[发明专利]用于内存访问事件的处理方法和系统有效
申请号: | 200810174632.4 | 申请日: | 2008-10-31 |
公开(公告)号: | CN101727355A | 公开(公告)日: | 2010-06-09 |
发明(设计)人: | 齐尧 | 申请(专利权)人: | 国际商业机器公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京市中咨律师事务所 11247 | 代理人: | 于静;李峥 |
地址: | 美国*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 内存 访问 事件 处理 方法 系统 | ||
技术领域
本发明涉及计算系统中的数据处理,尤其涉及用于内存访问事件的处理方 法和系统。
背景技术
在过去的二十多年的时间里,随着微电子技术的迅猛发展,计算机系统的 性能和容量发生了爆炸性的增长。较多的计算资源意味着可以开发更为复杂的 软件来处理复杂的问题。此外,较多的计算资源也意味着可以按并行的方式来 同时执行更多的操作。因此,并行的体系结构以及并行的软件开发,在信息处 理中发挥越来越核心的作用。但是,用于处理复杂问题的并行的软件(如包括 多个线程的软件)本身也变得更为复杂。
一个进程是在计算机系统上运行的一个程序或程序的一部分,或者是被某 个程序执行的步骤的相关序列。每个进程包括一个或多个线程。线程是一组指 令的集合,或者是程序的特殊段,它可以在程序里独立执行。所以线程基本上 是轻量级的进程,它负责在单个程序里执行任务。通常由操作系统负责多个线 程的调度和执行。每个线程中可以包括多个相互协作的对象。
面向对象的程序是将相互协作的多个对象组织起来。此前的传统技术中, 程序一般可以看作是一系列的指令集合。在面向对象的程序中,每个对象可以 接收消息、处理数据和发送消息给其它对象。在面向对象的程序中,内存访问 可以看作是访问对象的一些域。
面向对象的程序,尤其是用于并行处理的多线程程序,在设计时由于软件 的复杂性可能存在一些缺陷。例如,在进程或程序中经常采用多线程处理,这 可以充分利用系统资源,缩短程序响应时间,改善用户体验。多线程软件使得 多个线程可以并行的工作以完成多项任务,以提高系统的效率。线程是在同一 时间需要完成多项任务的时候被实现的。但是,程序采用了多线程后,就必须 认真考虑线程调度的问题。如果调度不当,要么造成程序出错,要么造成荒谬 的结果。如这样的软件在运行时可能产生数据争用或内存泄漏等问题。解决这 些问题的途径之一是进行内存访问的跟踪,并对内存访问事件进行处理以便发 现和解决问题。
内存访问跟踪,一般用于内存泄漏分析、内存溢出分析或数据争用分析。 如两个线程同时访问同一个内存地址或相互重叠的内存地址,其中至少一个访 问包括写操作,如果没有强制的访问顺序限制,将产生数据争用。为了检测数 据争用,将记录每个内存访问位置的信息,以及相关的访问事件。
已有技术通过插入代码,来跟踪程序对内存的访问。插入的代码中一般包 括额外的描述和指令。当被跟踪的程序运行的时候,这些额外的描述和指令与 被跟踪的程序一起运行。这些额外的描述和指令将调用内存访问跟踪例程,以 便记录内存访问事件。
内存跟踪的主要问题是内存开销,因为内存跟踪工具将记录与内存访问相 关的全部信息。每个内存访问事件都被存储到内存中。而对于实际的程序,如 对于面向对象的应用程序,在运行时将产生数以十亿计的内存访问事件。将这 些内存访问事件全部记录下来将占用大量的处理资源和存储空间。
对于面向对象的程序,在分配内存空间时,初始设置的一组对象引用组成 根,从根出发可以引用到一个程序中的全部其它对象。这些根对象引用由全部 静态域引用组成。中央处理单元(CPU)注册引用的对象、存储在线程栈上的变 量,以及在运行时维护的内部对象引用。从根无法访问到的对象所占用的内存 空间,将被垃圾回收。
垃圾回收(Garbage collection,即GC),或称为内存垃圾回收,是一种 常用的自动内存管理方式。垃圾回收器将试图回收对象使用的内存空间,这些 内存空间可能不再被对象使用。例如程序不再对一对象进行访问或处理,则为 该对象分配的内存空间可以被垃圾回收。
如上文所述,内存空间包括根对象占用的内存空间,由根对象引用的其它 对象占用的内存空间,由该其它对象引用的对象占用的内存空间,和未被上述 对象占用的内存空间。这些未被上述对象占用的内存空间将作为垃圾而被回收。 在垃圾回收之后,大部分的垃圾回收器将整理堆(compact the heap)。换言之, 垃圾回收器可以移动活的对象到堆中的一个新位置,并且活的对象的位置在其 生命中可以被改变多次。例如,一个堆包括分配了内存空间的多个对象,其中 应用的根直接引用对象A和E。当增加对象E时,如果对象E引用对象C,则对 象C也被引用,并分配内存空间。垃圾回收器将反复查询全部可以访问的对象。
垃圾回收器移动内存中的非垃圾对象,去除堆中的多余间隙。在内存中移 动对象,将使得指向该对象的指针变为无效。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国际商业机器公司,未经国际商业机器公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810174632.4/2.html,转载请声明来源钻瓜专利网。
- 上一篇:开关机测试方法及开关机测试系统
- 下一篇:一种图形用户界面的实现方法