Java中的CPU执行时间
我想计算我的函数在Java中执行需要多少CPU时间。 目前我正在做如下。
long startTime = System.currentTimeMillis(); myfunction(); long endTime = System.currentTimeMillis(); long searchTime = endTime - startTime;
但我发现,对于相同的I / PI,根据系统负载获得不同的时间。
那么,如何获得我的函数执行所需的精确CPU时间。
随着JVM的升温,所用的时间会有所不同。 第二次运行它总是比第一次快。 (第一次必须加载类并调用静态块)在运行方法10,000次之后,它将再次更快(将代码编译为本机机器代码的默认阈值)
为了获得微基准的可重现平均时间,我建议你忽略前10,000次迭代并在此之后运行2-10秒。
例如
long start = 0; int runs = 10000; // enough to run for 2-10 seconds. for(int i=-10000;i
非常重要:每种方法只能执行其中一个循环。 这是因为它根据使用方式优化了整个方法。 如果你有一个像这样的繁忙循环,后面的循环将显得较慢,因为它们没有运行并且将被很好地优化。
-
System.currentTimeMillis()
只会测量挂钟时间 ,而不会测量CPU时间。 - 如果你需要挂钟时间,那么
System.nanoTime()
通常比currentTimeMillis()
更精确(并且永远不会更糟currentTimeMillis()
。 -
ThreadMXBean.getThreadCPUTime()
可以帮助您了解给定线程使用了多少CPU时间。 使用ManagementFactory.getThreadMXBean()
获取ThreadMXBean
和Thread.getId()
以查找您感兴趣的线程的id
。请注意,每个JVM都不需要支持此方法!
你可以在这里寻找答案:
如何计算方法在Java中的执行时间?
有很多例子来计算方法的执行时间
有许多分析器(Jprofile,Jprobe,Yourkit)可用于分析此类数据。 不仅如此,还有更多……(例如内存利用率,线程详细信息等)
- Okhttp android Websocket和Jetty Server连接SSL
- 当我显示一个对话框时,抛出exception“UnhandledAlertException:Modal dialog present”
- 打印java scriptlet变量,就好像它是一个JavaScript变量一样
- 什么是“推动方法”和“拉动方法”来解析?
- 如何在PreparedStatement中使用多个可选参数填充查询sql?
- iBatis创建一个包含多个注释的数组(注释重用)
- 带有Label.setText的JavaFx2 IllegalStateException
- 使用仿射变换放大
- 如何在Tomcat中初始化Web应用程序