Une page de mémo qui vérifie l'impact sur les performances lors de l'utilisation de volatile.
Qualificatif attaché au terrain. Pour les programmes multithread, le thread peut mettre en cache la valeur du champ. Si vous ajoutez volatile, vous pouvez l'exclure du cache. (Les détails sur le rôle de volatile sont omis sur cette page.)
** Spécifications de la machine ** CPU:Intel(R) Core(TM) i5-2400S CPU RAM:8GB Système d'exploitation: windows10 64 bits
** Environnement d'exécution ** Eclipse(2020-03 (4.15.0)) Java8
Mesurez le temps de traitement pour compter le champ de type int 100 millions de fois avec l'ajout de volatile.
private volatile int cnt = 0;
private long exe() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
this.cnt++;
}
long end = System.currentTimeMillis();
return end - start;
}
Mesuré avec le code ci-dessus 10 fois et obtenu la valeur moyenne.
résultat Valeur moyenne: 964ms
À partir du code ci-dessus, modifiez le champ en un formulaire qui n'utilise pas volatile.
private int cnt = 0;
De même, la mesure a été effectuée 10 fois et la valeur moyenne a été obtenue.
résultat Valeur moyenne: 7ms
Les performances seront pires lorsque volatile est utilisé, mais cela n'affectera pas dans la plupart des cas car il faut environ le temps ci-dessus pour compter jusqu'à 100 millions de fois.
Recommended Posts