【发布时间】:2022-02-04 11:31:59
【问题描述】:
我创建了一个过滤器来监控请求的长度。
long start = System.nanoTime();
...
long end = System.nanoTime();
我现在如何从中获取毫秒数?
【问题讨论】:
标签: java performance nanotime
我创建了一个过滤器来监控请求的长度。
long start = System.nanoTime();
...
long end = System.nanoTime();
我现在如何从中获取毫秒数?
【问题讨论】:
标签: java performance nanotime
(end - start) / 1000000
1 微秒 = 1000 纳秒
1 毫秒 = 1000 微秒
请注意,结果将被四舍五入,但您通常不会获得真正的纳秒精度(精度取决于操作系统)。来自nanoTime() 上的 Javadoc:
此方法提供纳秒级精度,但不提供 必须是纳秒级的精度。
【讨论】:
(end - start) / (double) 1000000(或者(end - start) / 1000000.,或者(end - start) / (float) 1000000,如果你想要浮动)
还请注意,您可以使用 TimeUnit 类来帮助进行转换。对于较旧版本的 Java,以下代码可能是将处理时间转换为其他时间格式的示例:
long startTime = System.nanoTime();
//Processing in-between.
long endTime = System.nanoTime();
long duration = endTime - startTime;
duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS);
请注意,较新版本的 Java 在 TimeUnit 类中有快捷方式。
上面的示例会将纳秒长转换为秒。另请注意,这会截断它,因此您确实会失去一些精度。因此,如果您切换到分钟,那么您将失去秒的精度。如果您想获得“12 分 32 秒”的结果,则必须使用此解决方案进行进一步处理。
【讨论】:
【讨论】:
只需减去它们并将结果除以 10^6。
1 纳秒是 10^-9 秒,相应地是 10^-6 毫秒。
http://en.wikipedia.org/wiki/Nano-
【讨论】:
【讨论】:
要获得有意义的结果:
void procedure ( ... )
{
...
}
double measureProcedure ( double epsilon , ... )
{
double mean ;
double stderr = 2 * epsilon ;
while ( stderr > epsilon )
{
long start = System.nanoTime();
procedure ( ... ) ;
long end = System.nanoTime();
// recalculate mean , stderr
}
return ( mean / 1000000 ) ;
}
【讨论】: