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

技术编号:2888222 阅读:206 留言:0更新日期:2012-04-11 18:40
提供一种用于分析面向对象的计算机程序的技术。执行期间特定时刻的活动对象的快照可以被存储起来。用一种分析工具去生成使用户能分析活动对象的超文本文档。此外,用户还可以比较在两个不同运行期的活动对象的不同快照,以便例如能容易地确定类的新实例。(*该技术在2018年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及分析(例如优化、查错或“调试”)软件应用程序的技术。更具体来说,本专利技术涉及将JavaTM虚拟机上应用程序在运行期期间存在的对象有关的信息存储起来供以后分析的技术。JavaTM程序设计语言是由Sun Microsystem开发的一种面向对象的高级程序设计语言,其轻便性设计,足以使得其能在范围从小型设备(例如寻呼机、蜂窝电话和智能卡)到超级计算机的各种计算机上执行。用Java(和其它语言)编写的计算机程序可以被编译成虚拟机指令由Java虚拟机执行。一般来说,Java虚拟机是一个解码并执行虚拟机指令的解释程序。用于Javs虚拟机的虚拟机指令是字节代码,即它们包括一个或多个字节。字节代码以一种特定的文件格式存储,该文件格式称作“类文件”,它包括一个类的方法(method)的字节代码。除了一个类的方法的字节代码之外,类文件还包括一个符号表以及其它辅助信息。以一个或多个类文件中的Java字节代码体现的计算机程序是独立于平台的。这种计算机程序不加改变就可以在能运行Java虚拟机一个实现的任何计算机上执行。Java虚拟机是一个“通用”计算机的软件仿真程序,这是Java虚拟机的计算机程序能独立于平台的一个主要因素。Java虚拟机通常是以一个软件解释程序实现的。常规的解释程序在执行期间解码并执行被解释程序的虚拟机指令,每次一条指令,这与编译程序不同,编译程序将源代码解码成本机机器指令,然后执行,在执行期间不再执行解码。一般来说,Java虚拟机要用Java程序设计语言以外的一种程序设计语言(例如,C++程序设计语言)来编写。因此,Java程序的执行会涉及执行用多种程序设计语言写成的功能。此外,字节代码本身也可能会调用不是用Java程序设计语言编写的函数(例如用于输入/输出的系统函数)。因此执行JAVA程序会导致执行用多种程序设计语言写成的函数,这是很正常的。尽管面向对象的程序的一个目标是允许重用测试过的源代码,由此减少运行期出错的次数,Java程序仍然能从提供一个在运行期进入程序操作的窗口的分析技术中获得好处。例如,分析可用于优化程序或者寻找代码中的错误。因此,提供分析Java虚拟机上执行的应用程序的革新技术,这是人们所希望的。此外,提供应用程序在运行期存在的对象的快照(snapshot),以便例如能够发现内存泄漏,这也是有益的。总的来说,本专利技术的实施例提供了分析面向对象的计算机程序的革新技术。在运行期期间某特定时刻处于活动状态的对象(“活动对象”)的快照可以被存储起来。可以利用一种分析工具来生成允许用户分析活动对象的超文本文档。例如,用户通过浏览超文本标记语言(HTML)文档,并判定某类的实例比预期的多,就能够识别内存泄漏。用户然后就可以跟踪指向不必要的实例的引用(或指针),以便判定是什么引起了内存泄漏。此外,用户还可以比较两个不同运行期的活动对象的两个不同的快照,以便例如可以容易地识别某类的新实例。下面描述本专利技术的几个实施例。在一个实施例中,计算机实现的、分析面向对象的程序的执行的方法包括在运行期期间接受输入,以存储关于活动对象的信息。为了定位活动对象,系统可以从对象的根集的成员的对象开始扫描活动对象。然后,可以识别由对象的根集(root set)引用的对象,以及由这些对象引用的对象,如此等等,直到所有的活动对象都被识别。关于活动对象的信息可以被存储(例如存储在一个文件中)。在最佳实施例中,活动对象是Java类的实例。在另一个实施例中,计算机实现的、分析面向对象的程序的执行的方法包括检索执行中某个时刻的活动对象的有关信息。可以递归扫描该信息以确认哪些对象是根集的成员,并保持活动对象的层次关系。可以生成一个超文本文档以提供有关活动对象的信息,供用户分析。在另一个实施例中,计算机实现的、分析面向对象的程序的执行的方法包括存储两个不同运行期的活动对象的有关信息。第一和第二运行期之间的差别,例如新实例,于是就可以被确定。可以生成超文本文档,以表示这种差别,供用户分析。结合附图参阅下面的详细描述后,本专利技术的其他特点和优点将变得非常明显。附图说明图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-ROM13被显示为典型的计算机可读存储介质,其它计算机可读存储介质,包括软盘、磁带、快速存储器、系统内存以及硬盘驱动器,也都可以使用。此外,在载波中(例如在包括因特网在内的网络中)实现的数据信号也可以是计算机可读存储介质。图2表示用于执行本专利技术一个实施例的软件的计算机系统1的系统框图。如图1所示,计算机系统1包括监视器3、键盘9和鼠标11。计算机系统1进一步包括数个子系统,诸如中央处理器51、系统内存53、固定式存储器55(例如硬盘驱动器)、可卸式存储器57(例如CD-ROM驱动器)、显示适配器59、声卡61、扬声器63、以及网络接口65。其它本文档来自技高网...

【技术保护点】
在计算机系统中,一种分析面向对象的程序的执行的方法,该方法包含:接受面向对象程序运行期期间要求存储与活动对象相关的信息的输入;扫描由是对象的根集的成员的对象开始的活动对象;存储与活动对象相关的信息。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:WF福特JD尼瑟旺格
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1