【问题标题】:Is there a tool or a way to speedtest java classess/methods per line of code? [closed]有没有一种工具或方法可以快速测试每行代码的 java 类/方法? [关闭]
【发布时间】:2025-12-18 12:50:02
【问题描述】:

在工作中,我经常使用 Spring Boot 后端。我不时需要优化方法以更快地运行,以便用户不必等待并且请求不会超时。

观看此视频后:https://youtu.be/oewDaISQpw0?t=566 。我真的很喜欢每行代码显示执行时间的想法,而不是完整的方法。我开始寻找类似的 Java 工具,但一无所获。

所以我开始考虑自己的解决方案。

我创建了一个类,它接受一个 .java 文件并以某种方式对其进行编辑,每行之后都有一个时间打印,编译它并将其加载到代码中以执行它。在执行之前,我重定向 System.out 流以捕捉时间打印。这有点工作,但仅适用于没有依赖关系的独立类,对于我的 Sring 服务,取决于其他服务和存储库,它并不真正适用。所以我考虑用我编辑的类替换运行时的类,这在java(?)中并不真正起作用。我还尝试使用 InvocationHandler 来捕获我的服务的方法调用并将它们路由到我编辑的类,但我仍然需要依赖项,并且显然方法代理确实只适用于接口。

我的目标是拥有方法和类注释,这将标记要进行速度测试的类/方法。当被调用时,他们的时间将被记录下来,并以格式化的 .html 格式在暴露的端点上提供。

我现在有点想不通,可能需要一些帮助。
提前致谢。

【问题讨论】:

  • 在每行打印时间对于测量运行时间来说听起来是个坏主意,因为打印到控制台/文件比实际行(通常)花费更多时间。这会对测量产生一定的影响。
  • 每次打印后我都会重置计时器,所以我认为这不是问题。

标签: java spring-boot performance optimization


【解决方案1】:

您正在寻找的是 Profiler。大多数可以告诉您每个方法的执行时间和内存使用情况,被标识为“热点” - 大部分时间花费在哪里,或者大部分内存消耗在哪里。

Netbeans 有一个内置的 Profiler 功能: https://netbeans.apache.org/kb/docs/java/profiler-intro.html

另外,看看 VisualVM: https://visualvm.github.io/download.html

如果您搜索“Java profiler”,还有其他可用的商业产品

【讨论】:

  • 它是否也分析了库方法的执行时间?那将是几乎完美的。
  • 如果您的方法 A 调用库方法 B,那么您的方法 A 的执行时间将包括执行您的所有代码以及它调用的任何其他代码(无论是您的代码还是库代码)所花费的时间。通常,该工具会按方法细分为您提供方法,无论它是您的代码还是库中的代码。归根结底,不管你写不写,都是 Java 代码(工具不知道区别)
  • 这是可以接受的!非常感谢!
最近更新 更多