【发布时间】:2010-05-07 12:37:35
【问题描述】:
我正在使用 YourKit 和 JProfiler 中的采样分析和“手动”分析程序(我启动它并按 Ctrl-Break 几次以获取线程转储)。
这三种方法都给了我非常奇怪的结果:在一个 3 行方法中花费了百分之几十的时间,它甚至不进行任何分配或同步,也没有循环等。此外,在我将这个方法变成 NOP 甚至完全删除它的调用之后,可观察到的程序性能根本没有改变(尽管它的内存泄漏可以忽略不计,因为它是一种释放廉价资源的方法)。
我在想这可能是因为 JVM 对线程堆栈跟踪可能被执行的时刻施加了限制,结果不知何故,在我的程序中正是调用此方法的时刻,尽管它或调用它的上下文绝对没有什么特别之处。
这种现象的解释是什么? 上述限制是什么? 我可以采取哪些进一步的措施来澄清这种情况?
【问题讨论】:
-
也许是分析器结果的快照开始
标签: java performance jvm profiling