gpt4 book ai didi

java - 使用 JVMTI 测量方法执行

转载 作者:行者123 更新时间:2023-11-29 08:13:41 32 4
gpt4 key购买 nike

使用 MethodEntryMethodExit JVMTI 提供的事件 Hook 如何测量在 Java 中执行的方法的时间?

简单来说就是:time2 - time1但我看到的问题是,如何区分不同的方法?有methodID,但是递归调用呢?方法打开后何时关闭?

我应该比较堆栈跟踪吗?跟踪输入方法的有意义的数据结构是什么?类似于 Map<StackTrace,Time>?

最佳答案

每个线程都需要一个堆栈,并且在每次 MethodEnter 时将时间戳压入堆栈,在 MethodExit 时弹出时间戳并计算差值当前时间。

尽管您应该记住,读取时间戳或滴答计数以及周围的逻辑是相对耗时的。如果你在某种分析器中使用类似的东西,你会得到的结果使小型快速方法显得非常昂贵。 IE。 ByteBuffer.get() 的执行速度可能至少比您的测量代码快 10 倍。再加上当 JVMTI 处于 Activity 状态时由于有限的 JIT 编译造成的失真,这些方法在收集的数据中很容易显得比正常情况下重 100 倍。获取方法执行时间份额的有用数据的唯一方法是使用采样。

关于java - 使用 JVMTI 测量方法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6229107/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com