`
iamzhongyong
  • 浏览: 805292 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中记录方法调用时间,结果按照方法的层级树状的输出

    博客分类:
  • java
阅读更多

​    ​    ​在java中,最常用的埋点时间的方法就是在方法运行前搞个常量记录当前时间,然后再方法结束的时候,搞个常量记录当前时间,然后两个的时间差就是方法的消耗时间。

    ​    ​这种处理问题不大,但是有时候我们想达到这样的效果,就是把树状的结构也搞出来。这样有层次,排查性能问题会非常方便。

 

1
2
3
0 [0ms] - rootMethod
`---0 [0ms] - first
    `---0 [0ms] - second

    ​    ​于是借助webx框架(已经开源http://openwebx.org/)中的Profiler类,结合AOP,做了一个简单的例子,代码已经搞到自己的github上了,这样可以直接搞代码用了。

    ​    ​github地址:https://github.com/iamzhongyong/treeProfiler

 

类名的基本介绍:

1、Profiler类的作用,方法的开始时间和结束时间埋点;

2、Entry类的左右,作为开始时间和结束时间的实体类,同时有个List类型的subEntries,这样就能描述树状的结构了;

3、ThreadLocal类,线程级别的内存缓存,统计的entry放置在这里,但是在线程结束之后,要记得清理掉;

4、ProfilerAspect,AOP的增强类;

 

如何使用:

1、添加AOP的配置,把ProfilerAspect作为一个普通的bean注入到容器中即可;

2、然后在需要统计时间的地方,可以使方法上,也可以是类上面,添加注解@ProfileAnno;

3、之后就可以在日志中看树状的统计信息了,在ProfilerSwith中有相应的开关,外部系统可以自行实现;

 

 

 

3
0
分享到:
评论
6 楼 莫语snow 2014-04-12  
5 楼 莫语snow 2014-04-12  
最近做实验碰到了类似的情况,需要给出Call Graph.

下载了源码,运行ProfilerAopTest时,只能给第一个方法(A())埋时间点,方法A调用的A1和方法A1调用的A11都失效。后来发现这是Spring AOP,跟踪“嵌套调用方法”(nested method)时常出现的问题。
在stackoverflow上找到了解决方法,不使用this对象调用方法就好用了。
http://stackoverflow.com/questions/5780757/spring-aop-logging-and-nested-methods




4 楼 iamzhongyong 2013-12-23  
kongxuan 写道
当你俺在支付宝的时候,用过这玩意。。

呵呵,目前看好多profiler的东西,都是参照宝宝的这个类搞的。看我这个类,膜拜宝宝呵呵
3 楼 iamzhongyong 2013-12-23  
liubey 写道
必须要依赖webx?

不用依赖webx,profiler这个类是来自webx的,我把这个类单独搞出来了,然后在我的github上搞了一份,因为非原创,所以提一下webx
2 楼 kongxuan 2013-12-22  
当你俺在支付宝的时候,用过这玩意。。
1 楼 liubey 2013-12-22  
必须要依赖webx?

相关推荐

    java递归无限层级树

    在这个场景中,我们利用Java递归来表示一个树形结构,这种结构可以无限深入,每个节点可能包含子节点,也可能不包含。这通常在前端库如zTree、dtree等中作为后台数据来呈现多级菜单或分类。 首先,我们需要定义一个...

    java遍历文件树形结构输出

    根据题目提供的代码片段,我们可以看到这是一个简单的Java程序,用于遍历指定路径下的所有文件及子目录,并按照层级关系以树形结构打印出来。 ```java package com.test; import java.io.File; public class Root...

    java、js中实现无限层级的树形结构方法(类似递归)

    在Java和JavaScript中,无限层级的树形结构是常见的数据表示方式,特别是在处理组织结构、文件系统或数据库分层数据时。本文将介绍如何在Java和JavaScript中使用类似递归的方法来实现这样的树形结构。 首先,让我们...

    java解析xml动态生成树形菜单结构

    在接收到服务器返回的菜单数据后,可以调用`jstree`的初始化方法,如`$.jstree(true).settings.core.data`来设置数据,并渲染树形菜单。 此外,`JSTree`提供了多种交互功能,包括菜单的展开和收缩、全选/反选等。...

    安卓树形控件相关-Android任意层级树形控件无jar版.rar

    在Android开发中,树形控件(TreeView)是一种常见的用户界面元素,用于展示层次结构的数据。这类控件在各种应用场景中都有所体现,比如文件管理器、组织结构图或者导航菜单等。本资源"安卓树形控件相关-Android任意...

    java树形菜单

    在Java编程中,树形菜单是一种常见的用户界面元素,它以层次结构展示数据,通常用于文件系统、组织架构或程序功能导航。这个压缩包“treemenu”很可能包含了一个简单的WinFrom应用程序,其中实现了树形菜单的功能。...

    java多叉树的实现和遍历输出

    本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...

    在java中 遍历mysql中的树形结构

    在Java中遍历MySQL数据库中的树形结构是一项常见的任务,尤其是在处理组织结构、文件系统或任何具有层次关系的数据时。本文将深入探讨如何利用Java语言和MySQL数据库来实现这一功能,解析给定代码片段,并提供一种...

    androidrecyclerView多层级无限层级列表折叠树

    我们需要一个数据模型类,表示树形结构的节点。这个类通常包含两个主要属性:一个是存储节点数据,另一个是存储子节点列表。例如: ```java public class TreeNode { private String data; private List...

    zTree后台组装树结构java代码

    在IT行业中,构建树形结构的数据展示是一种常见的需求,特别是在前端UI设计中。zTree是一款流行的JavaScript插件,专门用于创建交互式的树形菜单或树状视图。本主题聚焦于如何在Java后端组装zTree所需的树结构,并与...

    java树节点逐级汇总.zip

    在Java编程中,构建树形结构数据是一种常见的需求,特别是在数据组织、文件系统或数据库层次结构的表示中。"java树节点逐级汇总.zip"这个压缩包提供的内容,旨在帮助开发者处理无序列表数据,并将其转化为可以逐级...

    Java遍历输出指定目录、树形结构所有文件包括子目录下的文件

    在Java编程中,遍历和输出指定目录以及其树形结构下的所有文件,包括子目录中的文件,是一项常见的任务。这个任务通常涉及到文件系统操作和递归算法的应用。以下将详细解释如何使用Java来实现这一功能。 首先,我们...

    树形菜单的实现,有增删改查方法的实现。

    在IT行业中,树形菜单是一种常见的用户界面元素,尤其在数据层级结构复杂的应用程序中,如文件管理系统、组织架构展示或导航菜单等。本项目主要实现了基于Java的树形菜单,并集成了完整的增删改查功能,使得开发者...

    android一个recyclerView实现无限层级多层级列表折叠树(csdn)————程序.pdf

    这样的设计允许我们构建任意深度的树形结构。 接下来,我们创建一个RecyclerView来展示最外层的列表。初始的列表只需要展示第一级的数据。当用户点击某一项时,我们将该项的子节点添加到RecyclerView的数据列表`...

    Java树状结构实现BBS

    本项目“Java树状结构实现BBS”提供了一种创新的方法,它利用树形数据结构来组织帖子和回复,使用户界面更加直观易用。下面我们将详细探讨这个项目中的关键知识点。 首先,**树状结构**是数据结构的一种,它通过...

    遍历多级树状json获得父子节点值

    在IT行业中,处理数据结构是常见的任务之一,特别是在面对复杂的数据结构如树状JSON时。树状JSON结构常用于表示层级关系,例如组织结构、文件系统或者导航菜单等。本篇将详细介绍如何遍历多级嵌套或树状的JSON结构,...

    将树形结构输出到文本

    这个例子展示了如何结合C#的文件系统API和递归方法来处理树形数据结构,对于理解数据结构、文件系统操作和文本输出都有很好的示例作用。在实际项目中,可以根据需求进行扩展,比如添加错误处理、过滤特定类型的文件...

    关于树形菜单的实现 java

    在树形菜单中,根节点通常代表最高层级,而其他节点则根据它们的关系组织在不同的层级下。 在Java中,我们可以利用 Swing 或 JavaFX 这两个图形用户界面(GUI)库来创建树形菜单。这里我们将主要讨论Swing的实现,...

    java组装树形结构demo.7z

    在Java编程中,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状关系,如文件系统、组织架构等。树形结构由节点(或称为对象)组成,每个节点可以有零个或多个子节点,形成层级关系。在本案例中,"java...

    Android自定义任意层级树形

    在Android开发中,构建任意层级的树形结构是一项常见的需求,比如在实现文件管理系统、组织架构展示、QQ联系人列表等场景中。本教程将详细讲解如何在Android中自定义这种任意层级的树形结构。 首先,理解树形结构的...

Global site tag (gtag.js) - Google Analytics