java方法第一次执行比较慢,为什么第一次在Java中调用方法时会出现运行时开销?...
我正在测量代码的执行时间,并在第一次调用方法时发现了一些奇怪的行为(来自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中调用方法时会出现运行时开销?...相关推荐
- java定时器只执行一次_搞定Java并发:为什么说只有1种实现线程的方法?(下)...
在 上一篇(戳下看前情) 中,徐大带我们详细论证了,所有实现线程的方式归根结底就是基于 Runnable 接口或继承 Thread 类.接下来,请徐大继续解释,为什么说这两种方式本质上是一种. 一. ...
- Xlua文件在热更新中调用方法
Xlua文件在热更新中调用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定义Lua初始变量 void Awake() { luaEnv ...
- java 如何循环执行一个对象_Java基础:如何定义好一个方法和进行方法重载
方法就是定义在类中的具有特定功能的一段独立小程序,可以完成特定功能的代码块 在很多语言里都有函数的定义 函数在java中也称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...
- Java中调用方法的几种方式
一般的,在Java语言中,调用方法有三种方式. 第一种:通过对象名.方法名进行调用,这是最普通的也是最常见的一种调用方式. 第二种:通过new关键字调用构造方法,这种是在实例化对象时使用的方式. 第三 ...
- java学习(尚硅谷)集合之Collection接口中的方法
又是好几天没有学Java了,今天下午睡了个觉状态很好,来到图书馆写了点C++的项目代码,写累了看了几集康师傅.笔记如下: Collection接口中的方法: package com.atguigu.j ...
- java jsp js xml_jsp实现将信息放入xml中的方法
本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: 北京 广东 海南 市: 北京 二.ajax代码创建服务器请求代码不用写了,写onchange ...
- java 类名方法_Java学习——根据类名获取方法名,并调用方法
最近在项目中调用mybatis获取到了实体类对象,但是我们需要从实体类对象中取属性值,所以这里就需要以下几点知识: 1.根据Object对象获取类名 2.根据类对象获取所有的对象方法名 3.根据方法名 ...
- [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
在 Java中,所有对象都能够被作为"监视器monitor"--指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity. 所有对象的非同步 方法都能够在任意时刻被任意线 ...
- Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)
java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 异常分成三种结构 1.错误:Error是Throwable 的子类 ...
最新文章
- ansys大变形开关要不要打开_ANSYS不收敛问题的解决办法
- JAVA连接SQL Server数据库的端口配置操作步骤
- 13.挂载点、文件系统、磁盘的命名、分区的命名
- Android APP破解利器Frida之反调试对抗
- Maven配置阿里镜像仓库
- mysql卸载权限不够_Linu下启动MySQL结果显示:env: /etc/init.d/mysql:权限不够怎么解决?...
- Unix/Linux环境C编程入门教程(27) 内存那些事儿
- 寒冬袭来,带你使用Flask开发一款天气查询软件吧
- 向量二次规划matlab,MATLAB中使用Opti Toolbox的混合整数二次规划
- 移远EC20串口使用阻塞问题
- Oracle 数据库连接工具
- 比扫描全能王还好用的OCR文字识别神器
- 删除文件时提示:无法读源文件或磁盘之解决办法
- 58.3万笔/秒!看阿里的黑科技
- 阿丹学理财之财富认知
- Android 高斯模糊效果从319ms到3ms的优化实现
- 0.96寸IIC接口ssd1306和ssd1315驱动oled12864屏幕介绍
- 服务器启动文件夹,win10系统开机启动文件夹的路径是什么_网站服务器运行维护...
- 迎娶白富美,走上人生巅峰。
- 光流跟踪 Lucas-Kanade(LK)算法,用于目标追踪
热门文章
- 浏览器测试基本跑分网站
- python怎么显示分数_python分数怎么表示
- excel导入导出工具类_Hutool Java工具类库导出Excel,超级简单
- 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
- appium python unittest_appium+python+unittest自动化测试
- vb未找到方法或数据成员_答疑 | VB首行的Option Explicit有何作用?
- linux入门指令 详解,Linux基础命令之mktemp详解
- 图像处理自相关函数c语言,图像处理实验书.docx
- java两个数最大公约数和最小公倍数,java求两个数的最大公约数和最小公倍数
- springboot aop记录日志