我想计算我的Java程序的执行时间,但我不确定该如何进行。我知道可以使用System.nanoTime()和System.currentTimeInMillis()来计算经过的时间,但这种方法没有考虑操作系统的底层调度机制。
例如:假设同时有3个进程运行(假设是单核系统)
- 进程A - 进程B(我的Java代码 - 在JVM进程中运行) - 进程C
现在,如果进程B从上午11:00开始执行,并在上午11:02完成执行,则System.nanoTime()和System.currentTimeInMillis()将报告所用时间为2分钟。但是可能进程B并未在整个2分钟内始终运行,因为操作系统将调度其他2个进程,并且它们在2分钟间隔中会运行一段时间。因此,实际上java程序运行的时间要少于2分钟。
有没有一种方式可以精确地确定Java程序本身完成执行所需的确切时间? 注意:
1. 我们可以多次运行代码并取平均时间以减小这种情况的影响,但了解是否有可靠的方法来计算执行时间仍然很好。 2. 假设我们需要计时的代码部分无法分成较小的块并且需要大量处理时间。
例如:假设同时有3个进程运行(假设是单核系统)
- 进程A - 进程B(我的Java代码 - 在JVM进程中运行) - 进程C
现在,如果进程B从上午11:00开始执行,并在上午11:02完成执行,则System.nanoTime()和System.currentTimeInMillis()将报告所用时间为2分钟。但是可能进程B并未在整个2分钟内始终运行,因为操作系统将调度其他2个进程,并且它们在2分钟间隔中会运行一段时间。因此,实际上java程序运行的时间要少于2分钟。
有没有一种方式可以精确地确定Java程序本身完成执行所需的确切时间? 注意:
1. 我们可以多次运行代码并取平均时间以减小这种情况的影响,但了解是否有可靠的方法来计算执行时间仍然很好。 2. 假设我们需要计时的代码部分无法分成较小的块并且需要大量处理时间。