java - 逐行分析 Java

标签 java profiling

我正在尝试分析我的代码以检测瓶颈。我搜索了一些分析器,但我从来没有找到我要找的东西。
以前用了很多python,有这个软件:
line_profiler谁给了这种返回:

0         Line     Hits  Time  Per Hit   % Time  Line Contents

11                                           @profile
12                                           def compute_prior(folder):
13                                               """
14                                               Given a folder, we compute the prior of neg and pos
15                                               folder = "./movie-reviews-en/train/"
16                                               """
17                                               # we compute the number of positive reviews
18         3         1719    573.0     52.9      number_positive = len([f for f in listdir(folder + "pos/")])
19                                               # then the negative
20         3         1512    504.0     46.6      number_negative = len([f for f in listdir(folder + "neg/")])
21                                               # we add it and we have the total
22         3            6      2.0      0.2      total = number_positive + number_negative
23                                               # we devide to have the probabilites
24         3            6      2.0      0.2      number_positive /= total
25         3            1      0.3      0.0      number_negative /= total
26                                               # we return this three numbers
27         3            3      1.0      0.1      return [number_positive, number_negative, total]
Java 世界中有类似的东西吗?
谢谢回复。
ps:我已经知道 yourkit、jprofiler、visualwm,但我想要代码中的一些东西。

最佳答案

我从事性能分析已经有一段时间了,我很确定,您不会找到这样的工具。我不认为,首先构建这样一个工具是可行的。

这涉及到很多不可估量的问题,例如,热点虚拟机将在学习可能的执行路径或执行频率后反编译和重新编译代码。因此,一行代码的执行时间可能会随时间显着变化。

此外,您的监控解决方案会减慢您的应用程序的速度,甚至更糟:它会改变您的代码的相对执行时间。这基本上意味着您可能会在没有监控的情况下不存在此类热点的地方发现热点。

您可以自己构建这样的工具,即通过 System.nanoTime() 测量执行时间。 ,但你肯定会发现这不是一条可走的路。

我的建议是坚持使用您已经命名的默认分析器,直到您查明悲伤的根源,然后切换到一些手动技术或使用重构来提取包含热点的部分方法以获得更清晰的理解,这部分代码负责不受欢迎的行为。

如果您想构建微基准测试:只需忘记它。微基准测试几乎从不显示任何可靠或可传输的数据,即使您做对了并且机会非常高,但您根本没有做对。

关于java - 逐行分析 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487995/

相关文章:

Java递归二叉树方法的空指针异常

java - 字符串中只保留一位小数

java - 如果字符串中有 '-' 例如 "3da549f0-0e88-4297-b6af-5179b74bd929",如何进行全文搜索?

javascript:我们如何跟踪页面中的对象总数(任何对象都将被计算在内)

java - 是否可以使用 Comparator.comparingInt 链按两个字段以相反的自然顺序对对象进行排序

java - Selenium-根据文本匹配获取列表索引号

x86 - 不支持 perf mem 错误事件 'cpu/mem-stores/P'

c - C - 跨平台中函数的毫秒精度计时

mysql - 如何比较 MySQL 中两个函数的平均运行时间?

启用分析的 Haskell 重新安装基础