繁体   English   中英

什么更快? System.currentTimeMillis()或Date()。getTime()?

[英]What is faster? System.currentTimeMillis() or Date().getTime()?

什么是更快的方法?

System.currentTimeMillis() 

要么

new Date().getTime()?

知道经过的时间有更快的解决方案吗?

如果你这样做

new Date()

它叫

/**
 * Allocates a <code>Date</code> object and initializes it so that
 * it represents the time at which it was allocated, measured to the
 * nearest millisecond.
 *
 * @see     java.lang.System#currentTimeMillis()
 */
public Date() {
    this(System.currentTimeMillis());
}

所以它调用System.currentTimeMillis()并创建一个立即丢弃的对象。

如果你很幸运,逃逸分析将删除冗余对象,性能将大致相同。

但是,我不认为Escape Analysis会启动并且只是打电话

long start = System.currentTimeMillis();
// do something
long time = System.currentTimeMillis() - start;

笔记:

  • 对象创建很快,即使它是多余的,Date对象也很小而且很便宜。 但是它会导致a)系统中的对象数量和b)测试中的一般噪声(如果您尝试对其进行内存分析)。 要减少变化(并加快代码速度),您需要减少内存分配,尤其是冗余分配。
  • 这只能精确到1毫秒,如果你的系统在运行时纠正时间,它可能是不正确的(甚至是负数)但是,它很少以戏剧性的方式做到这一点,而是逐渐纠正时钟意味着时间可能会出来一小部分。 鉴于由于系统上发生的其他事情导致的时间变化,如果这是您最大的问题,那么您将非常幸运。
  • 可以使用System.nanoTime()代替,但这可能会有它自己的漂移。 在较长的时间段内,例如小时,System.currentTimeMillis()可以更准确。
  • 如果您正在尝试编写微基准测试,我会确保代码预热。 即忽略前2-10秒,因为在这个阶段代码很可能不温暖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM