java对象信息_Java对象信息分析程序的自动生成方法

Java对象信息分析程序的自动生成方法

【技术领域】

[0001]本发明属于Java计算机应用技术领域,具体涉及一种Java对象信息分析程序的自动生成方法。

【背景技术】

[0002]对Java程序进行性能分析的工具软件通常需要在Java程序运行时“在线”监测内存中对象的状态,并将获取的对象状态信息输出到磁盘文件中,然后程序员利用与工具软件配套的对象信息分析程序对该磁盘文件进行“离线”分析,最后得出统计结果,这些结果可帮助程序员找出程序的性能瓶颈或内存泄漏点。

[0003]该方法存在两个主要问题:一是“在线”监测程序发生修改时,其输出的文件格式可能发生变化,导致“离线”分析程序也要做相应改动;二是“离线”分析程序提供的功能是固定的,它只能统计分析出预设的对象信息,即使它本来可以统计额外的对程序员有用的信息,但程序员却无法利用,因为他有可能没有分析程序的源代码,也有可能分析程序代码复杂,修改它得不偿失,此外指望每个程序员都能去修改这样的程序也不现实。

[0004]现有大部分已有的Java程序分析软件(商用或开源)生成的Java对象信息数据格式是私有的,使用自己专有的分析工具进行解析,数据格式一旦变化,程序也得跟着改,这个任务量跟最初的设计关系很大,同时使用这些工具的程序员也没法对其进行扩充,创建自己想要的分析程序。

【发明内容】

[0005]本发明针对上述问题,提出了一种新颖的Java对象信息分析程序的自动生成方法,可以很好地适应“在线”监测程序频繁改动的情况,同时也允许程序员方便地定制自己需要的“离线”分析程序,得到想要的对象信息,提高了对象信息文件的利用率和程序员的开发效率。

[0006]本发明提供的Java对象信息分析程序的自动生成方法,实现步骤如下:

[0007]步骤1,用EBNF表示法描述对象信息存储格式,生成文本格式的对象信息存储格式的EBNF描述文件;

[0008]步骤2,程序员自定义用于分析的源代码文件;

[0009]步骤3,利用对象信息分析器自动生成模块,将对象信息存储格式的EBNF描述文件和程序员自定义的源代码文件进行分析,生成对象信息分析程序源代码;

[0010]步骤4,将对象信息分析程序源代码经过编译器编译链接生成可执行的对象信息分析程序;

[0011]步骤5,读取对象信息文件,输入到对象信息分析程序中进行分析,输出统计数据;所述的对象信息文件以二进制形式存储。

[0012]本发明的优点与积极效果在于:

[0013](I)本发明采用EBNF表示法描述二进制数据存储格式,可借助现有的语法分析器生成对象信息分析程序,从而减少了不必要的重复工作,让尽可能多的工作由机器自动完成;

[0014](2)由程序员自定义分析的源代码文件,从而可以分析出自己想要的特征,如哪些数据可以丢弃、而哪些需要重点分析、怎么分析等等,便于进行性能优化和BUG调试;

[0015](3)本发明实现的对象信息分析程序的自动生成方法,能很好地适应“在线”监测程序频繁改动的情况,并允许程序员方便地定制自己需要的“离线”分析程序,提高了对象信息文件的利用率和程序员的开发效率。

【附图说明】

[0016]图1是本发明对象信息分析程序的自动生成方法的流程示意图;

[0017]图2是使用EBNF表示法描述对象信息存储格式的示意图;

[0018]图3是使用本发明对象信息分析程序自动生成方法的流程示意图。

【具体实施方式】

[0019]下面将结合附图和实施例对本发明作进一步的详细说明。

[0020]结合图1和图3对本发明的Java对象信息分析程序的自动生成方法具体说明。

[0021]图1中,左边框线内部分表示对象信息分析程序的自动生成过程;右边框线内部分展示使用对象信息分析程序的方法。

[0022]步骤I,用EBNF表示法描述对象信息存储格式。

[0023]图1中①表示“对象信息存储格式的EBNF描述文件”,它以文本格式存放了用EBNF(Extended Backus-Naur Form,扩展的巴科斯范式)表示法对对象信息存储格式的描述,见图2给出的简单示例。

[0024]在图2中,每一行是一个推导规则,规则中等号“: = ”的左侧部分可以由右侧部分替换;黑体字表示不可再细分的元素,比如对应到具体文件中可以是一个4字节的非负整数;用尖括号括起来的文字则表示还可以继续细分为其它元素;花括号括起来的元素表示可以重复出现零至任意多次。具体到图2中的例子,可以解释为对象信息文件由一个标识符APP_START开头,接下来是真正的文件信息,并且文件信息必定以〈mutator info〉开始,而〈mutator info〉则由任意多个NEW_0BJECT标识符组成,其余的规则依此类推。需要注意的是,每一个不可再细分的元素并不仅限于是一个4字节非负整数,还可以代表一个特定种类的数据块的开始,而该数据块有多大、承载了哪些额外的信息则是预先定义好了的。

[0025]现有的EBNF表示法,一般用于实现编程语言的编译器或解释器的前端部分,描述的是程序语言(如C++或Java)的语法格式,针对的是普通的文本代码。而离线对象信息文件是二进制数据格式,本发明中用EBNF去描述二进制数据,不再与编译器有关系。并且,可进一步借助已有的语法分析器(它并不知道它所分析的是二进制数据,尽管它是被设计为分析文本文件的)快速生成对象信息分析程序。

