`
wenshao
  • 浏览: 269459 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java中的System.nano()很慢

阅读更多
System.nano()调用耗时450 nano,超级慢,比new Object()的操作慢100倍。比System.currentMillis()慢20多倍。

经一群无聊好事者查证,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();
}
分享到:
评论
6 楼 Aimiyooo 2015-11-27  
linux环境下差不多啊,我的100万nano调用是0.061s,currentTimeMillis是0.068s
5 楼 mercyblitz 2010-12-22  
可能会有一点影响,不过这个值几乎可以忽略,在性能比较的时候。

4 楼 czwlucky 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
3 楼 wenshao 2010-12-03  
在WinXP 32bit JVM下-client两种写法耗时是不一样,在linux 64bit JVM下,耗时是一样的。
2 楼 抛出异常的爱 2010-12-03  
Zahir 写道
请问这两种写法有何本质的区别吗?
mac os 10.6
两种写法耗时几乎相同

加上 java -server xxxxxx 再试
1 楼 Zahir 2010-12-03  
请问这两种写法有何本质的区别吗?
mac os 10.6
两种写法耗时几乎相同

相关推荐

Global site tag (gtag.js) - Google Analytics