`
wenshao
  • 浏览: 271677 次
  • 性别: 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
两种写法耗时几乎相同

相关推荐

    Java中System.getProperty的使用

    在Java编程语言中,`System.getProperty`方法是一个非常实用且重要的功能,用于获取与系统相关的属性信息。这些属性包括但不限于操作系统、Java运行环境版本、安装目录等关键信息,对于理解和调试程序运行环境有着不...

    高并发场景下 System.currentTimeMillis() 的性能问题

    在Java编程中,System.currentTimeMillis() 是一个常用的方法,用于获取当前时间戳,即自1970年1月1日(UTC/GMT的午夜)以来的毫秒数。然而,在处理大量并发请求时,这个方法可能不再是最佳选择,因为它的性能表现...

    Java中通过System.getProperties()获取系统参数测试.docx

    ### Java中通过System.getProperties()获取系统参数 在Java编程中,`System.getProperties()`是一个非常实用的方法,它允许开发者访问和获取当前Java运行环境的各种系统属性。这些属性包含了关于Java运行时环境的...

    java 中 System.out.println()和System.out.write()的区别

    Java 中 System.out.println() 和 System.out.write() 的区别 System.out.println() 和 System.out.write() 是 Java 中的两个基本输出函数,它们都可以用来将数据输出到控制台中,但是它们之间存在着一些重要的区别...

    Java I/O 标准输入输出流System.in

    在Java编程语言中,I/O(输入/输出)是程序与外部世界交互的重要部分,而标准输入输出流(System.in, System.out, System.err)是Java内置的预定义流,用于处理程序与操作系统之间的基本输入输出操作。这篇博客将深入...

    AndroidRom之system.img内容提取工具

    可用附件中的simg2img.exe来转化一下原始的system.img,然后再用其中的ext2Explorer来浏览提取system.img中的内容。 用法:1、将system.img改名为system.img.ext4。2、命令行cd到simg2img.exe目录下,执行命令“simg...

    (最终解决)java.lang.UnsatisfiedLinkError解决尝试

    在Java中,我们可以通过`System.loadLibrary("libraryName")`来加载本地库。这里的"libraryName"是库文件的名称(不包含后缀),例如在Linux或Mac系统上通常是`liblibraryName.so`,在Windows系统上则是`libraryName...

    System.Web.Extensions.dll

    Parser Error Message: Could not load file or assembly 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. 系统找不到指定的文件。 ...

    mysql-connector-java-5.1.40.tar.gz

    System.out.println("Connected to the database!"); // ... 执行SQL语句... } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 在这个例子中,`Class.forName(...

    The Java Module System.epub

    Java 11 includes a built-in modularity framework, and The Java Module System is your guide to discovering it. In this new book, you'll learn how the module system improves reliability and ...

    使用System.IO.Ports读取COM口数据

    在C#中,System.IO.Ports命名空间提供了SerialPort类,该类用于控制和管理串行通信端口。SerialPort类提供了多种属性和方法,用于配置串口、发送和接收数据。 SerialPort类的常用属性包括: * BaudRate:获取或...

    Java中System类.pdf

    Java中System类还提供了许多其他的方法和变量,例如,System.currentTimeMillis()方法可以获取当前时间的毫秒数,System.getProperty()方法可以获取系统的属性信息,等等。 在编程中,System类非常重要,很多应用...

    System.Data.SQLite.dll各版本

    System.Data.SQLite.dll是SQLite数据库引擎在.NET环境中的一个封装库,它使得.NET开发者可以方便地在应用程序中使用SQLite数据库。SQLite是一款开源、轻量级、自包含的SQL数据库引擎,适用于各种规模的应用程序,...

    SYSTEM.NEW.DAT解包工具(可解5.0-8.0系统)

    在Android系统中,`SYSTEM.NEW.DAT`是一个重要的系统文件,它包含了系统的各种核心组件、设置和应用程序。这个文件通常是经过打包处理的,以便于在设备上高效地存储和分发。本文将深入探讨`SYSTEM.NEW.DAT`的结构、...

    import java.io.*; public class FirstPart{ public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer.parseInt(br.re

    System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer.parseInt(br.readLine()); double c=5*(f-32); c=c/9; System.out....

    System.Data.SQLite.dll(sqlite_1.0.76.0.zip)

    2. **System.Data.SQLite_Doc**:这个文件可能是一个文档目录或者帮助文件,包含了关于如何在.NET项目中使用System.Data.SQLite.dll的详细指南、API参考、示例代码和最佳实践。对于开发者来说,它是理解和使用该库的...

    细聊java中的System.out.println()

    当我们看到# System.out.println()这行代码的时候,我相信很多人都会回答,这有什么好聊的?不就是一条打印语句吗? 那我问你一句,你如何理解System.out.println() 我相信大多数朋友都回答不出来他到底是个什么...

    java项目路径(相关信息)的取得

    本文将详细介绍如何利用`System.getProperty()`方法来获取Java项目的路径及相关信息,并对这些信息的具体含义进行深入解析。 #### `System.getProperty()`简介 `System.getProperty()`是Java提供的一个用于获取...

    System.Data.SQLite(32、64通用版本)

    4. **异步支持**:随着异步编程在.NET中的普及,System.Data.SQLite也提供了异步操作的API,如`ExecuteNonQueryAsync`、`ExecuteScalarAsync`等,以便在多线程或UI环境中避免阻塞主线程。 5. **事务管理**:支持...

Global site tag (gtag.js) - Google Analytics