CN105653458B - 检测目标Java项目中的高耗时Java方法的方法和装置 - Google Patents
检测目标Java项目中的高耗时Java方法的方法和装置 Download PDFInfo
- Publication number
- CN105653458B CN105653458B CN201610007248.XA CN201610007248A CN105653458B CN 105653458 B CN105653458 B CN 105653458B CN 201610007248 A CN201610007248 A CN 201610007248A CN 105653458 B CN105653458 B CN 105653458B
- Authority
- CN
- China
- Prior art keywords
- java
- class
- behalf
- java method
- time
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
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)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种检测目标Java项目中的高耗时Java方法的方法和装置。所述方法包括:根据扫描路径,获取与所述目标Java项目有关的原始类字节码;在所获取的原始类字节码中查找类路径;如果查找到类路径,则执行以下操作:针对所述类路径创建代理类;计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;将每个代理Java方法的执行时长与耗时阈值进行比较;以及如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
Description
技术领域
本发明涉及Java程序检测,具体地,涉及一种检测目标Java项目中的高耗时Java方法的方法和装置。
背景技术
Java语言是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
然而,基于Java语言开发的项目有时会反应特别慢。比如,当浏览一个页面时,有可能过了几分钟后页面都没有出现。为了解决这一问题,开发人员必须先定位到具体哪些(或哪个)Java方法执行起来最耗时间。现有的方案中通过对可疑Java方法进行逐个排查来寻找高耗时Java方法,其中存在如下缺点:1.对可疑Java方法的选择具有主观性和盲目性;2.需要针对每个被认为是可疑的Java方法修改源码,这样会破坏业务逻辑的完整性,并增加重复的人工劳动。
发明内容
为了克服现有技术方案中存在的上述缺陷,本公开提出了一种检测目标Java项目中的高耗时Java方法的方法和装置。
根据本发明的一个方面,提供了一种检测目标Java项目中的高耗时Java方法的方法。所述方法包括:根据扫描路径,获取与所述目标Java项目有关的原始类字节码;在所获取的原始类字节码中查找类路径;如果查找到类路径,则执行以下操作:针对所述类路径创建代理类;计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;将每个代理Java方法的执行时长与耗时阈值进行比较;以及如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
优选地,在所述根据扫描路径获取与所述目标Java项目有关的原始类字节码的步骤之前,所述检测方法还包括:设置扫描路径和/或耗时阈值。
优选地,所述方法还包括:如果没有确定出任何高耗时Java方法,则重新设置更精细的扫描路径和/或更小的耗时阈值。
优选地,所述根据扫描路径获取与所述目标Java项目有关的原始类字节码的步骤包括:加载所述目标Java项目的内容;从所加载的内容拦截原始类字节码。
优选地,所述计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长的步骤包括:在每个代理Java方法之前和之后分别记录开始时间和结束时间;通过下式计算每个代理Java方法的执行时长,
执行时长=结束时间-开始时间。
根据本发明的另一方面,提供了一种检测目标Java项目中的高耗时Java方法的装置。所述装置包括:获取装置,用于根据扫描路径获取与所述目标Java项目有关的原始类字节码;查找装置,用于在所获取的原始类字节码中查找类路径;处理装置,被配置为在查找到类路径的情况下执行以下操作:针对所述类路径创建代理类;计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;将每个代理Java方法的执行时长与耗时阈值进行比较;以及如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
通过本发明提供的检测目标Java项目中的高耗时Java方法的方法和装置,能够在不修改项目源码的情况下,检测出最耗时的Java方法,克服了现有技术中存在的缺陷。
附图说明
通过下面结合附图说明本发明的优选实施例,将使本发明的上述及其它目的、特征和优点更加清楚,其中:
图1是根据本发明的实施例的检测目标Java项目中的高耗时Java方法的方法的流程图;
图2是根据本发明的实施例的检测目标Java项目中的高耗时Java方法的装置的结构框图。
具体实施方式
以下参照附图,对本发明的示例实施例进行详细描述。在以下描述中,一些具体实施例仅用于描述目的,而不应该理解为对本发明有任何限制,而只是本发明的示例。在可能导致对本发明的理解造成混淆时,将省略常规结构或构造。
在Java语言中,存在“类”的概念。“类”是Java程序的组织单位,大多数的Java语句都要写在类文件里。最重要的是,“类”为对象提供了一个模板,可以通过类来构造对象。在类中包括“属性”和“方法”,属性指的是类或通过类构造的对象拥有什么,而方法则指类或通过类构造的对象执行的内容。
以下对本文中的一些其他概念进行简要的解释,这些概念是本领域技术人员所熟知的,这里的解释并不是对本发明的内容进行限定,而只是为了对进行说明:
扫描路径:是输入参数,格式与类路径相同,用于确定扫描范围。比如:扫描路径定义为java.lang,那么扫描范围就只在java.lang这个下面。
类路径:java语言约定一个类需要有一个组织层次,这个组织层级就是类路径。比如:java.lang.String,其中java.lang就是String类的类路径
原始类字节码:java编写的原代码经过编译过后生成的二进制内容称为字节码。Java语言中类是字节码的组织单元,一般一个类的字节码存于一个文件中,我们把这个文件中的字节码叫做原始类字节码。
以下,参照图1描述根据本发明的实施例的检测目标Java项目中的高耗时Java方法的方法100的流程图。
所述方法100开始于步骤S110,在步骤S110中,根据扫描路径,获取与所述目标Java项目有关的原始类字节码。
优选地,通过以下操作来实现上述获取原始类字节码的步骤:首先加载所述目标Java项目的内容;然后,从所加载的内容拦截原始类字节码。所述拦截可以通过Javaagent来实现。
在一种实施例中,可以在进行步骤S110之前,预先对所述扫描路径进行设置。
然后,在步骤S120中,在所获取的原始类字节码中查找类路径。
接下来,在步骤S130中,判断在步骤S120中是否查找到类路径。
如果在步骤S130中查找到了类路径,则执行步骤S140。反之,如果在步骤S130中没有查找到了类路径,则不检测高耗时Java方法。
此时,所述方法100可停止继续进行。备选地,可重新对所述扫描路径进行设置,并使用新的扫描路径重新执行步骤S110。所述新的扫描路径优选地比之前设置的扫描路径更为精细。备选地,还可选择与之前设置的扫描路径不同的新的路径。
在步骤S140中,针对所查找到的类路径创建代理类。优选地,通过Javassit来进行创建。
接下来,在步骤S150中,通过遍历的方式,计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长。具体地,可以在每个代理Java方法之前和之后分别记录开始时间和结束时间,并通过以下公式计算每个代理Java方法的执行时长:
执行时长=结束时间-开始时间。
然后,在步骤S160中,判断每个代理Java方法的执行时长是否大于耗时阈值。
在一种实施例中,可以在进行步骤S110之前,预先对所述耗时阈值进行设置。
如果在S160中,通过判断确定某个代理Java方法的执行时长大于耗时阈值,则在随后的步骤S170中将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。并进而显示所检测到的原始Java方法的名称和耗时。
在一种实施例中,可在步骤S150中针对一个代理Java方法计算了执行时长后立即执行步骤S160,并进而在步骤S170中确定是否为高耗时Java方法。在一种优选实施例中,所述方法100可在确定了一个高耗时Java方法时停止继续进行,由管理员对所检测到的Java方法进行处理,以便针对性的解决Java项目中的高耗时问题。在一种优选实施例中,如果在处理了所述Java方法(比如禁用)之后仍然不能解决问题,则可返回步骤S150中,针对下一代理Java方法进行计算。
在备选实施例中,可在步骤S150中,完成针对所有代理Java方法的计算。之后,再进行到步骤S160中,与耗时阈值进行比较。然后,管理员对所有检测到的方法进行统一分析和处理。
如果在S160中,任何代理Java方法的执行时长都不大于耗时阈值,则不进行任何显示,方法100结束。备选地,此时,可以重新对耗时阈值进行设置,并返回步骤S160重新进行比较。备选地,此时,可以重新对扫描路径和耗时阈值都进行设置,并返回步骤S110。优选地,新的耗时阈值比之前的耗时阈值更小。
下面,参照图2,描述根据本发明的实施例的检测目标Java项目中的高耗时Java方法的装置200的结构框图。
所述装置200包括获取装置210、查找装置220和处理装置230。
所述获取装置210用于根据扫描路径获取与所述目标Java项目有关的原始类字节码。所述查找装置220用于在所获取的原始类字节码中查找类路径。所述处理装置230被配置为在查找到类路径的情况下执行以下操作:针对所述类路径创建代理类;计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;将每个代理Java方法的执行时长与耗时阈值进行比较;以及如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
该检测目标Java项目中的高耗时Java方法的装置200与上述方法100相对应。以上对方法100的具体描述和解释同样适用于装置200,在此不再赘述。
应当注意的是,在以上的描述中,仅以示例的方式,示出了本公开的技术方案,但并不意味着本公开局限于上述步骤和结构。在可能的情形下,可以根据需要对步骤和结构进行调整和取舍。因此,某些步骤和单元并非实施本公开的总体发明思想所必需的元素。因此,本公开所必需的技术特征仅受限于能够实现本公开的总体发明思想的最低要求,而不受以上具体实例的限制。
至此已经结合优选实施例对本公开进行了描述。应该理解,本领域技术人员在不脱离本公开的精神和范围的情况下,可以进行各种其它的改变、替换和添加。因此,本公开的范围不局限于上述特定实施例,而应由所附权利要求所限定。
Claims (6)
1.一种检测方法,用于检测目标Java项目中的Java方法,其特征在于,包括:
根据扫描路径,获取与所述目标Java项目有关的原始类字节码;
在所获取的原始类字节码中查找类路径;
如果查找到类路径,则执行以下操作:
针对所述类路径创建代理类;
计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;
将每个代理Java方法的执行时长与耗时阈值进行比较;以及
如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
2.根据权利要求1所述的方法,其特征在于,在所述根据扫描路径获取与所述目标Java项目有关的原始类字节码的步骤之前,所述检测方法还包括:
设置扫描路径和/或耗时阈值。
3.根据权利要求1或2所述的方法,其特征在于,还包括:
如果没有确定出任何高耗时Java方法,则重新设置更精细的扫描路径和/或更小的耗时阈值。
4.根据权利要求1或2所述的方法,其特征在于,所述根据扫描路径获取与所述目标Java项目有关的原始类字节码的步骤包括:
加载所述目标Java项目的内容;
从所加载的内容拦截原始类字节码。
5.根据权利要求1或2所述的方法,其特征在于,所述计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长的步骤包括:
在每个代理Java方法之前和之后分别记录开始时间和结束时间;
通过下式计算每个代理Java方法的执行时长,
执行时长=结束时间-开始时间。
6.一种检测装置,用于检测目标Java项目中的Java方法,其特征在于,包括:
获取装置,用于根据扫描路径获取与所述目标Java项目有关的原始类字节码;
查找装置,用于在所获取的原始类字节码中查找类路径;
处理装置,被配置为在查找到类路径的情况下执行以下操作:
针对所述类路径创建代理类;
计算所创建的代理类中的所有代理Java方法中每个代理Java方法的执行时长;
将每个代理Java方法的执行时长与耗时阈值进行比较;以及
如果该代理Java方法的执行时长大于耗时阈值,则将与该代理Java方法相对应的原始Java方法确定为高耗时Java方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610007248.XA CN105653458B (zh) | 2016-01-06 | 2016-01-06 | 检测目标Java项目中的高耗时Java方法的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610007248.XA CN105653458B (zh) | 2016-01-06 | 2016-01-06 | 检测目标Java项目中的高耗时Java方法的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105653458A CN105653458A (zh) | 2016-06-08 |
CN105653458B true CN105653458B (zh) | 2018-12-18 |
Family
ID=56491534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610007248.XA Active CN105653458B (zh) | 2016-01-06 | 2016-01-06 | 检测目标Java项目中的高耗时Java方法的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105653458B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776302A (zh) * | 2016-12-01 | 2017-05-31 | 郑州云海信息技术有限公司 | 计算java项目中方法执行时间的方法、装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101566967A (zh) * | 2009-06-03 | 2009-10-28 | 哈尔滨工程大学 | 针对java字节码文件的快速自动修改方法 |
CN103559132A (zh) * | 2013-11-08 | 2014-02-05 | 北京京东尚科信息技术有限公司 | 一种java应用程序健壮性的检测方法和装置 |
CN104391787A (zh) * | 2014-11-13 | 2015-03-04 | 华为软件技术有限公司 | 一种针对目标方法的监控、热切入方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9223964B2 (en) * | 2013-12-05 | 2015-12-29 | Mcafee, Inc. | Detecting JAVA sandbox escaping attacks based on JAVA bytecode instrumentation and JAVA method hooking |
-
2016
- 2016-01-06 CN CN201610007248.XA patent/CN105653458B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101566967A (zh) * | 2009-06-03 | 2009-10-28 | 哈尔滨工程大学 | 针对java字节码文件的快速自动修改方法 |
CN103559132A (zh) * | 2013-11-08 | 2014-02-05 | 北京京东尚科信息技术有限公司 | 一种java应用程序健壮性的检测方法和装置 |
CN104391787A (zh) * | 2014-11-13 | 2015-03-04 | 华为软件技术有限公司 | 一种针对目标方法的监控、热切入方法及装置 |
Non-Patent Citations (1)
Title |
---|
性能监控框架Jwebap的研究与改进;程旭,巨克真,郭伟;《计算技术与自动化》;20141231;第33卷(第4期);第102-104页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105653458A (zh) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8549635B2 (en) | Malware detection using external call characteristics | |
CN110008703B (zh) | 一种容器内恶意软件静态检测系统及方法 | |
RU2420791C1 (ru) | Метод отнесения ранее неизвестного файла к коллекции файлов в зависимости от степени схожести | |
US11544384B2 (en) | Applying machine learning techniques to discover security impacts of application programming interfaces | |
US20090254891A1 (en) | Automatic reverse engineering of input formats | |
JP7115552B2 (ja) | 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム | |
KR20160082644A (ko) | 코드 블록 구분을 통한 악성 코드 탐지 방법 및 장치 | |
KR102317833B1 (ko) | 악성 코드 탐지 모델 학습 방법 및 이를 이용한 탐지 방법 | |
US20220030017A1 (en) | Cybersecurity investigation tools utilizing information graphs | |
US10909179B2 (en) | Malware label inference and visualization in a large multigraph | |
US10043004B2 (en) | Method of correlating static and dynamic application security testing results for a web and mobile application | |
CN109902487B (zh) | 基于应用行为的Android应用恶意性检测方法 | |
CN113468525A (zh) | 针对二进制程序的相似漏洞检测方法及装置 | |
US10782941B1 (en) | Refinement of repair patterns for static analysis violations in software programs | |
CN105653458B (zh) | 检测目标Java项目中的高耗时Java方法的方法和装置 | |
CN109240922B (zh) | 基于RASP提取webshell软件基因进行webshell检测的方法 | |
CN108229168B (zh) | 一种嵌套类文件的启发式检测方法、系统及存储介质 | |
CN102831334A (zh) | 一种目标地址定位方法和系统 | |
WO2023109348A1 (en) | Indirect function call target identification in software | |
CN104008336B (zh) | 一种ShellCode检测方法和装置 | |
CN111444144B (zh) | 文件特征提取方法及装置 | |
CN108062476A (zh) | 一种基于调用关系的恶意代码判定方法及系统 | |
CN112580037B (zh) | 病毒文件数据的修复方法、装置及设备 | |
KR102286451B1 (ko) | 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
CN112580038A (zh) | 反病毒数据的处理方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |