当前位置: 首页 > 面试题库 >

Java中的CPU执行时间

桑成荫
2023-03-14
问题内容

我想计算我的函数在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<runs;i++) {
    if(i == 0) start = System.nanoTime();
    // do test
}
long time = System.nanoTime() - start;
System.out.printf("Each XXXXX took an average of %,d ns%n", time/runs);

非常重要:每种方法只能执行以下循环之一。这是因为它根据使用方式优化了整个方法。如果您有一个像这样的繁忙循环,则后面的循环将显得较慢,因为它们尚未运行并且优化效果不佳。



 类似资料:
  • 我试图利用Ubuntu 16.04上的崩溃安全漏洞,英特尔酷睿-i5 CPU上的未修补内核4.8.0-364300M。 首先,我使用内核模块将机密数据存储在内核空间的一个地址: printk语句给我秘密数据的地址。 然后,我尝试访问此位置的数据,并在下一条指令中使用它缓存数组的元素。 当执行无序执行时,我希望CPU继续并在索引处缓存数组元素(数据*4096 DELTA)。在此之后,执行边界检查并抛

  • 问题内容: 对于Java代码的特定部分,我想测量: 执行时间(最有可能的 线程执行时间 ) 内存使用情况 CPU负载(具体可归因于代码段) 我是Java的相对新手,并不熟悉如何实现。我已经提到过JMX,但是我不确定该如何使用,而JMX对于我想做的事情看起来有点“沉重”。 理想情况下,我想要一些可以告诉我要测量什么的测量类,可以选择在代码段之前调用方法,在代码段之后调用方法。相关指标将记录到我指定的

  • 有没有办法知道命令的执行时间?使同步 ffmpeg命令需要时间,所以我想在执行后记录一些东西。有什么方法可以在命令执行后记录这些东西吗?

  • 问题内容: 如何获得方法的执行时间?是否存在Timer实用程序类,用于对任务花费多长时间进行计时等? Google上的大多数搜索都会返回安排线程和任务的计时器的结果,这不是我想要的。 问题答案: 总有一种老式的方式:

  • 我将替换用户在特定给定字符串中重复的单词。因此,我使用split方法将给定的字符串用空格拆分,并将其放入数组和arraylist中。 迭代通过数组并检查条件后,它是平等的,然后我删除了ArrayList。但是在删除它时,它显示索引出界异常。 此代码适用于小数组大小,但在给出大量数组大小时显示异常。我有问题,而我给字符串的数组大小为13个字。 这是我的全部代码。

  • 我有一些传入的并发请求应该以串行方式处理。我试图通过将请求转换为消息并发布到jms队列来实现这一点。然后使用 mdb 处理队列。 使用特定于供应商的配置,我知道我可以将mdb限制为一个实例,但是有什么推荐的可移植的方法来解决这个问题呢? 编辑:忘了提一下我真的不需要jms的特性(可靠性等)。