当前位置: 首页 > 知识库问答 >
问题:

Java执行时间不加起来

章涵蓄
2023-03-14

我有以下主要功能

public static void main(String[] args) {
        
        int times = 100;
        
        double startTime = System.nanoTime();
        for (int a = 1; a <= times; a++) {
            BTree<Integer> testTree = new BTree<Integer>(1,3); // Creates BTree with root 1 and degree T 3
            for (int i = 2; i <= 500; i++) {
                testTree.BTreeInsert(i); // We insert up to 500 keys.
            }
        }
        double stopTime = System.nanoTime();
        
        System.out.println("Time: " + (((stopTime-startTime) / 1000000 / times)) + "ms");
    }

我试图在这里做的是测量将新键插入到B树中的执行时间,最多可达500次。问题是我得到的时间度量值有点小,所以我的老师告诉我循环多次。

共有1个答案

苏磊
2023-03-14

这是因为JVM看到循环运行多次(分析),并使用优化编译器(C1和C2,如果这是热点JVM的话)。如果您使用-xx:+printcompility运行您的类(像java-xx:+printcompilityclassname)可以看到,在带有500试用版中,编译了更多的方法-例如,我的OpenJDK 15.0.1java多次编译arraylist::add,使用C1和随后的C2(第三列中的2和3是C1的不同优化级别,4是C2):

 45   48       3       java.util.ArrayList::add (25 bytes)
 46   51       4       java.lang.Number::<init> (5 bytes)
 46   49       2       java.util.ArrayList::add (23 bytes)
 47   46       3       java.lang.Number::<init> (5 bytes)   made not entrant
 47   52       4       java.util.ArrayList::add (25 bytes)

因此,当有500次迭代的循环运行时,在几次迭代之后,它使用经过编译和高度优化的代码,而单次迭代版本将其留给解释器,后者速度较慢。

此外,我建议研究一下JMH,它是一个用于完成您想要在这里完成的工作的工具--微基准测试。

 类似资料:
  • 问题内容: 我想计算我的函数在Java中执行需要多少CPU时间。目前我正在做如下。 但是我发现,对于相同的I / PI,根据系统负载,获得不同的时间。 因此,如何获得我的函数执行所需的确切CPU时间。 问题答案: 随着JVM预热,所需的时间会有所不同。第二次运行将始终比第一次运行快。(第一次必须加载类并调用静态块)运行该方法10,000次后,它将再次更快(将代码编译为本机机器代码的默认阈值) 为了

  • 问题内容: 我想使用PHP发送数百封电子邮件。为了增加执行时间,我使用了 ini_set(’max_execution_time’,10);。 但是仅发送 30 封电子邮件后,浏览器向我显示空白页,并且不会发送所有电子邮件。 我也将限制更改为300,600 .. 问题答案: 尝试在脚本顶部。 set_time_limit 设置最大执行时间(以秒为单位)。如果设置为零,则不施加时间限制

  • 问题内容: 我添加了增加执行时间的功能,但最多只能执行2-3分钟。 我想从一个需要很长时间的站点上搜索链接。 任何帮助将不胜感激。 非常感谢。 问题答案: PHP文件(例如,my_lengthy_script.php) .htaccess文件 更多配置选项 如果是wordpress,请在config.php文件中进行设置, 如果是drupal,则为sites / default / setting

  • 问题内容: 我在Python脚本中有多次调用的函数(https://github.com/sankhaMukherjee/NNoptExpt/blob/dev/src/lib/NNlib/NNmodel.py):为此,我已大大简化了该函数例。 我从另一个函数多次调用此函数。当我看到程序日志时,似乎此功能花费的时间越来越长。显示了部分日志: 有没有其他人经历过这样的事情?这完全让我感到困惑… 编辑

  • 问题内容: 有没有一种方法可以获取mysql中最后一次执行查询的执行时间? 问题答案: mysql有一个内置的探查器。您可以通过发布来启用概要分析,并使用它来获取执行时间。

  • Elasticsearch版本():5.2.2 JVM版本():1.8.0_121 OS版本(如果在类UNIX系统上):opensuse 使用“curl-xget'localhost:9200/_search?pretty&timeout=1ms'”进行搜索 响应部分为:{“Take”:5,“timed_out”:false,“_shards”:{“total”:208,“successed”:2