[0026]步骤2,程序员自定义用于分析的源代码文件。

[0027]图1中②表示“程序员自定义源代码”,即程序员自己编写的程序代码,它决定了以怎样的逻辑对对象信息文件进行分析以及要分析什么信息。不同的程序员对于提取的对象信息有不同的需求,通过自己编写该部分代码,可以从对象信息文件中提取出特定的、需要的信息,体现了本发明在自动实现对象信息分析程序上的灵活性。

[0028]步骤3,生成对象信息分析程序源代码。

[0029]图1中③表示“对象信息分析器自动生成模块”,它可以是传统的语法分析器自动生成工具,如YACC和ANTLR,只是这里生成的不是语法分析器,而是二进制数据分析器,但它们背后的机制是一样的。③的输入必须有①和②这两部分,缺一不可。“③对象信息分析程序自动生成模块”对输入进行分析处理后,产生“④对象信息分析程序源代码”,程序员对该源代码进行编译链接可得到最终可执行的对象信息分析程序。例如,利用语法分析器YACC,按语法格式生成一个分析程序,输出得到一个C语言源代码文件,需再进行编译后执行。

[0030]步骤4,将对象信息分析程序源代码进行编译链接生成可执行的对象信息分析程序。

[0031]图1中④表示“对象信息分析程序源代码文件”,它是“③对象信息分析程序自动生成模块”生成的C语言源代码,经过编译器编译链接生成可执行的程序。

[0032]图1中⑤表示“对象信息分析程序”,是经过编译器编译链接生成的可执行的程序,它执行时不停地调用“⑦文件读取模块”获取对象信息文件数据,然后按照“②程序员自定义源代码文件”中指定的运算逻辑对数据进行分析计算,最后将运算所得结果输出为“⑧统计数据文件”。

[0033]步骤5,读取对象信息文件,输入到对象信息分析程序中进行分析,输出统计数据。

[0034]图1中⑥表示“对象信息文件”,该文件是性能分析软件对Java程序进行“在线”监测的输出结果,以二进制形式存储了对象信息。其存储格式可以用EBNF表示法来描述,这是本发明能够自动生成“⑤对象信息分析程序”的基础。

[0035]图1中⑦表示“文件读取模块”,它被图1中的“⑤对象信息分析程序”调用。在最简单的情况下,“⑦文件读取模块”每次从对象信息文件中读取4个字节的二进制数据,并将这4个字节不作任何解释的返回给“⑤对象信息分析程序”。

[0036]图1中⑧表示“统计数据文件”,是“⑤对象信息分析程序”运行后的输出,包含了从对象信息文件中分析出的统计数据,而统计的数据种类和呈现方式随“②程序员自定义源代码文件”的不同而不同,满足不同程序员的需要。

[0037]本发明方法的使用流程,如图3所示。首先,程序员按照EBNF表示法写好对象信息存储格式的描述文件,通常只需写一次即可,因为对象信息格式变动不会太频繁;然后再针对描述文件中的每一个推导规则,使用C语言编写相应的函数,以决定在特定时刻执行什么动作,这部分就是程序员自定义源代码。将上述准备好的描述文件和源代码作为YACC等程序的输入,产生对象信息分析程序的源代码,对该源代码进行编译即生成可执行的对象信息分析程序。最后运行该程序,结合对象信息文件读取程序,读取并分析对象信息,得到需要的统计结果。

【主权项】

1.一种Java对象信息分析程序的自动生成方法,其特征在于,包括如下实现步骤: 步骤1,用EBNF表示法描述对象信息存储格式,生成文本格式的对象信息存储格式的EBNF描述文件; 步骤2,程序员自定义用于分析的源代码文件; 步骤3,利用对象信息分析器自动生成模块,将对象信息存储格式的EBNF描述文件和程序员自定义的源代码文件进行分析,生成对象信息分析程序源代码; 步骤4,将对象信息分析程序源代码经过编译器编译链接生成可执行的对象信息分析程序; 步骤5,读取对象信息文件,输入到对象信息分析程序中进行分析,输出统计数据;所述的对象信息文件以二进制形式存储。2.根据权利要求1所述的一种Java对象信息分析程序的自动生成方法,其特征在于,步骤3中所述的对象信息分析器自动生成模块为语法分析器。3.根据权利要求1所述的一种Java对象信息分析程序的自动生成方法,其特征在于,步骤5中所述的读取对象信息文件,通过文件读取模块每次从对象信息文件中读取4个字节的二进制数据,输入到对象信息分析程序。

【专利摘要】本发明提供了一种Java对象信息分析程序的自动生成方法。本发明对二进制形式的对象信息,用EBNF表示法描述对象信息存储格式,程序员自定义用于分析的源代码文件,利用对象信息分析器自动生成模块,将对象信息存储格式的EBNF描述文件和程序员自定义的源代码文件进行分析,生成对象信息分析程序源代码,再编译链接生成可执行的对象信息分析程序;读取对象信息文件,输入到对象信息分析程序中进行分析,输出统计数据。本发明实现的对象信息分析程序的自动生成方法,能很好地适应“在线”监测程序频繁改动的情况,并允许程序员方便地定制自己需要的“离线”分析程序,提高了对象信息文件的利用率和程序员的开发效率。

【IPC分类】G06F9/45, G06F9/44

【公开号】CN105159680

【申请号】CN201510590908

【发明人】余恒洋, 史晓华, 冯伟

【申请人】北京航空航天大学

【公开日】2015年12月16日

【申请日】2015年9月16日

你可能感兴趣的:(java对象信息)