我希望通过对返回时间戳的函数的多次调用来获得微小的性能提升。该函数如下所示:
public static long get_now_ms(){
// returns number of MILLISECONDS since epoch
java.util.Date d = new java.util.Date();
return d.getTime();
}
我可以将其替换为:
public static long get_now_ms(){
// returns number of MILLISECONDS since epoch
return System.currentTimeMillis();
}
我知道Date内部使用System.currentTimeMillis()。我的问题是,夏令时或时区是否会导致这两种方法的结果出现差异。我想这可能会出现Calendar对象,但不是Date对象,但是我想对此有所澄清。
我知道我可能不会在实际应用程序中看到明显的性能差异,但仍然想知道答案。
谢谢!
答案 0 :(得分:11)
没有区别,除了分配Date对象造成的非常轻微的延迟。
javadoc Date
的默认构造函数:
分配一个Date对象并对其进行初始化,使其表示分配时间,测量精确到毫秒。
Date
只是一个时间毫秒的薄包装,没有任何时区概念。只有在渲染到String时才会考虑时区,但这是由Locale
类处理的。
答案 1 :(得分:3)
我建议进行单元测试(例如https://gist.github.com/ledlogic/8532028)。我看到运行System.currentTimeMillis与(new Date())。getTime()只有一点点整体好处。
1 billion runs: (1000 outer loops, 1,000,000 inner loops):
System.currentTimeMillis(): 14.353 seconds
(new Date()).getTime(): 16.668 seconds
根据您的系统活动,个别运行有时会略微偏向后一种方法。
答案 2 :(得分:2)
没有区别,Calendar.getTimeInMillis()也是一样的。因为返回结果是自1970年1月1日00:00:00 GMT以来的毫秒数。无论你到底是什么,你都会获得相同的长期价值。