「Java知识点分享」优雅的统计程序的执行时间,别再用System.currentTimeMillis()了

每天分享一点小知识,积少成多。今天分享的是如何优化的统计程序的执行时间,搞起!

1.不建议的方式

long begin = System.currentTimeMillis();  
// 耗时的程序执行  
long end = System.currentTimeMillis();  
long costTime = begin - end;

2.优雅的方式(推荐)

// 不要在意这个代码片段哟,这样写是为了简便
import org.springframework.util.StopWatch;

StopWatch stopWatch = new StopWatch();  
stopWatch.start();
// 耗时的程序执行
stopWatch.stop();  
System.out.println("cost time: " + stopWatch.getTotalTimeMillis() + " ms");  
System.out.println("cost time: " + stopWatch.getTotalTimeSeconds() + " s");

2.1需要引入spring核心包

<!-- spring核心包,版本号根据自己的来哟,如果项目就是springboot项目是不需要单独引入了的 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.2.RELEASE</version>
</dependency>

如果文章中涉及的内容有侵权行为请通知鄙人处理。

本文转载于网络 如有侵权请联系删除

相关文章

  • Elasticsearch 警惕使用 wildcard 检索!然后呢?

    1、wildcard检索定义wildcard检索可以定义为:支持通配符的模糊检索。类似Mysql中的like模糊匹配,如下所示:Elasticsearch中的wildcard使用方式如下:通配符运算符是匹配一个或多个字符的占位符。 通配符支持两种:?:支持模糊匹配单个字符。举例:Ma?s仅能匹配:Mars,Mass,和Maps。:支持模糊匹配零个或者多个字符。举例:Ma*s能匹配:Mars,Matches和Massachusetts等。 2、全局视野——wildcard检索所处位置全局认知非常重要,检索核心类型大致(非严谨、精确)分为:精准匹配检索(Term-levelqueries)和基于分词的全文匹配检索(Fulltextqueries)。全文匹配检索细分如下:精准匹配检索细分如下:也就是:wildcard是和Term、Terms检索平级的检索。3、wildcard检索适用场景适用于:召回率要求高的业务场景。基于分词的全文检索,可能会导致明明存在,但是检索不到。可能的原因如下:原因1:基础词库不完备;原因2:分词粒度不精确。举个例子一看就明白了:前置说明:1、纯属举例,不涉及针对具

  • AI领域最有影响力100人!Hinton只排31、Bengio竟然没有上榜?

    大家好我是三金,今天又是开开心心的一天,如题目和上图所示,我今天在上班摸鱼的时候发现了这样一份号称是“AI领域最有影响力的100人”的榜单。这可把我给吓了一跳,我赶紧把这个榜单从头拉到尾然后又从尾拉到头,纳尼?三金我竟然没有上榜!这个榜单绝对不权威!不过后来想了一会儿我就原谅了这个榜单,因为幸好它没有把一直低调的我给暴露。既然来都来了,那不如都看看具体都有哪些大佬上榜了吧。可以看到,影响力排名前六位的分别是:埃隆.马斯克、OpenAI的CEOSamAltman、FacebookAI团队的负责人JeromePesenti、李开复、吴恩达、李飞飞。这六位确实都是大佬中的大佬啊,而且其中四位也都是大家再熟悉不过的面孔了,另外平心而论,OpenAI的GPT-3和DALL.E在最近一年来确实是刷爆了AI圈啊,影响力如日中天,这样来看这个榜单也不是很水?好吧,其实这个榜单是一个叫做“AINewsletter”的网站推出的,简单查了一下它大概是一个媒体性质的博客网站,在推特上也一直有在更新文章。以下是该网站对该榜单的说明。简单翻译过来大概是说:那些只从科幻小说中了解人工智能的人可能会对一篇由GPT-

  • JVM内存模型不再是秘密

    前言上篇文章我们一起了解了jvm虚拟机类的加载机制,而且是以一种纯大白话进行的一场闲聊,相信小伙伴们应该印象深刻,感兴趣的小伙伴可以重温一下上一篇文章大白话谈JVM的类加载机制。当jvm加载了类后,会把需要使用的对象放入到内存当中,那么jvm的内存模型是什么样的呢?今天我们就来探索一下jvm的内存模型。由于有小伙伴反映想加些图更容易理解,王子接下来的文章打算用更多的图例来讲解。方法区很多小伙伴之前也了解过jvm的内存模型,知道有方法区这个东西,但可能了解的不是很详细。其实方法区是在JDK1.8以前的版本里存在的一块内存区域,主要就是存放从class文件里加载进来的类的,而且常量池也是在这块区域内的。但是在JDK1.8之后,这块区域摇身一变,换了名字,叫做“Metaspace”,翻译过来就是“元数据空间”的意思。当然它只是改了个名,实现的功能是没变的。程序计数器假设我们的代码是这样的:publicclassMain{ publicstaticvoidmain(String[]args){ SysUsersysUser=newSysUser(); sysUser.setAvatar(&qu

  • 【科研猫·绘图】从网络图探寻基因互作的蛛丝马迹(2)

    前面一期从网络图探寻基因互作的蛛丝马迹(1)(此链接可入)中我们给大家讲解了网络图的构造,以及在文章当中构建网络图需要用到的两个资源:STRING数据库和Cytoscape软件。我们还给大家出了一个研究课题:如何从100多个差异表达的基因当中快速锁定重要的关键基因。这个课题的分析步骤分了如下几个步骤:1、从基因列表到蛋白互作;2、从蛋白互作到互作网络;3、从互作网络到关键基因。今天我们先来看第一步:如何从一堆基因构建一个蛋白互作网络。很多请公司做过类似分析的都知道,这是一个价值上千的分析项目,但是实际操作并不困难,分分钟就可以带大家搞定。不说闲话,直接上手。【温馨提示】倾情大放送,文末视频教程,手把手教学!Step1:准备基因列表这个基因列表的文件说白了就是一列基因,对于基因的数量我们略作要求,在50-300个左右(具体原因,上期跟大家说过了)。在我们的学习资料中,给大家准备了这个研究课题所需的资料,其中有一个差异基因的列表。有些同学可能不知道哪里领取资料,这里再跟大家说一下,学习资料见文末,找胖雨小姐姐。Step2:打开STRING数据库STRING数据库的网址:https://st

  • 力扣题目汇总(两数之和Ⅱ-输入有序数组,删除排序数组中的重复项,验证回文串)

    两数之和II-输入有序数组1.题目描述给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值index1和index2,其中index1必须小于index2。 说明: 返回的下标值(index1和index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入:numbers=[2,7,11,15],target=9 输出:[1,2] 解释:2与7之和等于目标数9。因此index1=1,index2=2。复制第一点:数有2个, 第二点:两个数的和为target 第三点:两个数可能会相同,相同两个数应为他是有序的索引一定会是连续的复制3.解题classSolution: deftwoSum(self,numbers:List[int],target:int)->List[int]: numbers_set=set(numbers)#去重减少执行时间 new_list=[] forainnumbers_set: iftarget-ainnumbers_set: b=target-a#判断这个值是否

  • 典型开源3D引擎分类比较

    常见的3D引擎有:Unreal、Quake、Lithtech、OGRE、Nebula、Irrlicht、Truevision3D...其中开源免费的有:OGRE、irrlicht、fly3d、NeoEngine、revolution3d、Nebula2、Genesis3d等。OGRE 在免费、开源的引擎中评价最高,一个原因是作为一个图形渲染引擎,它支持的图形特性最多,所以渲染质量也不错;另一个原因是设计模式的清晰;另外,速度也不错。OGRE 将专注于向一个纯粹的、然而富于协作和扩展性的图形引擎发展,这得益于它的庞大的社群支持,使得很多事情可以通过外挂一些更专业的引擎来实现,物理引擎使用 ODE 、 Tokamak 、 NovodeX ,网络引擎使用 openTNL 、 RakNet 、 eNet ,声音引擎使用 FMod 、 OpenAL ,以及界面引擎使用 CEGUI 。StandardOGREIrrLichtTruevision3DGeneralTypeOnlyrenderingengineGameengineIncludeTV3DEngine,TV3DMedia,TV3DNet…

  • 第二代谷歌AR眼镜企业版|已通过美国FCC认证,或将于2019年推出

    第二代谷歌眼镜企业版,不远了!第二代谷歌眼镜企业版,或将2019年推出 VRPinea在美国FCC官网上发现,型号为GG2(GoogleGlassEnterpriseEdition2)的设备已通过美国FCC认证(如下图)。 FCC公开的设备信息图 如图所示,新的A4R-GG2企业版看起来很像当前的A4R-GG1企业版——具有相同的按钮(设有类似的电源按钮配置)和眼镜铰链结构、允许设备折叠、内侧有徽标。遗憾的是,除上述这张草图之外,VRPinea在FCC列表中,并未发现更多有关该设备的实际信息。此外,从列表中可以看到,谷歌要求FCC对某些功能保密180天(如下图)。而据小编从列表中发现的,文件认证是当地时间11月13日开始的。这就意味着,我们在2019年应该能看到CG2,即第二代谷歌眼镜企业版。谷歌要求部分信息保密180天设备型号、认证时间等信息另外,有消息人士称,新款谷歌眼镜将主要在性能、电池寿命和其他核心功能方面有所突破。回首来时路, 谷歌AR眼镜的6年浮沉小编看到GG2(GoogleGlassEnterpriseEdition2)的专利信息,想到谷歌正式推出企业版AR眼镜已有一年多

  • 7张图了解 Spring Cloud 的整体构架!

    SpringCloud整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在这个Rest处理之中,一定要有两个端:服务的提供者(Provider)、服务的消费者(Consumer),所以对于整个SpringCloud基础的结构就如下所示。 SpringCloud基础架构既然SpringCloud的核心是Restful结构,那么如果要想更好的去使用Rest这些微服务还需要考虑如下几个问题。1、所有的微服务地址一定会非常的多,所以为了统一管理这些地址信息,也为了可以及时的告诉用户哪些服务不可用,所以应该准备一个分布式的注册中心,并且该注册中心应该支持有HA机制,为了高速并且方便进行所有服务的注册操作,在SpringCloud里面提供有一个Eureka的注册中心。微服务结构图2、对于整个的WEB端的构架(SpringBoot实现)可以轻松方便的进行WEB程序的编写,而后利用Nginx或Apache实现负载均衡处理,但是你WEB端出现了负载均衡,那么业务端呢?应该也提供有多个业务端进行负载均衡。那么这个时候就需要将所有需

  • pycharm打包exe文件「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。一、安装pyinstaller在Pycharm客户端上,File-Settings-Project:Python-ProjectInterpreter添加PyInstaller源。如图: 二、安装压缩软件upx下载地址:https://github.com/upx/upx/releases/tag/v3.93 解压到要转换到的py文件目录下三、创建.py文件fromPyInstaller.__main__importrun if__name__=='__main__': opts=[r'E:\workspace\Python\Learns\MyFrame.py',\ '-F','-w',r'--distpath=E:\workspace\Python\Learns',\ r'--workpath=E:\workspace\Python\Learns',\ r'--specpath=E:\workspace\Python

  • 为什么Adam 不是默认的优化算法?

    点击上方“DeephubImba”,关注公众号,好文章不错过! 由于训练时间短,越来越多人使用自适应梯度方法来训练他们的模型,例如Adam它已经成为许多深度学习框架的默认的优化算法。尽管训练结果优越,但Adam和其他自适应优化方法与随机梯度下降(SGD)相比,有时的效果并不好。这些方法在训练数据上表现良好,但在测试数据却差很多。最近,许多研究人员已经开始针对这个问题进行研究,尤其是我们最常用的Adam。本篇文章将试着理解一下这些研究结果。Adam收敛速度更快,但最终的结果却并不好!为了充分理解这一说法,我们先看一看ADAM和SGD的优化算法的利弊。传统的梯度下降是用于优化深度学习网络的最常见方法。该技术在1950年代首次提出,可以通过观察参数变化如何影响目标函数,选择一个降低错误率的方向来更新模型的每个参数,并且可以进行继续迭代,直到目标函数收敛到最小值。SGD是梯度下降的一种变体。SGD并不对整个数据集执行计算——而是只对随机选择的数据示例的一个小子集进行计算。在学习率较低的情况下,SGD的性能与常规梯度下降相同。Adam的优化方法根据对梯度的一阶和二阶的估计来计算不同参数的个体自适

  • 33个非常实用的JavaScript一行代码

    33个非常实用的JavaScript一行代码 一、日期处理 1.检察日期是否有效 该方法用于检测给出的日期是否有效: constisDateValid=(...val)=>!Number.isNaN(newDate(...val).valueOf()); isDateValid("December17,199503:24:00");//true 复制 2.计算两个日期之间的间隔 该方法用于计算两个日期之间的间隔时间: constdayDif=(date1,date2)=>Math.ceil(Math.abs(date1.getTime()-date2.getTime())/86400000) dayDif(newDate("2021-11-3"),newDate("2022-2-1"))//90 复制 距离过年还有90天~ 3.查找日期位于一年中的第几天 该方法用于检测给出的日期位于今年的第几天: constdayOfYear=(date)=>Math.floor((date-newDate(date.getFullYear(),0,0))/1000/60/60/

  • 2.5-AHB(数据总线)

    资料来源: (1)ambabusspec翻译.pdf (2) 字节序(byteorder)、比特序(bitorder)、MSB/LSB、大端模式/小端模式概念误混淆_光明磊的博客-CSDN博客_lsb和msb的区别 【未阅】 (3) 大小端模式_侵蚀昨天的博客-CSDN博客_大小端模式 【未阅】 6.数据总线 6.1数据总线 (1)数据总线分为读数据总线和写数据总线;推荐最小总线宽度是32; (2)HWDATA:写传输中,master驱动写数据总线;如果传输拓展,即不能及时完成,master必须保持数据有效直至传输完成;对于小于总线宽度的数据传输,如16比特数据在32位总线上传输,master只需要驱动合适的部分lane,不需要的宽度可以不管,slave选择正确的字节找到写数据; (3)HRDATA:合适的slave在读传输中驱动读数据总线;如果slave通过将HREADYOUT拉低拓展读传输,只需要在传输的最后一个周期提供有效数据;对于传输宽度小于总线宽度的情况,slave只需在激活的字节通道提供有效数据;slave只需要在传输完成回应OKAY

  • MFC CDialog/CDialogEx DoModal ALT

    Questions: I'musingMFCCDialog/CDialogExtoshowamodaldialogwithDoModal.usuallyitworkswithoutproblems,butsometimes,thedialogwontshowupuntilIpressALTkey.thescenariosis,Ihaveatimerintheparentwindow,anddoingsomeworkintheOnTimerfunction,iftheworktakestoomuchtime,say,longerthanthetimerinterval,thenDoModalwontshowthedialogwindow,untilALTkeypressed.I'vetracedtheproblemintoCWnd::RunModalLoop()functioninwincore.cppapparentlyitcanonlycallShowWindow()whenthemessageloopisempty,or,amessage0x118(WM_SYSTIMER)orWM

  • 产品功能被像素级抄袭了。我们拿什么来保护原创的产品设计?

    前言 大过节的,本来开开心心的在家写BUG,没想到一条群消息一下子让我感觉浑身发冷手脚冰凉。 产品的一项主要功能被人抄袭了,而且是那种从头到脚的抄袭。公司的老板还是一个有过几次联系,曾经说要给我投资的朋友。 这让我既感到痛心,又感到恶心,又感到庆幸。痛心的是,自己花费心血开发出的产品功能被那么轻松的复制;恶心的是,没想到还有这么没有底线的公司;庆幸的是,没有拿这个朋友的投资,不然还不知道是什么坑。 现如今,在一张图片、几个文字都被很好的保护的情况下,我们却没有什么好的办法保护一整套的界面和交互设计。作为一个苦逼的码农,一个独立开发者,一没钱二没资源,没有别的办法,只有吐槽一条路可走。 发这个贴子的目的,一是让大家见识一下这种没品的公司;二是作为一个自豪的原创声明(免得哪天被反咬一口);三是给大家一个警示,一定要保护好自己的原创设计。 正文 我开发的这款产品叫Quicker,是一个Windows端的效率工具,从开始做到现在快3年了。网址是https://getquicker.net 它主要包含两方面的功能,一方面是快速触发:通过鼠标、键盘、键盘+鼠标等多种方式快速触发某项操作。 另一方面

  • Spring+Vue+ElementUI的前后端分离开发项目中,前端向后端发送请求,后端返回错误:Cannot deserialize instance of `java.util.LinkedHashMap` out of START_ARRAY token

    问题描述:   Spring+Vue+ElementUI的前后端分离开发项目中,前端向后端发送请求,后端返回错误:Cannotdeserializeinstanceof`java.util.LinkedHashMap`outofSTART_ARRAYtoken。 前端代码: //获取分页数据 findPage:function(data){ if(data!==null){ this.pageRequest=data.pageRequest } this.pageRequest.params=[{name:'name',value:this.filters.name}];       this.$api.user.findPage(this.pageRequest).then((res)=>{ this.pageResult=res.data this.findUserRoles() }).then(data!=null?data.callback:'') }复制 后端代码: 分页请求参数Java类: packagecom.XXXXX.XXXXX.core.page;//包

  • 一致性哈希看这篇就够了!【转】

    尊重原创:转自刘梦馨:一致性哈希看这篇就够了 既然有一致性哈希,就肯定还有不一致哈希,为啥平时没人说不一致哈希呢?因为常见的哈希都是不一致的,所以就不修饰了,到了一致性哈希才特殊加个描述词修饰一下。哈希一般都是将一个大数字取模然后分散到不同的桶里,假设我们只有两个桶,有2、3、4、5四个数字,那么模2分桶的结果就是:这时候再添加一个新的桶,编号是4,取模方法不变还是模7:用一致性哈希还能实现部分的分布式系统无锁化,每个任务有自己的编号,由于哈希算法的确定性,分到哪个桶也是确定的就不存在争抢,也就不需要分布式锁了。既然一致性哈希有这么多好的特性,那为啥主流的哈希都是非一致的呢?主要一个原因在于查找效率上,普通的哈希查询一次哈希计算就可以找到对应的桶了,算法时间复杂度是O(1),而一致性哈希需要将排好序的桶组成一个链表,然后一路找下去,k个桶查询时间复杂度是O(k),所以通常情况下的哈希还是用不一致的实现。当然O(k)的时间复杂度对于哈希来说还是不能忍的,想一下都是O(k)这个量级了用哈希的意义在哪里?既然是在排好序的桶里查询,很自然的想法就是二分了,能把时间复杂度降到O(logk),

  • iptables 防火墙 只允许某IP访问某端口、访问特定网站

      iptables防火墙只允许某IP访问某端口、访问特定网站 1.先备份iptables/var/tmp 需要开80端口,指定IP和局域网 下面三行的意思: 先关闭所有的80端口 开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的80口 #iptables-IINPUT-s192.168.1.0/24-ptcp--dport80-jACCEPT #iptables #serviceiptablesrestart ===============以下是转载================================================ 以下是端口,先全部封再开某些的IP iptables-IINPUT-s192.168.1.0/24-ptcp--dport9889-jACCEPT 如果用了NAT转发记得配合以下才能生效 iptables-IFORWARD-s192.168.1.0/24-ptcp--dport80-jACCEPT 常用的iptables-IFilter-mmac--mac-source00

  • wsgiref实现多个URL的WEB服务器

    fromwsgiref.simple_serverimportmake_server#可以访问一个页面defxiaoxue(webenvirment,start_response):print('xiaoxuepage')#访问对于4应网页时,服务器后台打印的内容start_response("2000k",[('Content-Type','text/html;charset=utf-8')])#text类型不对时,浏览器返回的效果不同return[bytes('<h2>欢迎来到小学专区</h2>',encoding="utf-8")]defzhongxue(webenvirment,start_response):print('zhongxuepage')start_response("2000k",[('Content-Type','text/html;charset=utf-8')])#text类型不对时,浏览器返回的效果不同return[bytes('<h2style="font-size:70px">欢迎来到中学专区</h2>

  • postman中的x-www-form-urlencoded请求在jmeter中处理

    有时候,开发同学写的请求,格式不是常规的json或列表格式,这种请求在jmeter中请求时就需要做特殊设置 如:postman中的如下请求 那么在jmeter中请求时,需要在改请求下面单独加HTTP信息头管理器,里面增加 Content-type  值为application/x-www-form-urlencoded

  • MySQL日期函数之字符串和时间戳互转

    平时比较常用的时间、字符串、时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法;本文将作为一个笔记,整理一下三者之间的转换(即:date转字符串、date转时间戳、字符串转date、字符串转时间戳、时间戳转date,时间戳转字符串)用法,方便日后查看; 涉及的函数 date_format(date,format)函数,MySQL日期格式化函数date_format() unix_timestamp()函数 str_to_date(str,format)函数 from_unixtime(unix_timestamp,format)函数,MySQL时间戳格式化函数from_unixtime 时间转字符串 selectdate_format(now(),'%Y-%m-%d'); #结果:2016-01-05复制 时间转时间戳 selectunix_timestamp(now()); #结果:1452001082复制 字符串转时间 selectstr_to_date('2016-01-02','%Y-%m-%d%H'); #结果:2016-01-0200:0

  • JDBC连接数据库(Mysql):纯java驱动连接

    转载:C博客:独孤熊   1packagecom.upc.dao; 2 3importjava.sql.Connection; 4importjava.sql.DriverManager; 5importjava.sql.ResultSet; 6importjava.sql.SQLException; 7importjava.sql.Statement; 8 9publicclassBaseDao{ 10//JDBC连接数据库:纯java驱动方式 11//Statement对象,用来向数据库发送查询和命令,它由Connection的createStatement方法创建 12//Statement里面带有很多方法,比如executeUpdate可以实现插入,更新和删除等 13 14 15privatestaticfinalStringDataBaseName="数据库名称"; 16privatestaticfinalStringDRIVER="com.mysql.jdbc.Driver"; 17//URL编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称?

相关推荐

推荐阅读