我正在测量代码的执行时间,并在第一次调用方法时发现了一些奇怪的行为(来自main方法)。这是我的代码,请看看这个

public static void main(String[] args) {

try (Scanner input = new Scanner(System.in)) {

int iNum = input.nextInt();

long lStartTime = System.nanoTime();

// ***********(First call in main) Calling isPrime *************

lStartTime = System.nanoTime();

printResult(isPrime(iNum));

System.out.println("Time Consumed in first call-: "

+ (System.nanoTime() - lStartTime));

// ***********(Second call in main) Calling isPrime *************

lStartTime = System.nanoTime();

printResult(isPrime(iNum));

System.out.println("Time Consumed in second call-: "

+ (System.nanoTime() - lStartTime));

}

}

private static boolean isPrime(int iNum) {

boolean bResult = true;

if (iNum <= 1 || iNum != 2 && iNum % 2 == 0) {

bResult = false;

} else {

double iSqrt = Math.sqrt((double) iNum);

for (int i = 3; i < iSqrt; i += 2) {

if (iNum % i == 0) {

bResult = false;

break;

}

}

}

return bResult;

}

private static void printResult(boolean bResult) {

if (bResult)

System.out.println("\nIt's prime number.");

else

System.out.println("\nIt's not prime number.");

}

输入

5

输出

It's prime number.

Time Consumed in first call-: 484073

It's prime number.

Time Consumed in second call-: 40710

描述

我上面只描述了一个输入和输出的测试用例。但是,第一个方法调用和第二个方法调用之间的执行时间总是存在差异。

我也以类似的方式尝试了两个以上的方法调用,发现除了一个调用之外,其他调用之间没有这么大的差别。除了第一个方法调用484073ns之外,其他调用的执行时间40710ns(此系统的执行时间可能会有所不同)。很容易我在第一次方法调用中看到484073 - 40710 = 443363ns(大约)的时间开销,但为什么会发生?根本原因是什么?

java方法第一次执行比较慢,为什么第一次在Java中调用方法时会出现运行时开销?...相关推荐

  1. java定时器只执行一次_搞定Java并发:为什么说只有1种实现线程的方法?(下)...

    在 上一篇(戳下看前情) 中,徐大带我们详细论证了,所有实现线程的方式归根结底就是基于 Runnable 接口或继承 Thread 类.接下来,请徐大继续解释,为什么说这两种方式本质上是一种. 一. ...

  2. Xlua文件在热更新中调用方法

    Xlua文件在热更新中调用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定义Lua初始变量 void Awake() { luaEnv ...

  3. java 如何循环执行一个对象_Java基础:如何定义好一个方法和进行方法重载

    方法就是定义在类中的具有特定功能的一段独立小程序,可以完成特定功能的代码块 在很多语言里都有函数的定义 函数在java中也称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...

  4. Java中调用方法的几种方式

    一般的,在Java语言中,调用方法有三种方式. 第一种:通过对象名.方法名进行调用,这是最普通的也是最常见的一种调用方式. 第二种:通过new关键字调用构造方法,这种是在实例化对象时使用的方式. 第三 ...

  5. java学习(尚硅谷)集合之Collection接口中的方法

    又是好几天没有学Java了,今天下午睡了个觉状态很好,来到图书馆写了点C++的项目代码,写累了看了几集康师傅.笔记如下: Collection接口中的方法: package com.atguigu.j ...

  6. java jsp js xml_jsp实现将信息放入xml中的方法

    本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: 北京 广东 海南 市: 北京 二.ajax代码创建服务器请求代码不用写了,写onchange ...

  7. java 类名方法_Java学习——根据类名获取方法名,并调用方法

    最近在项目中调用mybatis获取到了实体类对象,但是我们需要从实体类对象中取属性值,所以这里就需要以下几点知识: 1.根据Object对象获取类名 2.根据类对象获取所有的对象方法名 3.根据方法名 ...

  8. [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?

    在 Java中,所有对象都能够被作为"监视器monitor"--指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity. 所有对象的非同步 方法都能够在任意时刻被任意线 ...

  9. Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)

    java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 异常分成三种结构 1.错误:Error是Throwable 的子类 ...

最新文章

  1. ansys大变形开关要不要打开_ANSYS不收敛问题的解决办法
  2. JAVA连接SQL Server数据库的端口配置操作步骤
  3. 13.挂载点、文件系统、磁盘的命名、分区的命名
  4. Android APP破解利器Frida之反调试对抗
  5. Maven配置阿里镜像仓库
  6. mysql卸载权限不够_Linu下启动MySQL结果显示:env: /etc/init.d/mysql:权限不够怎么解决?...
  7. Unix/Linux环境C编程入门教程(27) 内存那些事儿
  8. 寒冬袭来,带你使用Flask开发一款天气查询软件吧
  9. 向量二次规划matlab,MATLAB中使用Opti Toolbox的混合整数二次规划
  10. 移远EC20串口使用阻塞问题
  11. Oracle 数据库连接工具
  12. 比扫描全能王还好用的OCR文字识别神器
  13. 删除文件时提示:无法读源文件或磁盘之解决办法
  14. 58.3万笔/秒!看阿里的黑科技
  15. 阿丹学理财之财富认知
  16. Android 高斯模糊效果从319ms到3ms的优化实现
  17. 0.96寸IIC接口ssd1306和ssd1315驱动oled12864屏幕介绍
  18. 服务器启动文件夹,win10系统开机启动文件夹的路径是什么_网站服务器运行维护...
  19. 迎娶白富美,走上人生巅峰。
  20. 光流跟踪 Lucas-Kanade(LK)算法,用于目标追踪

热门文章

  1. 浏览器测试基本跑分网站
  2. python怎么显示分数_python分数怎么表示
  3. excel导入导出工具类_Hutool Java工具类库导出Excel,超级简单
  4. 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
  5. appium python unittest_appium+python+unittest自动化测试
  6. vb未找到方法或数据成员_答疑 | VB首行的Option Explicit有何作用?
  7. linux入门指令 详解,Linux基础命令之mktemp详解
  8. 图像处理自相关函数c语言,图像处理实验书.docx
  9. java两个数最大公约数和最小公倍数,java求两个数的最大公约数和最小公倍数
  10. springboot aop记录日志