本发明涉及数据处理技术领域,特别涉及一种计算JAVA项目中方法执行时间的方法、装置。
背景技术:
Java是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。Java可运行于多个平台,如Windows,Mac OS,及其他多种UNIX版本的系统。因其简单性、面向对象、分布性、编译和解释性、稳健性、安全性、可移植性、高性能、多线程性、动态性等特点,JAVA语言被广泛应用于信息技术相关的各个行业。其提供的对网络应用的支持和多媒体的存取,也会推动JAVA语言在互联网和企业网络的Web应用。而且其开放性和创新性也吸引了全世界最多的软件技术开发者的青睐。
但是,在一些实体项目中,常常因为开发者的代码编写不规范或调用API方式不正确,导致程序执行缓慢,轻者影响用户体验,重者可能导致系统崩溃等不可预知的产品风险。比如某用户点击软件的确定按钮,软件无响应或者经过很长一段时间后才反馈执行结果,往往遇到此种情况后,软件开发人员首先需要通过打印的日志分析软件执行过程,或者通过Debug调试的方式跟踪软件的执行过程,以定位软件耗时的具体类的具体方法。该人工的方式既费时间,又费人力,而且具有一定的主观和盲目性。所以,如何高效的计算JAVA方法执行时间,快速定位问题的方法,是本领域技术人员需要解决的技术问题。
技术实现要素:
本发明的目的是提供一种计算JAVA项目中方法执行时间的方法及装置,可以完全抛弃传统的人工方式,从而极大的缩短了查找耗时方法的时间,提高软件开发和运维的时效,降低成本。
为解决上述技术问题,本发明提供一种计算JAVA项目中方法执行时间的方法,所述方法包括:
获取指定JAVA项目的目标目录中全部的字节码文件;
从所述字节码文件中获取类路径;
根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法,并执行所述代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;
将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间。
可选的,获取指定JAVA项目的目标目录中全部的字节码文件,包括:
指定JAVA项目的目标目录;
扫描所述目标目录,筛选出后缀名为.class的字节码文件。
可选的,得到所述目标目录中各方法对应的执行时间之后,还包括:
输出所述目标目录中各方法对应的执行时间到指定设备。
可选的,输出所述目标目录中各方法对应的执行时间到指定设备,包括:
将所述目标目录中各方法对应的执行时间按照时长进行降序排列,形成输出序列;
按照所述输出序列输出所述目标目录中各方法对应的执行时间到指定设备。
可选的,得到所述目标目录中各方法对应的执行时间之后,还包括:
将所述执行时间与设定时间阈值进行比较,确定大于所述设定时间阈值的执行时间;
输出大于所述设定时间阈值的执行时间对应方法在所述目标目录中的定位信息。
本发明还提供一种计算JAVA项目中方法执行时间的装置,包括:
字节码文件获取模块,用于获取指定JAVA项目的目标目录中全部的字节码文件;
类路径获取模块,用于从所述字节码文件中获取类路径;
代理方法执行模块,用于根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法,并执行所述代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;
执行时间计算模块,用于将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间。
可选的,所述字节码文件获取模块包括:
指定目标目录单元,用于指定JAVA项目的目标目录;
筛选单元,用于扫描所述目标目录,筛选出后缀名为.class的字节码文件。
可选的,该装置还包括:
输出模块,用于输出所述目标目录中各方法对应的执行时间到指定设备。
可选的,所述输出模块包括:
排序单元,用于将所述目标目录中各方法对应的执行时间按照时长进行降序排列,形成输出序列;
输出单元,用于按照所述输出序列输出所述目标目录中各方法对应的执行时间到指定设备。
可选的,该装置还包括:
比较模块,用于将所述执行时间与设定时间阈值进行比较,确定大于所述设定时间阈值的执行时间;
定位信息输出模块,用于输出大于所述设定时间阈值的执行时间对应方法在所述目标目录中的定位信息。
本发明所提供的一种计算JAVA项目中方法执行时间的方法,包括:获取指定JAVA项目的目标目录中全部的字节码文件;从所述字节码文件中获取类路径;根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间;
可见,该方法可以完全抛弃传统的人工方式,通过创建的代理类及对应的代理方法,自动记录代理类中各方法的代理开始时间及代理结束时间,得到目标目录中各方法对应的执行时间;从而极大的缩短了查找耗时方法的时间,提高软件开发和运维的时效,降低成本;本发明还提供了一种计算JAVA项目中方法执行时间的装置,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的计算JAVA项目中方法执行时间的方法的流程图;
图2为本发明实施例所提供的另一计算JAVA项目中方法执行时间的方法的流程图;
图3为本发明实施例所提供的计算JAVA项目中方法执行时间的终止的结构框图;
图4为本发明实施例所提供的另一计算JAVA项目中方法执行时间的终止的结构框图。
具体实施方式
本发明的核心是提供一种计算JAVA项目中方法执行时间的方法及装置,可以完全抛弃传统的人工方式,从而极大的缩短了查找耗时方法的时间,提高软件开发和运维的时效,降低成本。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例所提供的计算JAVA项目中方法执行时间的方法的流程图;所述方法包括:
S100、获取指定JAVA项目的目标目录中全部的字节码文件;
其中,这里的目标目录可以是由用户进行设定,用户可以根据自身的需求选择需要进行执行时间计算的目标目录。例如可以是JAVA项目所在的目录或者指定更细粒度的包含字节码文件的目录。即这里的目标目录可以是JAVA项目目录或者更细粒度的某个文件子目录。目标目录的数量可以是一个也可以是多个,即用户可以指定JAVA项目中全部想要进行执行时间计算的目录作为目标目录。因此,本实施例并不对目标目录的数量及目录大小进行限定。
具体的,该步骤的具体过程为指定目标目录,扫描目标目录,确定目标目录中包含的全部字节码文件;即指定JAVA项目的目录作为目标目录,扫描该目录,并获取项目中的所有class文件,即原始的字节码文件,可选的,获取指定JAVA项目的目标目录中全部的字节码文件可以包括:
指定JAVA项目的目标目录;
扫描所述目标目录,筛选出后缀名为.class的字节码文件。
具体的,指定目标目录可以是根据用户输入的目标目录名称确定目标目录;其中,输入的过程可以是键盘输入,也可以是语音输入等。本实施例并不限定指定JAVA项目的目标目录的具体方式。在指定目标目录后加载目标目录的文件,并过滤扩展名为.class的字节码文件。
进一步,扫描后目标目录中若未含有后缀名为.class的字节码文件,则可以立即结束计算JAVA项目中方法执行时间的方法。
S110、从所述字节码文件中获取类路径;
具体的,从提取的全部字节码文件中确定其包含的类路径,这里的类路径数量可以是多个,具体类路径的数量与具体的字节码文件有关。
S120、根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法,并执行所述代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;
S130、将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间。
具体的,本步骤中为每一个类路径创建对应的代理类及对应的代理方法。例如目标目录中包含三个类路径,每个类路径均包含两个方法时,这里的代理类有三个分别于三个类路径对应。三个代理类又对应三个代理方法,这里的代理方法用于代理执行所对应的代理类内的方法。
这里的代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序。以上述例子继续说明,由于每个类路径均包含两个方法,即每一个代理方法中包含两个方法,可以得到该类中每个方法的代理开始时间及代理结束时间。即上述例子中总共可以得到六个代理开始时间及代理结束时间。即在每个类路径对应的类里的JAVA代理方法在开始执行前和执行结束后分别记录时间,标记为代理开始时间和代理结束时间;依据【代理结束时间-代理开始时间】,计算得出JAVA中方法执行的时长。
根据各个代理结束时间与所述代理开始时间,可以得到目标目录中各方法对应的执行时间。这里的代理结束时间与所述代理开始时间作差的计算过程也可以在代理方法中进行,即可以直接输出代理方法对应的各方法的执行时间。也可以是装置中有另外的单独计算执行时间的程序,将代理结束时间与所述代理开始时间作差计算执行时间。
即仍以上述例子继续说明,则目标目录中有三个类,每个类有两个方法,即有三个代理类和对应的代理方法,每个代理方法执行对应的两个方法,总共可以得到六个方法的执行时间。
该方法的具体过程可以是获取目标目录的字节码文件,从字节码文件中获取类路径,根据上述获取的类路径,为每个类路径创建代理类及代理方法,在代理方法中记录该类中各个方法开始执行和执行结束的时间,依据【代理结束时间-代理开始时间】,计算得出被代理的各JAVA方法执行时长。
基于上述技术方案,本发明实施例提的计算JAVA项目中方法执行时间的方法,该方法可以完全抛弃传统的人工方式,通过创建的代理类及对应的代理方法,自动记录代理类中各方法的代理开始时间及代理结束时间,得到目标目录中各方法对应的执行时间;从而极大的缩短了查找耗时方法的时间,提高软件开发和运维的时效,降低成本。
基于上述实施例,请参考图2,为了使得开发人员可以更加及时的得到目标目录中各方法的执行时间,在上述实施例得到所述目标目录中各方法对应的执行时间之后,本实施例可以包括:
S200、获取指定JAVA项目的目标目录中全部的字节码文件;
S210、从所述字节码文件中获取类路径;
S220、根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法,并执行所述代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;
S230、将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间。
S240、输出所述目标目录中各方法对应的执行时间到指定设备。
具体的,当得到目标目录中各方法对应的执行时间后及时将其发送到指定设备,使得开发人员可以及时得到执行时间数据,进而及时对JAVA项目中的代码进行维护。这里的指定设备可以是开发人员的手机,电脑等设备。输出过程可以是根据开发人员预留的路径发送执行时间信息到指定设备。本实施例并不对指定设备以及指定设备的数量进行限定。
例如,当运行代理方法,得到目标目录中各方法对应的执行时间后将其发送到用户手机,以便用户可以及时了解到目标目录中各方法对应的执行时间。进行及时对不符合时间要求的方法代码进行修改。
进一步,在输出到执行时间指定设备的基础上,还可以在得到执行时间数据后发出提示信息,提示用户代理方法执行结束。
其中,S200到S230的具体内容请参考S100到S130的内容,在此不再赘述。
基于上述实施例,由于用户指定的目标目录可能会包含很多的类,每个类中有可能会包含多个方法。因此该方法最终得到的目标目录中各方法对应的执行时间可能很多,如果随机排序发送给开发人员,开发人员需要花费时间从中查找是否存在用时较长的方法,且由于执行时间数量众多,可能会出现遗漏现象。因此在本实施例中为了提高用户获取数据的可靠性及高效性。在本实施例中输出所述目标目录中各方法对应的执行时间到指定设备可以包括:
将所述目标目录中各方法对应的执行时间按照时长进行降序排列,形成输出序列;
按照所述输出序列输出所述目标目录中各方法对应的执行时间到指定设备。
具体的,即输出时按照执行时间从长到短进行顺序输出。这样排在第一个的执行时间对应的方法耗时最长,可能是最不符合执行时长要求的方法。使开发人员第一时间可以获取最有价值的信息。因为执行时间很小的方法基本上是符合要求的方法不需要再进行代码修改。反倒是耗时较长的方法极有可能是需要开发人员进行维护的。即使开发人员可以在尽可能短的时间内获取到其最关心的数据。且还可以提高开发人员的处理速度,例如当排在第一个的执行时间都满足要求时,后续的都会满足时间要求。开发人员即可以不需要一一查看后续方法的代码。进一步提高软件开发和运维的时效,降低成本。
下面举例说明上述过程:
步骤1、指定要查找的JAVA项目目录或者更细粒度的某个文件子目录,作为目标目录。
步骤2、针对步骤1中指定的目标目录查找过滤后缀为.class的JAVA字节码文件,如果存在,则执行步骤3,如果不存在,则退出。
步骤3、根据步骤2中查找到的JAVA字节码文件,解析获取对应的类路径。
步骤4、创建类的代理,并为其中的所有方法创建代理方法,在代理方法中加入记录代理开始时间和代理结束时间的方法程序。
步骤5、根据【代理结束时间-代理开始时间】计算方法的执行时间。
步骤6、按执行时间降序排列,输出各方法对应的执行时间。
基于上述任意实施例,为了进一步提高计算得到的执行时间数据的可用性,本实施例在得到所述目标目录中各方法对应的执行时间之后,还可以包括:
将所述执行时间与设定时间阈值进行比较,确定大于所述设定时间阈值的执行时间;
输出大于所述设定时间阈值的执行时间对应方法在所述目标目录中的定位信息。
其中,这里的设定时间阈值可以由开发人员根据实际JAVA项目的要求进行设定。因此,本实施例并不对设定时间阈值的数值进行限定。
具体的,为了进一步从全部的执行时间中筛选出可用信息,本实施例中可以利用设定时间阈值作为筛选条件进行筛选;即将不符合时间要求的执行时间对应的方法筛选出来,即输出大于所述设定时间阈值的执行时间对应方法在所述目标目录中的定位信息。可以使开发人员快速定位到需要进行代码维护的原始代码位置。这里的定位信息可以是直接输出大于所述设定时间阈值的执行时间对应方法的代码,或者是输出大于所述设定时间阈值的执行时间对应方法在JAVA项目中的位置(例如哪个目录下,哪个子目录下,哪个类中,对应的代码开始到终止行数等)。
基于上述技术方案,本发明实施例提的计算JAVA项目中方法执行时间的方法,该方法可以完全抛弃传统的人工方式,从而极大的缩短了查找耗时方法的时间,而且通过基于这种方法获取的方法执行时间,再结合执行设定时间阈值的配置,可以及时定位到软件执行过程中急待优化的代码片断,快速反馈至指定的开发人员进行优化修复。可以高效率的查找JAVA项目中执行耗时较长的类以及其中的方法,提高软件开发和运维的时效,降低成本。
下面对本发明实施例提供的计算JAVA项目中方法执行时间的装置进行介绍,下文描述的计算JAVA项目中方法执行时间的装置与上文描述的计算JAVA项目中方法执行时间的方法可相互对应参照。
请参考图3,图3为本发明实施例所提供的计算JAVA项目中方法执行时间的终止的结构框图;该装置可以包括:
字节码文件获取模块100,用于获取指定JAVA项目的目标目录中全部的字节码文件;
类路径获取模块200,用于从所述字节码文件中获取类路径;
代理方法执行模块300,用于根据所述类路径,创建每一个类路径对应的代理类及对应的代理方法,并执行所述代理方法;其中,所述代理方法中包含记录代理类中各方法的代理开始时间及代理结束时间的程序;
执行时间计算模块400,用于将所述代理结束时间与所述代理开始时间作差,得到所述目标目录中各方法对应的执行时间。
基于上述实施例,所述字节码文件获取模块100可以包括:
指定目标目录单元,用于指定JAVA项目的目标目录;
筛选单元,用于扫描所述目标目录,筛选出后缀名为.class的字节码文件。
基于上述任意实施例,请参考图4,该装置还可以包括:
输出模块500,用于输出所述目标目录中各方法对应的执行时间到指定设备。
基于上述实施例,所述输出模块500可以包括:
排序单元,用于将所述目标目录中各方法对应的执行时间按照时长进行降序排列,形成输出序列;
输出单元,用于按照所述输出序列输出所述目标目录中各方法对应的执行时间到指定设备。
基于上述任意实施例,该装置还可以包括:
比较模块,用于将所述执行时间与设定时间阈值进行比较,确定大于所述设定时间阈值的执行时间;
定位信息输出模块,用于输出大于所述设定时间阈值的执行时间对应方法在所述目标目录中的定位信息。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的计算JAVA项目中方法执行时间的方法及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。