在Java中衡量执行时间– Spring StopWatch示例

两种方法可以通过使用System.currentTimeinMillis()或通过使用System.nanoTime() 来测量Java中经过的执行时间 。 这两个方法可用于测量 Java中两个方法调用或事件之间的经过时间或执行时间计算经过的时间是Java程序员要做的第一件事,即弄清方法要执行多少秒或毫秒,或者某个特定代码块要花费多少时间。 大多数Java程序员从一开始就熟悉System.currentTimeInMillis(),而Java 1.5引入了新版本的更精确的时间测量实用程序System.nanoTime,以及诸如Generics , Enum类型 ,auto等语言的一些新功能。装箱和可变参数或可变参数 。 您可以使用它们中的任何一个来衡量Java中方法的执行时间。 尽管最好使用System.nanoTime()来更精确地测量时间间隔。
在本Java编程教程中,我们将看到一个简单的Java程序,它通过使用System.nanoTime()和Spring框架的StopWatch实用工具类来测量执行时间。 本文是我继续发布有关涵盖Java基本概念的文章的继续,例如如何在Java中比较String , 如何在Java中正确编写equals方法以及在Java 中循环HashMap的4种方法 。 如果您还没有阅读它们,您可能会发现它们很有用。

衡量Java执行时间的Java程序示例

