Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Module : java.base - Package : java.lang - Classe : System
Version documentée : Java SE 17

Méthode « System.nanoTime »

Signature

public static native long nanoTime();

Description

Renvoie le temps interne de la JVM, exprimé en nanosecondes (10e-9). Mais attention, la précision de la valeur calculée dépend du matériel sous-jacent utilisé (fréquence du processeur, ...) : même si la valeur calculée est exprimée en nanoseconde, elle peut être arrondie. De plus, contrairement à System.currentTimeMillis(), l'origine de temps d'une JVM à une autre peut-être différente. Ce temps d'origine peut, de plus, être négatif.

En conséquence, vous ne pouvez donc utiliser cette méthode pour représenter un instant précis. Par contre cette méthode peut être très utile pour réaliser des mesures de performance d'un code ou, plus généralement, des mesures d'intervalles de temps.

la précision de la méthode System.nanoTime() est au moins aussi bonne que celle de la méthode System.currentTimeMillis().

Paramètres

Cette méthode n'accepte aucun paramètre.

Valeur de retour

La valeur de retour est de type long. Elle représente le temps interne de la JVM, exprimé en nanosecondes (10e-9).

Exemple de code

Voici un exemple d'utilisation de la méthode System.nanoTime() : on cherche à mesurer le temps pris par un appel à la méthode Math.sin().

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
package fr.koor.sample;

public interface Sample {
    
    public static void main( String[] args ) {
        
        // On prend une mesure de temps avant.
        long begin = System.nanoTime();
        
        // On lance le traitement à chronométrer.
        Math.sin( Math.PI );
        
        // On prend une mesure de temps après.
        long end = System.nanoTime();
        
        // On calcule la durée d'exécution totale.
        long duration = end - begin;
        System.out.printf( "Math.sin() duration is %d nanoseconds\n", duration );
        System.out.printf( "Math.sin() duration is %f microseconds\n", duration / 1_000.0 );
        System.out.printf( "Math.sin() duration is %f milliseconds\n", duration / 1_000_000.0 );
        System.out.printf( "Math.sin() duration is %f seconds\n", duration / 1e9 );
        
    }
    
}
Exemple d'utilisation de la méthode System.currentTimeMillis()

Et voici les résultats produits par cet exemple de code.

Math.sin() duration is 13181 nanoseconds
Math.sin() duration is 13,181000 microseconds
Math.sin() duration is 0,013181 milliseconds
Math.sin() duration is 0,000013 seconds
bien entendu, le temps calculé dépend de la puissance de calcul de votre machine. De plus, comme votre ordinateur partage ses ressources (et notamment ses threads) entre plusieurs processus, le temps peut légèrement varier d'une exécution à une autre. Par exemple, si autre programme s'active durant l'exécution de votre programme, il consommera lui aussi des ressources et pourra donc ralentir l'exécution de celui et cours de profilage.

Disponible depuis

1.5

Voir aussi

La méthode System.currentTimeMillis()