首页 > 编程知识 正文

system summary(timeinsystem)

时间:2023-05-06 08:17:14 阅读:75984 作者:2687

许多同学需要在项目中打印代码的执行时间,但我们的代码一般如下

但你真的知道当你的系统是高并发应用要求的极限QPS时,这种方式会危害你的系统吗?

HotSpot源代码的hotspot/src/OS/Linux/VM/OS _ Linux.CPP文件包含javaTimeMillis ()的方法。 这就是System.currentTimeMillis ) )中的javaTimeMillis )

要调用gettimeofday (,必须从用户状态切换到内核状态。 day () )的gettime表达受Linux系统计时器) )的影响,在HPET计时器中性能尤其差; 系统只有一个全局时钟源,高并发访问和频繁访问可能会引起严重冲突。

如果只是为了解决日志打印时间问题而获取时间,则时间的完美精度并不是很高,因此误差1-2ms是可接受的,因此解决方案可以使用APP应用程序内部的虚拟时钟来获取时间,从而消除了频繁调用基本机器时间的需要

虚拟时钟代码如下。 /** * pTitle:获取本地计算机时间/p * pDescription: * 1.带时钟缓存* 2.精度会部分丢失,但性能非常好,适用于记录场景,相对于精度@ author Qiqi * @ date */publicfinalclasssystemlocaltime { privatestaticfinalsystemlocaltimemillis _ clocal private stic long 私有静态动态长整型; 隐私系统全局时间(long precision ) { this.precision=precision; now=newatomiclong (system.current time millis (); scheduleClockUpdating (; } publicstaticsystemlocaltimemillisclock ((return millis _ clock; } privatevoidscheduleclockupdating ((scheduledexecutorservicescheduler=executors.newsinglethreadschedulededexecutor ) rururer 返回线索; ); scheduler.scheduleAtFixedRate ()-now.set ) system.currenttimemillis )、precision、precision、time unit.millit } pplis }调用代码如下。

性能比较包括: publicstaticvoidmain (字符串[ ] args ) throwsinterruptedexception (int maxcount=3000 * 10 * 10; long start=system.current time millis (; for(intI=0; i maxCount; I ) { System.currentTimeMillis (; } system.out.println (machinetimeis : ) ) system.current time millis (-start ); long start1=system.current time millis (; for(intI=0; i maxCount; I ) { SystemLocalTime.millisClock ().now ); } system.out.println (local time is : ) (system.current time millis (-start1) ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。