Fra*_*ner 0 java performance time java-8
我有不同的理由提出这个问题.
如果我测量时间,System.currentTimeMillis()我该如何解释1ms?多少个方法调用,多少个sysout,多少个HashMap#推送.
我完全清楚这个问题的科学标准很低,但是我想为java操作设置一些默认值.
编辑:
我在说:
long t1 = System.currentTimeMillis();
//do random stuff
System.out.println(System.currentTimeMillis()-t1);
Run Code Online (Sandbox Code Playgroud)
在JSR 310:基于的日期和时间API中切换到微秒的决定是什么?
现代硬件已有相当长一段时间的微秒精度时钟; 并且它对JSR 310来说并不陌生.考虑一下TimeUnit,它出现在1.5(以及System.nanoTime()见下文)并且有一个MICROSECONDS值.
如果我测量时间,
System.currentTimeMillis()我该如何解释1ms?
与硬件时钟/ OS原始组合允许的一样准确.总会有一些偏差.但除非你实时"真实"(并且你不应该在这种情况下做Java),否则你可能永远不会注意到.
另请注意,此方法测量自纪元以来的毫秒数,并且它取决于时钟调整.这是不同的System.nanoTime(),它依赖于一个永远不会随着时间"减少"的机载刻度计数器.
FWIW,Timer{,Task}使用System.currentTimeMillis()测量时间,而较新的ScheduledThreadPool用途System.nanoTime().
至于:
多少个方法调用,多少个sysouts,多少个HashMap#推送(在1毫秒内)
无法分辨!方法调用取决于什么方法,sysout取决于stdout的速度(在9600波特串口上尝试和sysout),推送取决于内存总线速度/ CPU缓存等; 你真的不希望得到准确的答案,是吗?