所以我正在使用 VisualVM 分析我的应用程序。
我遇到了一个关于我的 MySQL 交互的热点。我的第一个想法是热点显示我的应用程序在 IO 之后等待的时间。但是在分析报告中,VisualVM 有两列“时间”和“时间(cpu)”。也许这个词被错误地使用了,但我假设 self-time (cpu) 列不包括 IO 时间。经过更多调试,我们得出结论,假设是错误的并且显示 IO 时间,因为热点位于 MySQL 驱动程序的 java.net.SocketInputStream.read() 和其他不应该消耗任何 cpu 的 IO 东西上。
所以,我的问题是为什么 visualvm 将 SocketInputStream.read() 报告为 cpu 时间?