[Java] Code difficile à remarquer mais terriblement lent

Objectif

Au cours de l'examen, je suis tombé sur un code qui est un mélange d'Integer et d'int. Pendant un moment, j'ai pensé qu'il n'y aurait pas de problème car il serait converti par boxing automatique, mais je me demandais quelle était la performance, alors je voudrais le vérifier.

Environnement de vérification

Code source de vérification

** 1. Modèle avec un mélange de types de référence et de types primitifs **

qiita.java


long begin = 0L;
long end = 0L;

begin = System.currentTimeMillis();

Integer sum = 0;

for(int i = 0; i < 1000000; i++) {
	sum += i;
}

end = System.currentTimeMillis();

System.out.println(end - begin + "milliseconde");

** 2. Modèle de type primitif uniquement **

qiita.java


long begin = 0L;
long end = 0L;

begin = System.currentTimeMillis();

int sum = 0;

for(int i = 0; i < 1000000; i++) {
	sum += i;
}

end = System.currentTimeMillis();

System.out.println(end - begin + "milliseconde");

Procédure de mise en œuvre

--Effectuez un traitement d'ajout de 1 000 000 à l'aide du code source de vérification. Le temps moyen est calculé en mesurant chacune trois fois. Arrondissez la troisième fraction.

Résultats de la mise en œuvre

** 1. Modèle avec un mélange de types de référence et de types primitifs **

--Première fois: 15 millisecondes --Deuxième fois: 16 millisecondes --Troisième fois: 15 millisecondes --Moyenne: 15,33 millisecondes

** 2. Modèle de type primitif uniquement **

--Première fois: 5 millisecondes --Deuxième fois: 4 millisecondes --Troisième fois: 4 millisecondes --Moyenne: 4,33 millisecondes

Considération

Un modèle de type de référence mixte et de type primitif a duré en moyenne 15,33 millisecondes, tandis qu'un modèle de type primitif seulement a fait en moyenne 4,33 millisecondes. On peut voir que cela prend environ quatre fois plus de temps lorsque l'autoboxing fonctionne avec un mélange de types de référence et de types primitifs. Il s'avère qu'il ne devrait pas être auto-boxé sans signification, en fonction du nombre de données, qui est un tas de poussière.

A bientôt (^_^) Noshi

Recommended Posts

[Java] Code difficile à remarquer mais terriblement lent
[Java] Map # merge est difficile à comprendre.
Écrire du code difficile à tester
Code difficile à déboguer et à analyser
Écrire du code facile à maintenir (partie 1)
Écrire du code facile à maintenir (partie 4)
Écrire du code facile à maintenir (partie 3)
[Windows] Le code Java est déformé
Nouvelles fonctionnalités de Java 14 pouvant être utilisées pour écrire du code
Écrivons un code facile à maintenir (Partie 2) Nom
A vous qui regrettez que la conversion de JODConverter + LibreOffice soit lente
Pensez à un code de test facile à comprendre grâce au test de Comparator
[Introduction à Java] J'ai essayé de résumer les connaissances que j'estime essentielles
[Java: Memorandum] Jusqu'à ce que le code de saut de ligne CRLF soit changé en LF
3 points difficiles à gérer Java Realm
[Java] Flux du code source à l'exécution
Méthodes de classe Java String qui sont un peu utiles à connaître mais ne savent pas
Initialiser le tableau Ruby avec 0 comme Java, c'est-à-dire définir la valeur par défaut sur 0