CN1149470C - 一种分析面向对象的程序的执行的方法和设备 - Google Patents

一种分析面向对象的程序的执行的方法和设备 Download PDF

Info

Publication number
CN1149470C
CN1149470C CNB981227953A CN98122795A CN1149470C CN 1149470 C CN1149470 C CN 1149470C CN B981227953 A CNB981227953 A CN B981227953A CN 98122795 A CN98122795 A CN 98122795A CN 1149470 C CN1149470 C CN 1149470C
Authority
CN
China
Prior art keywords
moving object
root
information
java
moving
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.)
Expired - Fee Related
Application number
CNB981227953A
Other languages
English (en)
Other versions
CN1221912A (zh
Inventor
W・F・福特
W·F·福特
尼瑟旺格
J·D·尼瑟旺格
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1221912A publication Critical patent/CN1221912A/zh
Application granted granted Critical
Publication of CN1149470C publication Critical patent/CN1149470C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

提供一种用于分析面向对象的计算机程序的技术。执行期间特定时刻的活动对象的快照可以被存储起来。用一种分析工具去生成使用户能分析活动对象的超文本文档。此外,用户还可以比较在两个不同运行期的活动对象的不同快照,以便例如能容易地确定类的新实例。

Description

一种分析面向对象的程序的 执行的方法和设备
本发明涉及分析(例如优化、查错或“调试”)软件应用程序的技术。更具体来说,本发明涉及将JavaTM虚拟机上应用程序在运行期期间存在的对象有关的信息存储起来供以后分析的技术。
JavaTM程序设计语言是由Sun Microsystem开发的一种面向对象的高级程序设计语言,其轻便性设计,足以使得其能在范围从小型设备(例如寻呼机、蜂窝电话和智能卡)到超级计算机的各种计算机上执行。用Java(和其它语言)编写的计算机程序可以被编译成虚拟机指令由Java虚拟机执行。一般来说,Java虚拟机是一个解码并执行虚拟机指令的解释程序。
用于Java虚拟机的虚拟机指令是字节代码,即它们包括一个或多个字节。字节代码以一种特定的文件格式存储,该文件格式称作“类文件”,它包括一个类的方法(method)的字节代码。除了一个类的方法的字节代码之外,类文件还包括一个符号表以及其它辅助信息。
以一个或多个类文件中的Java字节代码体现的计算机程序是独立于平台的。这种计算机程序不加改变就可以在能运行Java虚拟机一个实现的任何计算机上执行。Java虚拟机是一个“通用”计算机的软件仿真程序,这是Java虚拟机的计算机程序能独立于平台的一个主要因素。
Java虚拟机通常是以一个软件解释程序实现的。常规的解释程序在执行期间解码并执行被解释程序的虚拟机指令,每次一条指令,这与编译程序不同,编译程序将源代码解码成本机机器指令,然后执行,在执行期间不再执行解码。一般来说,Java虚拟机要用Java程序设计语言以外的一种程序设计语言(例如,C++程序设计语言)来编写。因此,Java程序的执行会涉及执行用多种程序设计语言写成的功能。此外,字节代码本身也可能会调用不是用Java程序设计语言编写的函数(例如用于输入/输出的系统函数)。因此执行JAVA程序会导致执行用多种程序设计语言写成的函数,这是很正常的。
尽管面向对象的程序的一个目标是允许重用测试过的源代码,由此减少运行期出错的次数,Java程序仍然能从提供一个在运行期进入程序操作的窗口的分析技术中获得好处。例如,分析可用于优化程序或者寻找代码中的错误。因此,提供分析Java虚拟机上执行的应用程序的革新技术,这是人们所希望的。此外,提供应用程序在运行期存在的对象的快照(snapshot),以便例如能够发现内存泄漏,这也是有益的。
总的来说,本发明提供了分析面向对象的计算机程序的革新技术。在运行期期间某特定时刻处于活动状态的对象(“活动对象”)的快照可以被存储起来。可以利用一种分析工具来生成允许用户分析活动对象的超文本文档。例如,用户通过浏览超文本标记语言(HTML)文档,并判定某类的实例比预期的多,就能够识别内存泄漏。用户然后就可以跟踪指向不必要的实例的引用(或指针),以便判定是什么引起了内存泄漏。此外,用户还可以比较两个不同运行期的活动对象的两个不同的快照,以便例如可以容易地识别某类的新实例。下面描述本发明的几个实施例。
根据本发明的一个方面,在计算机系统中,提供一种分析面向对象的程序的执行的方法,该方法包含:
接受面向对象程序运行期期间要求存储与活动对象相关的信息的输入;
扫描由是对象的根集的成员的对象开始的活动对象;
存储与活动对象相关的信息。
根据本发明的另一方面,提供一种分析面向对象的程序的执行的设备,该设备包含:
一个或多个处理器;
一个或多个存储器,其中处理器和存储器至少其中之一适于:
接受面向对象程序运行期期间要求存储与活动对象相关的信息的输入;
扫描由是对象的根集的成员的对象开始的活动对象;以及
存储与活动对象相关的信息。
结合附图参阅下面的详细描述后,本发明的其他特点和优点将变得非常明显。
图1表示的是可用于执行本发明实施例的软件的一例计算机系统。
图2表示图1的计算机系统的系统框图。
图3表示Java源代码程序是如何执行的。
图4表示一个Java运行期系统的一个实现的部件。
图5表示在一个Java堆栈上存储的函数的帧。
图6表示存储在运行期期间获得的活动对象有关的信息的过程。
图7表示表现在运行期期间获得的活动对象有关的信息的过程。
图8A~8E表示在快照被摄取时具有活动的实例的所有类的超文本文档。
图9表示在快照被摄取时具有活动的实例的一个类的超文本文档。
图10表示不含子类的一个类的实例的超文本文档。
图11表示包含子类的一个类的实例的超文本文档。
图12表示一个活动对象的有关信息的超文本文档。
图13表示根集引用到一个不含弱引用的活动对象的超文本文档。
图14表示根集引用到一个包含弱引用的活动对象的超文本文档。
图15A和15B表示从一个活动对象可达到的所有对象的超文本文档。
图16A~16E表示根集所有成员的超文本文档。
图17表示两个不同运行期的活动对象之间的差别(例如新实例)的确定过程。
图18表示一个类的新实例的超文本文档。
图19表示一个包含子类的类的新实例的超文本文档。
图20A~20B描述可用于存储活动对象的有关信息的数据结构。
图21表示BOD服务器的一个实施例。
定义
类—一种面向对象的数据类型,它定义共享相同特征的对象,一般包括数据以及以该数据为操作对象的函数。
对象(或实例)—类的一个例化的成员。
对象的根集—不通过其它对象链接能被直接引用的对象。
活动对象—已经被例化、并且是根集的成员或者可被根集的成员直接或间接引用的对象。
本机方法(或代码)—用Java程序设计语言以外的其它程序设计语言写成的函数。
概述
在以下的说明中,将结合对执行期间Java程序(例如字节代码)的执行进行分析的最佳实施例来说明本发明。具体来说,将要说明例子中,有用C++程序设计语言写成Java模拟机。然而,本发明不局限于任何特定语言、计算机结构、或特定的实现。因此,以下对实施例的说明的目的是示范性而不是限制性的。
图1表示可用于执行本发明一个实施例的软件的一例计算机系统。图1所示的计算机系统1包括显示器3、屏幕5、机箱7、键盘9和鼠标11。鼠标11可以有一个或多个用于与图形用户界面交互作用的按钮。机箱7内安装了CD-ROM驱动器13、系统内存和硬盘驱动器(见图2),它们可用于存储和检索实现本发明的含有计算机代码的软件程序、用于本发明的数据,等等。尽管CD-ROM 13被显示为典型的计算机可读存储介质,其它计算机可读存储介质,包括软盘、磁带、快速存储器、系统内存以及硬盘驱动器,也都可以使用。此外,在载波中(例如在包括因特网在内的网络中)实现的数据信号也可以是计算机可读存储介质。
图2表示用于执行本发明一个实施例的软件的计算机系统1的系统框图。如图1所示,计算机系统1包括监视器3、键盘9和鼠标11。计算机系统1进一步包括数个子系统,诸如中央处理器51、系统内存53、固定式存储器55(例如硬盘驱动器)、可卸式存储器57(例如CD-ROM驱动器)、显示适配器59、声卡61、扬声器63、以及网络接口65。其它适于本发明使用的计算机系统可以包括更多或更少的子系统。例如,另一种计算机系统可包括多个处理器(即多处理器系统),或包括一个高速缓存。
计算机系统1的系统总线体系结构由箭头67表示。然而,这些箭头是表示用于连接各个子系统的互连方案。例如,可以用本地总线连接中央处理器到系统存储器和显示适配器。图2中所示的计算机系统1只是适合本发明使用的计算机系统的一例。其它具有不同子系统配置的计算机结构也可以使用。
一般来说,用Java程序设计语言写成的计算机程序要被编译成字节代码或Java虚拟机指令,然后由Java虚拟机执行。字节代码被存储在一个类文件中输入到Java虚拟机用于解释。图3表示一段简单的Java源代码被一个解释程序-Java虚拟机执行的过程。
Java源代码101包括用Java编写的经典Hello World程序。源代码然后被输入到字节代码编译器103,后者把源代码编译成字节代码。字节代码被称为虚拟机指令,因为他们将被一个软件仿真的计算机执行。一般来说,虚拟机指令是通用的(即不是专门为任何特定的微处理器和计算机结构设计的),但是这并不是非这样不可。字节代码编译器输出一个包括Java程序的字节代码的Java类文件105。
该Java类文件被输入到Java虚拟机107。Java虚拟机是一个解码并执行Java类文件中字节代码的解释器。Java虚拟机是一个解释器,但是它通常被称作Java虚拟机,因为它用软件仿真一个微处理器或计算机结构(例如硬件上可能不存在的微处理器和计算机结构)。
图4表示一个Java运行期系统的一个实现的部件。Java虚拟机的实现被称为Java运行期系统。Java运行期系统201可以接受输入Java类文件203、标准内嵌Java类205和本机方法207,以便执行一个Java程序。标准内嵌Java类可以是诸如线程、串等等对象的类。本机方法可以用Java程序设计语言之外的其它程序设计语言编写。本机方法一般存储在动态链接库(DDL)或共享库中。
Java运行期系统也可以与一个操作系统209连接。例如,可以由操作系统来处理输入-输出函数,包括提供Java运行期系统与Java类文件203、标准内嵌Java类205和本机方法207的连接。
动态类加载器和检验器211通过操作系统209将Java类文件203和标准内嵌Java类205装入内存213。此外,动态类加载器和检验器还可以检验Java类文件中字节代码的正确性,报告所发现的任何错误。
本机方法链接器215通过操作系统209连接本机方法207到Java运行期系统并将本机方法存储在内存213。如图所示,内存213可以为Java类保留一个类和方法区,为本机方法保留一个本机方法区。内存213中的类和方法区可以被存储在一个垃圾回收堆中。在一个新的对象被创建时,他们全存储在垃圾收集堆中。当空间不再使用时,由Java运行期系统而不是应用程序,负责回收垃圾回收堆中的内存。
图4所示的Java运行期系统的核心是一个执行引擎217。该执行引擎执行存储在内存213中的指令,并且可以用软件、硬件、或二者的组合来实现。执行引擎支持面向对象的应用程序,并且在概念上说,有多个执行引擎在并行地运行,每个Java线程有一个执行引擎。执行引擎217也可以利用后援代码221(support code)。后援代码可以提供与例外、线程、安全等等有关的功能。
当Java程序执行时,函数在每个线程内部被顺序调用。每个线程有一个执行堆栈,存储每个尚未完成执行的函数的帧。帧存储着函数的执行所需的信息,这种信息可能包括状态变量、局部变量和一个操作数堆栈。当一个函数被调用时,该函数的一个帧被压入执行堆栈。当函数结束时,函数的帧被弹出执行堆栈。因此,只有与执行堆栈顶部的帧对应的函数是活动的,与执行堆栈顶部以下的帧对应的函数已经将它们的执行挂起,一直要等到它们调用的函数返回(即结束)。
图5表示在一个执行堆栈上存储的Java函数的帧。图中所示的执行堆栈301在执行堆栈顶部有一个帧303,帧305和307分别在帧303的下面。一个堆栈指针SP指向执行堆栈的顶部,而一个帧指针FP指向位于执行堆栈301顶部的堆栈中的一个帧指针。
图中显示,每个帧都包括一个状态变量、一个局部变量和一个用于对应该帧的函数的操作数帧。此外,存储在帧中的最后项是一个帧指针,它指向执行堆栈上位于当前帧下面的帧中的帧指针,如图309和311所示。虽然存储本机方法的帧的执行堆栈可能看起来不一样,但基本原则一般是与所示执行堆栈一样的。
分析运行期的执行
为了分析一个Java程序的执行,用户用一个Java虚拟机来执行程序。虚拟机负责解释Java程序,为了提高效率,可以执行编译。图6表示存储在运行期期间获得的活动对象有关的信息的过程。
在步骤401,系统在运行期期间接受输入以存储活动对象的有关信息。例如,用户可能按下某些键(例如<control>\),向系统表示活动对象的有关信息应当要存储了。
系统然后在步骤403,搜索以根集的成员开始的被请求信息。是根集成员的对象可以被直接引用。例如,在最佳实施例中,是根集成员的对象可以被Java类的静态数据成员引用、被Java或本机执行堆栈局部引用、或者被本机代码全局引用(全局Java本机接口引用)。系统可以从是根集成员的对象开始,递归地跟踪对由根集成员引用的任何其它对象的引用。这样,所有是根集成员的对象或是可以直接或间接被根集成员引用的对象都将被确定(即从根集可到达的对象的传递闭包)。这些对象就是此时此刻的活动对象。在最佳实施例中,使用了一个与垃圾回收算法类似的标记与扫描算法。
一旦确定了活动对象,系统就在步骤405存储关于这些对象的信息。这种信息可能包括对象的标识符、表示对象是否是根集成员以及为什么是一个根集成员(例如,被一个Java类的静态数据成员引用)的标志、线程标识符(适用的话)、类标识符、对象的数据,等等。在最佳实施例中被存储的信息如图18A~18B所示。在Java程序中,类的对象存储存储其它对象的结构(即某特定类的所有对象的结构),所以活动对象相关的信息可能包括定义其它对象的结构的对象。
活动对象相关的信息可以被存储在文件或任何其它计算机存储器(例如内存)中。该信息可在活动对象被确定时或者随后被一次性存储。因此,流程图中表示的步骤是示例性的,本领域的熟练人员容易明白,在其它实施例中可以对这些步骤进行组合、删除或插入。尽管这种信息可以在运行期期间分析,但一般都是在程序停止执行后再作分析。图7表示提供在运行期期间获得的活动对象有关的信息的过程。在步骤451,系统检索所存储的活动对象的相关信息,这种信息不仅包括关于活动对象本身的信息,也包括关于它们相互间关系的信息。活动对象之间的关系可能就像是一个有向图结构,它以根集成员为开端,一般是经过各种间接层次,前进到其它对象。所以,不是根集成员的对象,能够像图6中步骤403一样地通过跟踪从根集成员的引用而被确定。
一旦检索出活动对象的相关信息,系统就在步骤453接受一个用户查询。在一个最佳实施例中,该查询被作为一个统一资源定位器(URL)详细登记到一个超文本传输协议(HTTP)服务器。以下说明可能用到的查询。
“全部类查询”显示在运行期出现在堆上的类的全部。这些类可以按其完全限定类名被排序,组织成封装结构。这个查询的结果的例子在图8A~8E中表示。
“类查询”显示关于一个期望的类的信息。该信息可能包括超类、任何子类、实例数据成员、以及静态数据成员。这个查询的结果的例子在图9中表示。
“实例查询”显示一个指定类的所有实例。这个查询的结果的例子在图10中表示。
“对象查询”显示在运行期出现在堆上的一个对象的有关信息。最值得注意的是,人们可以漫游到引用该对象的对象,这一点可用于追踪错误。这个查询的结果的例子在图12中表示。
“根查询”提供从根集到特定对象的引用链。可以提供从能到达所感兴趣的对象的根集的每个成员开始的引用链。在最佳实施例中,这些链是按深度优先搜索计算的,目的是为了减少链的长度。也可以采用其它搜索技术。“根查询”是查找内存泄漏的一种很有价值的查询,因为可用它来判断对象为什么仍然是活动的。这个查询的结果的例子在图13中表示。
“可到达对象查询”显示从特定对象可到达的所有对象的传递闭包。该查询适用于判断内存中某对象总运行期的轨迹。这个查询的结果的例子在(图12后的)图中表示。
“全部根查询”显示根集的所有成员。这个查询的结果的例子在图14中表示。
除非在步骤455该查询表明用户结束,否则,系统在步骤457生成一个或多个超文本文档,以提供符合该查询的信息。超文本文档包括向文档其它部分或其它文档的链接。在最佳实施例中,超文本文档用超文本标记语言(HTML)编写。
在步骤459,系统将该超文本文档提供给用户去分析。完成方法是创建一个HTTP服务器去提供一个能用Web浏览器阅览的HTML文档。
以上说明了本发明的实施例。但是读者去读一读提供给用户作分析的数据的例子可能是有帮助的。一旦活动对象的有关信息的快照被摄取并放入HTML文档,用户就可以用Web浏览器去分析该信息。较好的着手点是显示所有有过活动实例的对象的一个查询。
图8A~8E表示在快照被摄取时具有活动的实例的全部类的超文本文档。如图所示,类是通过封装组织的。加下划线的文字代表到其它HTML文档的超文本链接。举例来说,可以选取图8D中的链接503去更详细地阅读关于类jovial.slotCar.track.TrackSegment的信息。
图9表示在快照被摄取时具有活动的实例的一个类的超文本文档,本例中,该类是jovial.slotCar.track.TrackSegment。这样,当用户“点击”链接503,就会看见图9表示的超文本文档。如图所示,诸如超类、子类、实例数据成员、以及静态数据成员之类的信息,可以用指向更详细信息的超文本链接表示出来。
在图9中超文本文档的底部,用户可以通过不含子类的链接553或包括子类的链接575去阅读该类的活动实例。换言之,链接553将显示类jovial.slotCar.track.TrackSegment的所有实例,但是不包括这个类的子类的实例。链接575将显示类jovial.slotCar.track.TrackSegment的所有实例一包括这个类的子类的实例(例如,类jovial.slotCar.track.CurvedTrackSegment和jovial.slotCar.track.StraightTrackSegment)。
图10表示不含子类的一个类的实例的超文本文档。尽管该超文本文档不是选择链接533时出现的超文本文档,但是它代表了超文本文档的式样的一个例子。如图所示,有类jovial.slotCar.Car的两个实例,它们位于特定的内存位置。如果用户要分析关于这两个实例中任何一个的更详细信细,就可以选择链接。链接607将结合图12作更详细的说明。
图11表示包含子类的一个类的实例的超文本文档。该图表示如果用户点击图9的链接575后会出现什么。由于子类的实例被显示出来,有些实例可能会比jovial.slotCar.track.TrackSegment包含更多数据或函数。然而,所有这些实例将继承这个父类。
图12表示一个活动对象的有关信息的超文本文档。该活动对象是可通过图10中链接607选择的活动对象。如图所示,类、实例数据成员、对该对象的引用、自根集的引用链都可以提供。举例来说,链接635会显示不含弱引用的自根集的引用链,链接675会显示包含弱引用的自根集的引用链。弱引用是在需要更多内存或堆空间时垃圾回收器会将其移去的一种引用。链接681会显示能由该对象到达(或引用)的所有对象。
图13表示根集引用到一个不含弱引用的活动对象的超文本文档,而图14表示根集引用到一个包含弱引用的活动对象的超文本文档。尽管图中没有表示出弱引用,图13中链接691允许用户切换到图14,而图14中链接693则允许用户切换回去。
图15A和15B表示从一个活动对象可达到的所有对象的超文本文档。这在用户激活图12的链接681时就会显示出来。这些对象可以通过搜寻活动对象的一个有向图来确定。
回头参见图8E,链接705允许用户请求阅览根集的所有成员。图16A~16E表示如果激活链接705就会显示的根集所有成员的超文本文档。如图所示,根集的成员可以按照它们被引用的方式来组织。引用方式例如,Java静态引用、Java局部引用、本机静态引用、本机局部引用。图16E中链接715允许用户请求有过活动实例的所有类,诸如图8A~8E。
超文本文档的诸例说明了用户可以容易地分析最佳实施例中的活动对象。然而,本发明并不局限于通过超文本文档来表示,本领域的熟练人员会明白,其它方法也可以采用。
为了进一步理解本发明,描述一下用户能在其中执行对Java程序的分析的情景可能是有帮助的。内存泄漏是几乎所有程序设计语言中普遍存在的问题。概括地说,内存泄漏指内存已经分配,但不再被一个计算机程序使用。在最坏的情况下,内存泄漏会因为没有足够的可用内存而导致内存分配出错。在由根集向不再需要的堆中的对象的引用时,内存泄漏可能归咎于程序员的错误。
假定用户怀疑有内存泄漏问题,用户可计算在特定运行期应当是活动的某个类的实例的数量。用户然后就可以按照本发明实施例生成活动对象的快照。用户然后可以分析所存储的信息,确定曾经是活动的实例的数量。如果数量比预期的多,用户可以追踪从错误的活动对象出发的引用,以判断什么对象正保持一个错误的引用。
此外,本发明的实施例允许用户比较活动对象的快照。图17表示了确定在两个不同的运行期的活动对象之间的差别的过程。
在步骤751,系统存储与在第一运行期的活动对象有关的信息。随后在步骤753,系统存储与在第二运行期的活动对象有关的信息。然后再指令系统按上述方式存储由用户输入的信息。
用户可以在步骤755指令系统去确定第一、第二运行期之间的差异。例如,用户可以指定存储着两个运行期的快照的文件。系统然后比较这两个快照,确定这两个快照之间的差异—例如在第二运行期出现了什么新实例。
第一、第二运行期之间的差异一旦确定,系统就在步骤757接受用户查询。除以上说明的查询外,还可以使用一个“新实例查询”,该查询只显示在第二运行期中的新实例。“新”实例是指在第一快照中出现但是在第二快照没有相同标识符的对象的实例。对象的标识符是由虚拟机分配、唯一地标识对象的一个32位的整数(或句柄(handle))。尽管句柄可以被重用,在相对较短的时间间隔内摄取的快照一般产生很好的结果。这种查询的结果的一个例子如图8所示。
除非在步骤759该查询表示用户结束,否则,系统在步骤761生成一个或多个超文本文档,以提供符合查询的信息(例如两个快照之间的差异)。在步骤763,系统将该超文本文档提供给用户去分析,完成方法是创建一个HTTP服务器去提供一个能用Web浏览器阅览的HTML文档。
类的新实例的超文本文档如图18中所示。如图所示,链接801允许用户查看该类的详细信息,而链接803允许用户查看该新实例的详细信息。在图18中的超文本文档中没有表示子类。图19表示了一个包含子类的类的新实例的超文本文档,本例中还有它们其它的实例。
在调试期间,分析计算机程序随时间推移如何变化是有益的。运用本发明实施例,用户不仅能摄取运行期期间多个活动对象快照,而且能让系统比较快照并表示差异,供进一步分析之用。
至此,就可以将关于活动对象的信息的具体细节存储起来。图20A~20B描述了最佳实施例中可用于存储活动对象的相关信息的一种数据结构。可以按照这些图中说明的结构存储一个二进制对象转储(binaryobject dump-BOD)文件。尽管最佳实施例中可以使用这种结构,也可以使用其它结构,这并不偏离本发明的精神。
图21显示BOD服务器的典型部件。服务器启动时,读一个BOD文件并在内存中建立所示的结构。该结构的顶层是一个快照实例(所示对象是快照的成员)。当用户请求信息时,服务器将该快照作为堆内容的只读表示来处理。
以上是对本发明的最佳实施例的全部说明,但是也可以使用其它可选方式、改进方式和同等方式。显然,如果适当改动上述实施例,本发明同样适合。例如,上述实施例是结合Java虚拟机说明的,但本发明的原理完全适用于其它系统和语言。因此,不应将上述说明看作是对本发明范围的限制。本发明的范围应有附后的权利要求以及与权利要求对等内容的范围来界定。

Claims (16)

1.在计算机系统中,一种分析面向对象的程序的执行的方法,该方法包含:
接受面向对象程序运行期期间要求存储与活动对象相关的信息的输入;
扫描由是对象的根集的成员的对象开始的活动对象;
存储与活动对象相关的信息。
2.权利要求1的方法,其中,扫描活动对象包括为关于活动对象信息而扫描由对象的根集中一个对象引用的对象。
3.权利要求1的方法,其中,存储所述的与活动对象相关的信息包括存储对象根集中的对象以及由对象根集中一个对象引用的对象的相关信息。
4.权利要求1或2的方法,其中,与活动对象相关的信息包括该对象是对象的根集的成员的指示。
5.权利要求1-3中任一权利要求的方法,其中,对象根集的每个对象由静态数据成员、来自堆栈的局部引用或来自本机代码的引用所引用。
6.权利要求1-3中任一权利要求的方法,其中,活动对象包括定义其它对象的结构的对象。
7.权利要求1-3中任一权利要求的方法,其中,对象为活动对象的相关信息被存储在文件中。
8.权利要求1-3中任一权利要求的方法,其中,活动对象包括Java类的实例。
9.一种分析面向对象的程序的执行的设备,该设备包含:
一个或多个处理器;
一个或多个存储器,其中处理器和存储器至少其中之一适于:
接受面向对象程序运行期期间要求存储与活动对象相关的信息的输入;
扫描由是对象的根集的成员的对象开始的活动对象;以及
存储与活动对象相关的信息。
10.权利要求9的设备,其中,扫描活动对象包括为关于活动对象的信息而扫描由对象的根集中一个对象引用的对象。
11.权利要求9的设备,其中,存储所述的与活动对象相关的信息包括存储关于对象根集中的对象以及由对象根集中一个对象引用的对象的相关信息。
12.权利要求9或10的设备,其中,与活动对象相关的信息包括所述对象是对象的根集的成员的一个指示。
13.权利要求9或10的设备,其中,对象根集的每个对象由静态数据成员、来自堆栈的局部引用或来自本机代码的引用所引用。
14.权利要求9或10的设备,其中,活动对象包括定义其它对象的结构的对象。
15.权利要求9或10的设备,其中,对象为活动对象的相关信息被存储在文件中。
16.权利要求9或10的设备,其中,活动对象包括Java类的实例。
CNB981227953A 1997-12-09 1998-12-09 一种分析面向对象的程序的执行的方法和设备 Expired - Fee Related CN1149470C (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US6799397P 1997-12-09 1997-12-09
US09/060,226 US6167535A (en) 1997-12-09 1998-04-14 Object heap analysis techniques for discovering memory leaks and other run-time information
US09/060226 1998-04-14
US60/067993 1998-04-14

Publications (2)

Publication Number Publication Date
CN1221912A CN1221912A (zh) 1999-07-07
CN1149470C true CN1149470C (zh) 2004-05-12

Family

ID=26739710

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB981227953A Expired - Fee Related CN1149470C (zh) 1997-12-09 1998-12-09 一种分析面向对象的程序的执行的方法和设备

Country Status (5)

Country Link
US (1) US6167535A (zh)
EP (1) EP0923028B1 (zh)
JP (1) JPH11312097A (zh)
CN (1) CN1149470C (zh)
DE (1) DE69813160T2 (zh)

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6308270B1 (en) * 1998-02-13 2001-10-23 Schlumberger Technologies, Inc. Validating and certifying execution of a software program with a smart card
US6694346B1 (en) * 1999-04-30 2004-02-17 International Business Machines Corporation Long running, reusable, extendible, virtual machine
US6738757B1 (en) * 1999-06-02 2004-05-18 Workwise, Inc. System for database monitoring and agent implementation
US6742123B1 (en) * 1999-09-10 2004-05-25 Sun Microsystems, Inc. Apparatus and methods for preventing denial of service attacks
US6745344B1 (en) * 1999-11-19 2004-06-01 Oracle International Corporation Debug and data collection mechanism utilizing a difference in database state by using consecutive snapshots of the database state
US6839894B1 (en) 1999-11-19 2005-01-04 Oracle International Corporation Method and apparatus for debugging a software program using dynamic debug patches and copy on write views
US6671825B1 (en) * 1999-11-19 2003-12-30 Oracle International Corporation Method and apparatus for debugging a software program
US6817011B1 (en) * 1999-12-14 2004-11-09 International Business Machines Corporation Memory allocation profiling to discover high frequency allocators
EP1237080A1 (de) * 2001-03-02 2002-09-04 Siemens Aktiengesellschaft Überprüfung eines Computersystems auf gesperrte Speicherbereiche nach einem Abbruch eines Prozesses
US7203756B2 (en) * 2001-04-27 2007-04-10 International Business Machines Corporation Mechanism to cache references to Java RMI remote objects implementing the unreferenced interface
US7873872B1 (en) * 2001-07-10 2011-01-18 Versata Development Group, Inc. System and method for remotely debugging application programs
US7096388B2 (en) * 2001-08-08 2006-08-22 Avaya Technology Corp. Fault tolerance software system with periodic external self-test failure detection
US20030196061A1 (en) * 2002-04-16 2003-10-16 Hideya Kawahara System and method for secure execution of multiple applications using a single GC heap
GB0213218D0 (en) * 2002-06-08 2002-07-17 Koninkl Philips Electronics Nv Operation of java virtual machine
US7234080B2 (en) * 2002-10-18 2007-06-19 Computer Associates Think, Inc. Locating potential sources of memory leaks
US7870431B2 (en) * 2002-10-18 2011-01-11 Computer Associates Think, Inc. Transaction tracer
US7293263B2 (en) * 2002-12-20 2007-11-06 Bea Systems, Inc. System and method for memory leak detection in a virtual machine environment
US7730449B2 (en) * 2003-03-19 2010-06-01 Toshiba Corporation Auto reference counting pointer for C++ objects with ability to re-cast and lookup from a free pointer
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US20040243379A1 (en) * 2003-05-29 2004-12-02 Dominic Paulraj Ideal machine simulator with infinite resources to predict processor design performance
CN1327352C (zh) * 2003-09-23 2007-07-18 中兴通讯股份有限公司 一种实现嵌入式实时系统内存泄漏检测和定位的方法
US7761852B2 (en) * 2003-11-26 2010-07-20 International Business Machines Corporation Fast detection of the origins of memory leaks when using pooled resources
US7496615B2 (en) * 2004-03-11 2009-02-24 International Business Machines Corporation Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software
JP4512402B2 (ja) * 2004-04-12 2010-07-28 株式会社日立製作所 メモリリークの原因箇所検出方法、及びその実行プログラム
US7444484B2 (en) * 2004-06-24 2008-10-28 International Business Machines Corporation Method and system for determining memory usage of a heap
US7162605B2 (en) * 2004-06-24 2007-01-09 International Business Machines Corporation Method and system for obtaining memory usage information for a heap when a peak live count is updated
US20060085156A1 (en) * 2004-10-18 2006-04-20 Kolawa Adam K Method and system for predicting memory leaks from unit testing
US7434206B2 (en) * 2005-03-10 2008-10-07 Hewlett-Packard Development Company, L.P. Identifying memory leaks in computer systems
US20060212852A1 (en) * 2005-03-16 2006-09-21 Jinwoo Hwang Methods, systems and computer program products for detecting memory leaks
US7870170B2 (en) * 2005-05-03 2011-01-11 International Business Machines Corporation Method and apparatus for determining leaks in a Java heap
JP2006350876A (ja) * 2005-06-20 2006-12-28 Hitachi Ltd ヒープダンプ取得方法
GB0515405D0 (en) * 2005-07-27 2005-08-31 Ibm Memory leak detection
US20070250820A1 (en) * 2006-04-20 2007-10-25 Microsoft Corporation Instruction level execution analysis for debugging software
DE102006029138A1 (de) * 2006-06-22 2007-12-27 Dspace Digital Signal Processing And Control Engineering Gmbh Verfahren und Computerprogrammprodukt zur Detektion von Speicherlecks
US7908591B1 (en) * 2006-07-17 2011-03-15 The Mathworks, Inc. Memory profiling
US7743280B2 (en) * 2007-02-27 2010-06-22 International Business Machines Corporation Method and system for analyzing memory leaks occurring in java virtual machine data storage heaps
JP4585534B2 (ja) * 2007-03-01 2010-11-24 富士通株式会社 システム監視プログラム、システム監視方法およびシステム監視装置
CN101615143B (zh) * 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
US8032568B2 (en) * 2008-06-30 2011-10-04 International Business Machines Corporation Method for performing memory leak analysis inside a virtual machine
US8438532B2 (en) 2011-04-19 2013-05-07 Sonatype, Inc. Method and system for scoring a software artifact for a user
US8612936B2 (en) 2011-06-02 2013-12-17 Sonatype, Inc. System and method for recommending software artifacts
US9286182B2 (en) * 2011-06-17 2016-03-15 Microsoft Technology Licensing, Llc Virtual machine snapshotting and analysis
US8473894B2 (en) 2011-09-13 2013-06-25 Sonatype, Inc. Method and system for monitoring metadata related to software artifacts
US8627270B2 (en) 2011-09-13 2014-01-07 Sonatype, Inc. Method and system for monitoring a software artifact
US9141378B2 (en) 2011-09-15 2015-09-22 Sonatype, Inc. Method and system for evaluating a software artifact based on issue tracking and source control information
US8656343B2 (en) 2012-02-09 2014-02-18 Sonatype, Inc. System and method of providing real-time updates related to in-use artifacts in a software development environment
US8924437B2 (en) * 2012-03-13 2014-12-30 Microsoft Corporation Memory usage data collection and analysis for dynamic objects
US8825689B2 (en) 2012-05-21 2014-09-02 Sonatype, Inc. Method and system for matching unknown software component to known software component
US9141408B2 (en) * 2012-07-20 2015-09-22 Sonatype, Inc. Method and system for correcting portion of software application
US8938722B2 (en) 2012-10-17 2015-01-20 International Business Machines Corporation Identifying errors using context based class names
US9135263B2 (en) 2013-01-18 2015-09-15 Sonatype, Inc. Method and system that routes requests for electronic files
US9330119B2 (en) 2013-04-11 2016-05-03 Oracle International Corporation Knowledge intensive data management system for business process and case management
US10740358B2 (en) 2013-04-11 2020-08-11 Oracle International Corporation Knowledge-intensive data processing system
CN104679741B (zh) * 2013-11-26 2021-03-12 腾讯科技(深圳)有限公司 一种获取实例占用内存的方法及装置
KR101801581B1 (ko) * 2013-12-19 2017-11-27 인텔 코포레이션 머신 학습 스냅샷 평가를 포함하는 보호 시스템
CN105630662B (zh) * 2014-10-28 2019-07-19 腾讯科技(深圳)有限公司 内存检测方法和装置
US10248561B2 (en) 2015-06-18 2019-04-02 Oracle International Corporation Stateless detection of out-of-memory events in virtual machines
US9720823B2 (en) 2015-06-18 2017-08-01 Oracle International Corporation Free memory trending for detecting out-of-memory events in virtual machines
CN105260294A (zh) * 2015-11-16 2016-01-20 曙光信息产业(北京)有限公司 一种应用程序占用内存的监控方法及装置
US10534706B1 (en) * 2015-12-15 2020-01-14 Workday, Inc. Automated garbage collection architecture
US11327797B2 (en) 2016-05-09 2022-05-10 Oracle International Corporation Memory usage determination techniques
US10146661B2 (en) * 2016-06-10 2018-12-04 Apple Inc. Memory debugging tool for displaying objects within a navigable graph
US9971594B2 (en) 2016-08-16 2018-05-15 Sonatype, Inc. Method and system for authoritative name analysis of true origin of a file
CN107967205B (zh) * 2016-10-18 2020-12-29 阿里巴巴(中国)有限公司 一种内存分析方法、装置、系统以及计算设备
CN111274082B (zh) * 2020-01-13 2023-04-18 北京字节跳动网络技术有限公司 一种内存性能的分析方法、装置、介质和电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5592600A (en) * 1994-09-27 1997-01-07 International Business Machines Corporation Animated display showing execution of object-oriented programs
US5740440A (en) * 1995-01-06 1998-04-14 Objective Software Technology Dynamic object visualization and browsing system
US5606661A (en) * 1995-06-07 1997-02-25 Tandem Computers Incorporated Apparatus and method for scan-based testing in an object-oriented programming environment

Also Published As

Publication number Publication date
EP0923028A2 (en) 1999-06-16
DE69813160T2 (de) 2003-10-16
EP0923028A3 (en) 2001-09-12
CN1221912A (zh) 1999-07-07
EP0923028B1 (en) 2003-04-09
JPH11312097A (ja) 1999-11-09
US6167535A (en) 2000-12-26
DE69813160D1 (de) 2003-05-15

Similar Documents

Publication Publication Date Title
CN1149470C (zh) 一种分析面向对象的程序的执行的方法和设备
CN1134731C (zh) 在计算机系统中编译指令的方法
US7912877B2 (en) Leveraging garbage collection to dynamically infer heap invariants
Shacham et al. Chameleon: Adaptive selection of collections
Smith et al. Heterogeneous process migration: The Tui system
US8196129B2 (en) Adaptive class loading
Geoffray et al. VMKit: a substrate for managed runtime environments
CN1149478C (zh) 从本地码有效调用Java方法的方法和设备
CN101361058B (zh) 经定性化注释的代码
CN1848088A (zh) 将本机接口函数调用转换为更简单操作的方法和系统
CN1821964A (zh) 将本机函数内嵌到编译的Java代码中的方法和系统
CN1922574A (zh) 无需额外的代码分析来进行链接时代码优化的方法和系统
Mitchell et al. Four trends leading to Java runtime bloat
Šipek et al. Exploring aspects of polyglot high-performance virtual machine GraalVM
US20040083467A1 (en) System and method for executing intermediate code
Strumpen Compiler technology for portable checkpoints
Jia et al. Detecting JVM JIT compiler bugs via exploring two-dimensional input spaces
Wu et al. CoDocent: Support API usage with code example and API documentation
Stepanov et al. Type-centric Kotlin compiler fuzzing: Preserving test program correctness by preserving types
CN1287280C (zh) 用于在运行时提高函数的执行性能的方法和计算系统
Sharma Performance comparison of Java and C++ when sorting integers and writing/reading files.
Wang et al. DStream: A streaming-based highly parallel IFDS framework
Zhuykov et al. Ahead-of-time compilation of JavaScript programs
Shirvankar StaticHMEM: static object placement methodology for heterogeneous memory systems in HPC
Galustov et al. Devirtualization for static analysis with low level intermediate representation

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee