浏览 2266 次
锁定老帖子 主题:Java中的System.nano()很慢
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-02
最后修改:2010-12-02
经一群无聊好事者查证,System.nanoTime()在linux下的实现,最终调用clock_gettime系统函数。 100万次调用耗时,java语言中System.nanoTime()和C语言中的clock_gettime()调用时间基本一致,所以System.nanoTime()慢的原因就是系统调用clock_gettime。 无聊好事者请注意,自行测试System.nanoTime()性能时,要这样写: for (int i = 0; i < 1000 * 1000; ++i) { long v = System.nanoTime(); } 而不能这样写: for (int i = 0; i < 1000 * 1000; ++i) { System.nanoTime(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-03
请问这两种写法有何本质的区别吗?
mac os 10.6 两种写法耗时几乎相同 |
|
返回顶楼 | |
发表时间:2010-12-03
Zahir 写道 请问这两种写法有何本质的区别吗?
mac os 10.6 两种写法耗时几乎相同 加上 java -server xxxxxx 再试 |
|
返回顶楼 | |
发表时间:2010-12-03
在WinXP 32bit JVM下-client两种写法耗时是不一样,在linux 64bit JVM下,耗时是一样的。
|
|
返回顶楼 | |
发表时间:2010-12-22
最后修改:2010-12-22
WindowXP 32bit
public class NanoTimeTest { public static void main(String [] args) { test1(); test2(); } static void test1() { long time = System.currentTimeMillis(); for(int i=0; i < 1000 * 1000; ++i) { System.nanoTime(); } System.out.println("test1:" + (System.currentTimeMillis() - time)); } static void test2() { long time = System.currentTimeMillis(); for(int i=0; i < 1000 * 1000; ++i) { long v = System.nanoTime(); } System.out.println("test2:" + (System.currentTimeMillis() - time)); } } F:\Java2>java -server NanoTimeTest test1:500 test2:500 F:\Java2>java -client NanoTimeTest test1:16 test2:484 |
|
返回顶楼 | |
发表时间:2010-12-22
可能会有一点影响,不过这个值几乎可以忽略,在性能比较的时候。
|
|
返回顶楼 | |