首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何优雅的在java统计代码块耗时

在我们的实际开发中,多多少少会遇到统计一段代码片段的耗时的情况,我们一般的写法如下 long start = System.currentTimeMillis(); try { // .......代理方式 了解 Spring AOP 的同学可能立马会想到一个解决方法,如果想要统计某个方法耗时,使用切面可以无侵入的实现,如 // 定义切点,拦截所有满足条件的方法 @Pointcut("execution...System.currentTimeMillis() - start)); } } Spring AOP 的底层支持原理为代理模式,为目标对象提供增强功能;在 Spring 的生态体系下,使用 aop 的方式来统计方法耗时...AutoCloseable#close方法; 基于此,我们就会有一个大单的想法,下一个Cost类实现AutoCloseable接口,创建时记录一个时间,close 方法中记录一个时间,并输出时间差值;将需要统计耗时的逻辑放入...的基础上做了各种上天的功能,后续介绍 java 探针技术时会专门介绍 下面小结一下三种统计耗时的方式 基本写法 long start = System.currentTimeMillis(); try

3.1K20

如何优雅的统计代码耗时

今天,基基,跟大家分享一下,如何在代码中,统计接口耗时,最优雅,性能最高,接下来我将介绍4种统计方式。 如果你有更好的方式,欢迎文末留言区,交流。...一、前言 代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。 可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。...因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。 在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。...2.2 StopWatch 第二种方式是参考 StopWatch ,StopWatch 通常被用作统计代码耗时,各个框架和 Common 包都有自己的实现。...: 通过调用 Start(name) 和 Stop() 方法,进行耗时统计

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何利用SystemTap统计函数执行耗时详解

    但是给不出定量的数据, 比如这个函数的耗时情况,它耗时1ms还是5ms。 因此在不在代码中加入统计耗时的代码的情况,我们可以使用SystemTap来统计应用程序的耗时情况。...我们可以从中找到 我们需要统计的函数名称。 统计函数耗时 我们可以使用SystemTap内置的直方图来展示耗时的分布。...: global sends # 声明全局的统计存储容器 probe process("/data0/app").function("git.intra.xx.send").return { # function...中为函数名,同时支持通配符*等,在该函数return时计算耗时 sends <<< gettimeofday_us() - @entry(gettimeofday_us()) # 以微秒精度来统计,entry...,如果希望每10秒清空重新统计的话, 可以将打印函数修改为: probe timer.s(10) { # 每10s打印一次直方图 print(@hist_log(sends)) delete sends

    1.8K20

    Clang插件统计方法耗时

    0、统计函数耗时原理 LLVM的优化和转换工作就需要通过PASS来进行,就像下面这种图,PASS就像流水线上的操作工一样对中间代码IR进行优化,每个PASS完成特定的优化工作。...ld us\n",name, t); } my_fun_b是函数的最开始,插入并用于记录当前时间; my_fun_e则是在函数的最末尾插入,用于记录当前时间并与之前函数开始记录的时间做差值,把函数名称和耗时打印出来...方法结束时统计方法耗时,开始的时间记录作为参数 insert_return_inst(F, beginTime); return false; } 2、函数开始...SceneDelegate sceneDidBecomeActive:] 0 us -[SceneDelegate window] 0 us -[SceneDelegate window] 0 us 5、统计方法耗时的其他方案...调用hook_objc_msgSend_after (返回lr和函数结束时间减去开始时间,得到函数耗时) 恢复寄存器。 ret。 参考TimeProfiler

    87530

    这样统计代码执行耗时,才足够优雅!

    一、前言 代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。 可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。...因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。 在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。...2.2 StopWatch 第二种方式是参考 StopWatch ,StopWatch 通常被用作统计代码耗时,各个框架和 Common 包都有自己的实现。...: 通过调用 Start(name) 和 Stop() 方法,进行耗时统计。...通过调用 Record(name, timeCost),方法,直接记录耗时信息。这种方式本质上和“时间差统计”是一致的,只是抽取了一层,稍微优雅了一点。

    43110

    这样统计代码执行耗时,才足够优雅!

    ---- 一、前言 代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。...可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。...因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。 在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。...2.2 StopWatch 第二种方式是参考 StopWatch ,StopWatch 通常被用作统计代码耗时,各个框架和 Common 包都有自己的实现。...: 通过调用 Start(name) 和 Stop() 方法,进行耗时统计

    6K20

    java进阶|基于springAop和自定义注解进行方法的耗时统计

    artifactId>spring-aop 然后自定义一个注解,用于标注标识一下,很简单,生命周期是运行时,作用域在方法上,因为我这里主要就是统计方法的耗时时间的...; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解,统计方法执行耗时时间...import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; /** * 定义一个统计方法执行耗时的切面类...; /** * 统计调用一个方法的耗时时长 * * @author wpw */ @RestController public class CountTimeController {...for (int i = 0; i < count; i++) { } return "hello"; } } 以上就是整个基于aop加上自定义注解进行统计方法耗时的过程

    1.7K20

    手把手教你实现一个方法耗时统计java agent

    实现 我们需要统计方法耗时,所以想到的就是在方法的执行前,记录一个时间,执行完之后统计一下时间差,即为耗时 直接修改字节码有点麻烦,因此我们借助神器javaassist来修改字节码 实现自定义的ClassFileTransformer...虽然我们的应用程序中并没有方法的耗时统计,但是最终的输出却完美的打印了每个方法的调用耗时,实现了无侵入的耗时统计功能 到这里本文的 java agent 的扫盲 + 实战(开发一个方法耗时统计)都已经完成了...Exception in thread "main" java.lang.VerifyError: Expecting a stack map frame 在演示方法耗时的 agent 的示例中,并没有借助最开始的测试用例...指出了在 run 方法这里,存在字节码的错误,我们统计耗时的 Agent,主要就是在方法开始前和结束后各自新增了一行代码,我们直接补充在 run 方法中,则相当于下面的代码 ?...来修改字节码,为每个方法的第一行和最后一行注入耗时统计的代码,从而实现方法耗时统计 最后留一个小问题,上面的实现中,当方法内部抛出异常时,我们注入的最后一行统计耗时会不会如期输出,如果不会,应该怎么修改

    1.1K30

    项目中这样统计方法耗时不香吗?

    在项目开发维护时,经常会对处理耗时较长的代码进行重构,那么该如何知道方法处理用了多长时间呢?到底该怎么实现呢? 心中有没有答案?不卖关子啦,通过本次分享,能让你轻松 get 如下几点。...a)简单的统计方法耗时; b)优雅的统计方法耗时; c)一分钟学会使用 SLF4J 的 Profiler 进行性能分析; d)SLF4J 的 Profiler 性能分析器刨根问底; 1....统计方法耗时的工具写好了,用起来就相当简单。 ? 程序输出如下,有没有很简单。 pay ... 【共耗时-11-毫秒】 payquery ......【共耗时-23-毫秒】query 此时,估计很多朋友能想到灵活运用代理模式或者 AOP 的思想赋予其中,有想法是鼎好的,但不是本次讨论的重点,接下来要重点介绍一下如何借助 SLF4J 提供的 Profiler...API 来统计方法耗时

    1.9K10

    java通过拦截器实现项目每次执行sql耗时统计,可配置是否打印

    配置文件 代码简要分析  前言   我们平常在跑项目的时候,有时候一不留神,写了一个慢sql,导致整个系统变的很慢,但是我们有不知道是哪个sql导致的,这段代码,就能够实现我们想要的功能 既可以统计...sql耗时,又可以定位到执行sql的是哪段代码,还可以拿到完整替换过?...号替换成完整sql也是通过这个逻辑完成的 实现的效果 1.时间超过n秒的要打印,n秒通过配置形式 2.可配置打印级别info/debug 3.Sql打印日志开关,如果为关就不打印sql日志 4.日志格式:耗时...; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.regex.Matcher...default: if (log.isInfoEnabled()){ log.info("执行sql耗时

    60910
    领券