Java VisualVM 中的“总时间(CPU)”是不是包含 CPU 用于执行其他进程的时间?
Posted
技术标签:
【中文标题】Java VisualVM 中的“总时间(CPU)”是不是包含 CPU 用于执行其他进程的时间?【英文标题】:does "total time (CPU)" in Java VisualVM contain time which CPU spent executing other processes?Java VisualVM 中的“总时间(CPU)”是否包含 CPU 用于执行其他进程的时间? 【发布时间】:2020-01-30 06:18:24 【问题描述】:Java VisualVM 的 CPU 分析器选项卡中的“总时间 (CPU)”列是否包含 CPU 执行其他进程所花费的时间?
例如,让我们考虑这样的情况:
我运行一个程序,其中我有一个名为 myMethod() 的方法,它可以进行一些计算。这个计算需要 2 秒 - 所以如果 CPU 什么都不做,只执行我的代码,那么执行这个方法需要 2 秒。在我分析我的应用程序时,CPU 正在执行多个进程 - 我的进程和其他一些进程(例如,我正在运行浏览器或类似的东西)。
CPU 已启动 myMethod(),它执行此方法一段时间,然后开始执行浏览器进程并在那里花费 1 秒,然后再次返回执行 myMethod() 并完成。所以在 myMethod() 的开始和结束之间已经过去了 3 秒,但只有 2 秒用于执行 myMethod()。
Java VisualVM 的 CPU 分析器选项卡中的“总时间 (CPU)”列中显示的时间是 2 秒还是 3 秒?
【问题讨论】:
【参考方案1】:在报告 CPU 时间时,分析器将报告 JVM 本身花费的时间(可能包括“系统”时间)。
(比如说)浏览器使用的 CPU 时间不应计入 CPU 时间列。如果是 / ,那么列标题应该是“经过”或“实时”时间。
如果您对此没有信心,请编写一些简单的测试程序并对其进行分析:
查看分析器在您的应用程序调用Thread.sleep(....)
时报告的内容
当您的应用程序在从System.in
读取一行时出现阻塞时,查看分析器报告的内容。
【讨论】:
以上是关于Java VisualVM 中的“总时间(CPU)”是不是包含 CPU 用于执行其他进程的时间?的主要内容,如果未能解决你的问题,请参考以下文章