这是一个使用System.nanoTime 测量两个代码块之间的经过时间代码示例,在任何开放源代码Java库(如Apache commons lang,Google commons和Spring)中,还提供了StopWatch实用程序类,可用于测量Java的经过时间 。 StopWatch改进了可读性,以在计算经过的执行时间时最大程度地减少了计算错误,但是请注意StopWatch并非线程安全的 ,不应在多线程环境中共享,并且它的文档明确指出,它更适合用于基本性能评估的开发和测试环境在生产环境中执行时间计算。
import org.springframework.util.StopWatch;/*** Simple Java Program to measure elapsed execution time in Java* This Java Program shows two ways for measuring time in Java, by using System.nanoTime() which was* added in Java 5 and StopWatch which is a utility class from Spring Framework.*/
public class MeasureTimeExampleJava {public static void main(String args[]) {//measuring elapsed time using System.nanoTimelong startTime = System.nanoTime();for(int i=0; i < 1000000; i++){Object obj = new Object();}long elapsedTime = System.nanoTime() - startTime;System.out.println("Total execution time to create 1000K objects in Java in millis: "+ elapsedTime/1000000);//measuring elapsed time using Spring StopWatchStopWatch watch = new StopWatch();watch.start();for(int i=0; i < 1000000; i++){Object obj = new Object();}watch.stop();System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "+ watch.getTotalTimeMillis());}  }Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
您应该使用哪一个来衡量Java中的执行时间
如果您使用的版本低于JDK 1.5,则取决于可用的选项,而System.currentTimeInMillis()在可用性方面是最佳选择,而在JDK 1.5之后,nanoTime可以更好地测量经过时间,因为它更准确并且使用精确的系统时钟并可以测量高达纳秒的精度 。 虽然如果您正在使用上述Java开源库中的任何一个,大多数情况下使用Spring而不是StopWatch也是更好的选择,但是正如我之前所说, StopWatch 不是线程安全的 ,只能在开发和测试环境中使用。 就像SimpleDateFormat不是线程安全的一样 ,您可以使用ThreadLocal为每个线程创建SimpleDateFormat,您也可以使用StopWatch做同样的事情。 但是我不认为StopWatch是像SimpleDateFormat这样的重对象。
这就是如何测量Java的经过时间或执行时间的全部内容。 使自己养成测量重要代码段的性能和执行时间的习惯,尤其是在大多数时间执行的方法或循环。 在那些地方,对代码进行小的优化可以提高性能。
参考: 如何在Java中测量经过的执行时间–来自我们JCG合作伙伴 Javin Paul的StopWatch示例,来自Javarevisited博客。

翻译自: https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言getch在哪个头文件,用getch()需要头文件吗?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include "string.h"#includeusing namespace std;struct student{ int num;char name[10];char banji[10];float score[3];struct student *next;};struct student *creat(){struct student *head,*p…

My solution for Git Client Error: Permission denied (publickey)

在使用Git客户端的过程中遇到的问题以及解决方案分享。 我之前已经安装Git客户端并且使用Git开发过公司项目&#xff0c;也已经正确生成PublicKey并且添加到SSH keys on github of my account&#xff0c;但是当我想从github上克隆另一个客户端push的代码的时候一直报错&#x…

OutOfMemoryError:无法创建新的本机线程–问题神秘化

正如您从我以前的教程和案例研究中可能已经看到的那样&#xff0c;要确定和解决Java Heap Space OutOfMemoryError问题可能很复杂。 我从Java EE生产系统中观察到的常见问题之一是OutOfMemoryError&#xff1a;无法创建新的本机线程&#xff1b; HotSpot JVM无法进一步创建新的…

求10以内平均数的c语言,求助 给小学生出题,自己选加减乘除 做10题 10以内的数 然后统计分...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include void Menu(void){printf("1,加法 2,减法 3,乘法 4,除法 5,退出\n");printf("请选择题目类型:");}int Plus(void){int a, b;a rand() % 10 1;b rand() % 10 1;printf("%-2…

linux常用命令大全(转)好东西要分享

1、ls命令 就是list的缩写&#xff0c;通过ls 命令不仅可以查看linux文件夹包含的文件&#xff0c;而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等 常用参数搭配&#xff1a; ls -a 列出目录所有文件&#xff0c;包含以.开始的隐藏文件 ls -A 列出除.及.…

Cobertura和Maven:集成和单元测试的代码覆盖率

在姜黄项目中&#xff0c;我们每晚维护一个仪表板。 在仪表板上&#xff0c;我们收集有关项目的统计信息&#xff0c;包括代码覆盖率&#xff0c;findbugs分析和其他指标。 我们一直在使用Maven EMMA插件来提供代码覆盖&#xff0c;但是遇到了EMMA问题。 在对类进行检测后&…

二分图之匈牙利算法模版

1 /*2 匈牙利算法模版邻接表版3 最大匹配问题4 时间复杂度&#xff1a;O (nm)5 */6 #include <cstdio>7 #include <vector>8 #include <cstring>9 using namespace std; 10 const int maxn 505; 11 vector<int> v[maxn];//x v[i][j]表示i可以与x匹配…

android 字体描边实现,android文字描边功能的实现

这里也要简单说一下&#xff0c;这些小模块并不是我原创&#xff0c;也是当时查资料找到的&#xff0c;由于时间比较久&#xff0c;原文链接已经忘记了&#xff0c;所以这里就不列出引用链接了。不过这些代码我都修改、完善过&#xff0c;也添加了一些注释&#xff0c;希望对大…

Factorial vs Power

题意 输入a&#xff0c;找到满足n!>a^n 最小的n。 数据 第一行T(1 < T < 1e5)&#xff0c;表示测试样例数.(2 < a < 1e6)。 输入 3 2 3 4 输出 4 7 9 这个东西一看就知道是二分求解的&#xff0c;但是我们还是不知道怎么求的&#xff0c;我们可以吧他们取对数然…

评论:Arun Gupta撰写的“ Java EE 6 Pocket Guide”

这是我很高兴写的评论。 我的朋友阿伦&#xff08;Arun&#xff09;发布了Java EE 6袖珍指南&#xff0c;该指南将在您订购时尽早提供。 我很早就知道这本书&#xff0c;因为我很乐意对其进行回顾&#xff0c;也感谢有机会为本书做出一点贡献&#xff01; Kindle版本已经可用&a…

双android手机同步工具,手机同步软件Android Manager使用图文教程

类型&#xff1a;手机工具大小&#xff1a;23.6M语言&#xff1a;繁体 评分&#xff1a;6.6标签&#xff1a;立即下载Android Manager 可透过五个简单的步骤设定&#xff1a;步骤一. 在计算机上安装 Android Manager请点选以下之下载按钮或直接于计算机上输入下载网址&#xff…

Camel:构建基于消息的应用程序

这是一篇长文章&#xff0c;包含三个单独的主题&#xff1a; Java的Apache Camel入门 使用CamelRunner改善路线的启动 使用Camel构建基于消息的应用程序 但是&#xff0c;由于我准备了包含所有这些材料的camel-demo-1.0.0-SNAPSHOT-project.zip &#xff0c;因此我认为将它们…

android 网易item广告,Android仿网易严选商品详情页

仿照网易严选商品详情页面&#xff0c;整个页面分为两个部分&#xff0c;上面一部分是Native的ScrollView&#xff0c;下面一部分则是WebView&#xff0c;其目的是为了可以进行分步加载。滑动到ScrollView底部时&#xff0c;继续向上拖动&#xff0c;可以加载下面的WebView部分…

freemarker,数字,日期,布尔值常用的函数

${3.4?floor} ${3.4?ceiling} ${3.45?round} ${3.45?rtf} ${3.458?string("0.##")} ${3.42?string.percent} ${3.42?string.currency} ${date?string("yyyy-MM-dd")} ${date?date} ${date?time} ${date?datetime}${true?c} ${true?string} ${…

mysql联合索引与Where子句优化浅析

问题描述&#xff1a;把排序、条件等一个一个去除来做测试&#xff0c;结果发现问题就出在排序部分&#xff0c;去除排序时&#xff0c;执行时间由原来的48秒变成0.3x秒。于是&#xff0c;把涉及排序的字段组成一个联合索引alter table xx add index indexname(x1,x2,x3)&#…

有效使用Eclipse的热门提示

以下是一些技巧&#xff0c;可以帮助您避免潜在的问题并在使用Eclipse时提高工作效率。 避免安装问题 切勿在旧版本之上安装新版本的Eclipse。 首先重命名旧版本&#xff0c;将其移开&#xff0c;然后将新版本解压缩到干净的目录中。 恢复混乱的工作空间 对于许多开发人员来…

android拍照截图组件,Android截图命令screencap与视频录制命令screenrecord(示例代码)...

查看帮助命令[email protected] ~$ adb shell screencap -vscreencap: invalid option -- vusage: screencap [-hp] [-d display-id] [FILENAME]-h: this message-p: save the file as a png.-d: specify the display id to capture, default 0.If FILENAME ends with .png it …

usaco 2017 February platinum

1.一条路&#xff0c;两边都是一个1到n的全排列&#xff0c;可以把其中一个全排列的起始位置改变&#xff08;比如123可以变成231或者312&#xff09; 然后把相同的数连起来&#xff0c;求小交叉数。 先算一下交叉数&#xff0c;然后直接一步步移动&#xff0c;O1更新一下状态就…

Hessian 源码简单分析

Hessian 源码简单分析 Hessian 是一个rpc框架&#xff0c; 我们需要先写一个服务端&#xff0c; 然后在客户端远程的调用它即可。 服务端&#xff1a; 服务端通常和spring 做集成。 首先写一个接口&#xff1a; public interface HelloService { void sayHello(String n…

Java开发人员应该知道的三件事

对于那些长期关注JavaOne 2012会议的读者来说&#xff0c;这是一篇有趣的文章。 我最近对Java冠军Heinz Kabutz的采访引起了我的注意&#xff1b; 包括他的Java内存难题程序&#xff0c;从Java内存管理的角度来看&#xff0c;这很有启发性。 采访中有一个特别的部分吸引了我的注…