You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Bryan Pendleton (JIRA)" <ji...@apache.org> on 2009/12/04 23:21:20 UTC

[jira] Created: (DERBY-4462) Use System.nanoTime on JDK 1.5 and higher to get finer precision internal measurements

Use System.nanoTime on JDK 1.5 and higher to get finer precision internal measurements
--------------------------------------------------------------------------------------

                 Key: DERBY-4462
                 URL: https://issues.apache.org/jira/browse/DERBY-4462
             Project: Derby
          Issue Type: Improvement
          Components: SQL
            Reporter: Bryan Pendleton
            Priority: Minor


Derby uses System.currentTimeMillis() to compute the internal elapsed time of certain operations.
For example, the parseTime, bindTime, optimizeTime, generateTime, and compileTime measurements
that are computed by GenericStatement.prepMinion use this technique.

System.currentTimeMillis is not terribly accurate, since it is only updated 60 times a second; this
means that it doesn't give very good information about operations that take less than 16 milliseconds,
and the compilation time of a SQL statement is often shorter than that.

As Knut Anders observes, we could use System.nanoTime, which is available in JDK 1.5 and above,
to make more precise measurements.

See DERBY-4297 for some related observations.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (DERBY-4462) Use System.nanoTime on JDK 1.5 and higher to get finer precision internal measurements

Posted by "Kristian Waagan (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/DERBY-4462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12786401#action_12786401 ] 

Kristian Waagan commented on DERBY-4462:
----------------------------------------

Hi Bryan,

I know measuring elapsed time is not always as simple as one would like, and I have some comments.

Regarding System.currentTimeMillis, I think the resolution ("update rate") depends on the OS (and to some degree the hardware).
For instance, a rule of thumb for clock resolution used to be up to ~15 ms for Windows, 10 ms for Linux 2.4 and 1 ms for Linux 2.6. I checked the resolution on a Core 2 Quad system running Windows Vista, and it gave me 1 ms. So it seems the situation is improving at least on some platforms. 

Switching to System.nanoTime is a good move. One should realize that it doesn't provide any guarantees that the resolution is better than for System.currentTimeMillis, but in practice I believe the former provides a higher resolution than the latter on modern systems.
Also, System.nanoTime is defined in relative terms, whereas System.currentTimeMillis is defined in absolute terms. Values from the two cannot be used together (i.e. System.currentTimeMillis()  - (System.nanoTime() / 1000000) is not valid), and values from System.nanoTime cannot be used across JVM boundaries.

> Use System.nanoTime on JDK 1.5 and higher to get finer precision internal measurements
> --------------------------------------------------------------------------------------
>
>                 Key: DERBY-4462
>                 URL: https://issues.apache.org/jira/browse/DERBY-4462
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Bryan Pendleton
>            Priority: Minor
>
> Derby uses System.currentTimeMillis() to compute the internal elapsed time of certain operations.
> For example, the parseTime, bindTime, optimizeTime, generateTime, and compileTime measurements
> that are computed by GenericStatement.prepMinion use this technique.
> System.currentTimeMillis is not terribly accurate, since it is only updated 60 times a second; this
> means that it doesn't give very good information about operations that take less than 16 milliseconds,
> and the compilation time of a SQL statement is often shorter than that.
> As Knut Anders observes, we could use System.nanoTime, which is available in JDK 1.5 and above,
> to make more precise measurements.
> See DERBY-4297 for some related observations.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.