[JAVA] Existe-t-il une différence de performances entre Oracle JDK et OpenJDK à la fin de 2017?

Dans le passé, de nombreux articles comparaient Oracle JDK et Open JDK. Même à ce moment-là, les deux étaient presque identiques, et "la différence entre les deux disparaîtra à l'avenir" Matériel (PDF) Il y avait aussi .pdf). De plus, dans le passé, il y avait un article comme celui-ci montrant la différence dans l'architecture du processeur, c'est-à-dire la différence de performances entre Intel et ARM. Et à la fin de 2017, Divers mouvements est sorti sous le nom d'Oracle JDK. Et dans l'OpenJDK.

Au fait, y a-t-il une différence de performances entre Oracle JDK et OpenJDK encore aujourd'hui?

Je vais le vérifier. Le code est ici. Une application d'API Rest avec Spring Boot qui CRUD (crée, parcourt, modifie, supprime) les données 1000 fois dans le code de test. Je vais mesurer Oracle OpenJDK 5 fois chacun et 10 fois pour le système. La version de JDK utilisée est 1.8.0_152, Oracle est ici, OpenJDK est ici ) Pour l'obtenir.

Mac Exécutez-le sur votre Mac pour commencer.

MacBook Pro (Retina, 13-inch, Late 2012)
Processeur 2.9 GHz Intel Core i7
Mémoire DDR3 de 8 Go à 1600 MHz

Extrait du journal. Azul Systems, Inc. est l'OpenJDK. Au total, c'est la moyenne du temps qu'il a fallu pour terminer tous les cas et du temps qu'il a fallu en avr pour terminer un CRUD. Comme il est exécuté dans plusieurs threads, la moyenne * 1000 ≠ le temps qu'il a fallu pour terminer tous les enregistrements.

# summary  :Oracle Corporation 1.8.0_152, total :  13093, avr :50.50707070707071
# summary  :Azul Systems, Inc. 1.8.0_152, total :  13219, avr :51.61749745676501
# summary  :Oracle Corporation 1.8.0_152, total :  14221, avr :55.51567239635996
# summary  :Azul Systems, Inc. 1.8.0_152, total :  14199, avr :55.383756345177666
# summary  :Oracle Corporation 1.8.0_152, total :  14041, avr :54.699195171026155
# summary  :Azul Systems, Inc. 1.8.0_152, total :  13726, avr :53.41538461538462
# summary  :Oracle Corporation 1.8.0_152, total :  14385, avr :56.066869300911854
# summary  :Azul Systems, Inc. 1.8.0_152, total :  12657, avr :49.50912778904665
# summary  :Oracle Corporation 1.8.0_152, total :  14370, avr :55.76200204290092
# summary  :Azul Systems, Inc. 1.8.0_152, total :  14021, avr :54.15415821501014

Oh, je ne vois aucune différence significative.

Linux x64 J'ai démarré CentOS avec Virtual Box sur le Mac ci-dessus et l'ai exécuté avec CPU 2, Mem 2048.

# summary  :Oracle Corporation 1.8.0_152, total :  27041, avr :53.996
# summary  :Azul Systems, Inc. 1.8.0_152, total :  28390, avr :56.06406406406406
# summary  :Oracle Corporation 1.8.0_152, total :  27767, avr :54.964
# summary  :Azul Systems, Inc. 1.8.0_152, total :  27635, avr :54.878
# summary  :Oracle Corporation 1.8.0_152, total :  30113, avr :59.563
# summary  :Azul Systems, Inc. 1.8.0_152, total :  26138, avr :51.66466466466466
# summary  :Oracle Corporation 1.8.0_152, total :  28239, avr :55.88
# summary  :Azul Systems, Inc. 1.8.0_152, total :  27637, avr :55.074
# summary  :Oracle Corporation 1.8.0_152, total :  28477, avr :56.231
# summary  :Azul Systems, Inc. 1.8.0_152, total :  27685, avr :54.856

De même, aucune différence significative n'est trouvée.

Windows x64 Je l'ai également essayé sur Windows 10 sur Mac.

# summary  :Oracle Corporation 1.8.0_152, total :  88932, avr :170.171
# summary  :Azul Systems, Inc. 1.8.0_152, total : 104348, avr :207.67
# summary  :Oracle Corporation 1.8.0_152, total :  89635, avr :179.223
# summary  :Azul Systems, Inc. 1.8.0_152, total :  92882, avr :179.815
# summary  :Oracle Corporation 1.8.0_152, total :  84967, avr :165.057
# summary  :Azul Systems, Inc. 1.8.0_152, total :  96394, avr :191.677
# summary  :Oracle Corporation 1.8.0_152, total :  87724, avr :174.424
# summary  :Azul Systems, Inc. 1.8.0_152, total :  83325, avr :164.012
# summary  :Oracle Corporation 1.8.0_152, total :  89018, avr :169.627
# summary  :Azul Systems, Inc. 1.8.0_152, total :  87105, avr :170.365

Il semble qu'il n'y ait pas de différence significative.

Linux ARM 32 Je l'ai exécuté sur Raspberry Pi2 B.

# summary  :Oracle Corporation 1.8.0_152, total :  87153, avr :345.167
# summary  :Azul Systems, Inc. 1.8.0_152, total :  98166, avr :389.905
# summary  :Oracle Corporation 1.8.0_152, total :  86835, avr :345.236
# summary  :Azul Systems, Inc. 1.8.0_152, total : 101888, avr :405.66166166166164
# summary  :Oracle Corporation 1.8.0_152, total :  85945, avr :342.2522522522523
# summary  :Azul Systems, Inc. 1.8.0_152, total :  97561, avr :385.345
# summary  :Oracle Corporation 1.8.0_152, total :  87837, avr :345.8416833667335
# summary  :Azul Systems, Inc. 1.8.0_152, total :  97551, avr :385.878
# summary  :Oracle Corporation 1.8.0_152, total :  86338, avr :343.878
# summary  :Azul Systems, Inc. 1.8.0_152, total :  96303, avr :383.2995991983968

Oh! Il y a une différence: environ 10% plus rapide avec le JDK Oracke!

Linux ARM 64 Je l'ai essayé sur un ordinateur monocarte ARM appelé PINE64.

# summary  :Oracle Corporation 1.8.0_152, total : 125477, avr :500.5605605605606
# summary  :Azul Systems, Inc. 1.8.0_152, total :  67825, avr :267.8199195171026
# summary  :Oracle Corporation 1.8.0_152, total : 123450, avr :492.10854271356783
# summary  :Azul Systems, Inc. 1.8.0_152, total :  69810, avr :275.91691691691693
# summary  :Oracle Corporation 1.8.0_152, total : 129602, avr :517.0773092369478
# summary  :Azul Systems, Inc. 1.8.0_152, total :  67636, avr :265.72754793138245
# summary  :Oracle Corporation 1.8.0_152, total : 125981, avr :501.3711133400201
# summary  :Azul Systems, Inc. 1.8.0_152, total :  71870, avr :283.9637826961771
# summary  :Oracle Corporation 1.8.0_152, total : 127799, avr :507.6098294884654
# summary  :Azul Systems, Inc. 1.8.0_152, total :  69773, avr :275.34375

ohhhhhhhh! Il y a une différence considérable! OpenJDK est environ 40% plus rapide! C'est incroyable.

Résumé

À la fin de 2017, il n'y avait pas de différence de performances significative entre Mac, Linux et Windows sur Intel. Cependant, une différence a été observée sur ARM, et le résultat était qu'OpenJDK avait 40% de meilleures performances, en particulier sur 64 bits. Désormais, il est hautement concevable que ARM, qui est supérieur à l'économie d'énergie, soit utilisé pour les applications serveur. Si vous utilisez OpenJDK à ce moment-là, vous pouvez réduire considérablement le nombre de serveurs, ce qui peut être un avantage en termes de coût. De plus, comme il n'y a pas de différence de performances entre les JDK pour chaque environnement, n'est-il pas possible d'utiliser OpenJDK pour le développement? Comment c'est? À ce stade, essayez d'utiliser OpenJDK pour l'environnement de développement, l'environnement de production et tous les environnements d'exécution Java!

Recommended Posts

Existe-t-il une différence de performances entre Oracle JDK et OpenJDK à la fin de 2017?
Quelle est la différence entre un serveur Web et un serveur d'applications?
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Quelle est la différence entre System Spec et Feature Spec?
[Rails] Quelle est la différence entre la redirection et le rendu?
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Quelle est la différence entre ignorer et en attente? [RSpec]
Comprenez en 3 minutes! Une explication très approximative de la différence entre session et cookie
[Rails] Quelle est la différence entre l'installation et la mise à jour du bundle?
Quelle est la différence entre une action et une méthode d'instance?
Pourquoi insérer un saut de ligne à la fin du fichier
Quelle est la différence entre les responsabilités de la couche domaine et de la couche application dans l’architecture onion [DDD]
Ceci et cela de JDK
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
[Rails] Différence de comportement entre delegate et has_many-through dans le cas de one-to-one-to-many
Le contenu de la valeur de retour de executeBatch est différent entre 11g et 12c
Il y a un programmeur copier / coller - regardez quelqu'un et regardez-moi
Ayons une idée approximative des différences entre protocoles, classes et structures!
Un regard sur Jenkins, OpenJDK 8 et Java 11
Existe-t-il une version numérique de include?
Différence entre isEmpty et isBlank de StringUtils
À propos de la différence entre irb et pry
Trouvez la différence à partir d'un multiple de 10
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
[Oracle Cloud] Installez le JDK 11 (LTS) gratuit d'Oracle sur une instance virtuelle d'OCI
Expliquons la différence entre l'interpréteur et le compilateur en utilisant le diagramme de Ben
Indique combien d'années et de mois la différence par rapport à une date spécifique est
[Java] Comprendre la différence entre List et Set
Vérifiez la version de JDK installée et la version de JDK activée
[Rails / Active Record] À propos de la différence entre créer et créer!
Comprenez la différence entre les classes abstraites et les interfaces!
Différence entre le membre et la collection de rails routes.rb
La fin de la programmation catastrophique # 03 "Comparaison d'entiers, si" a> b ", supposons que c'est" a --b> 0 ""
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Rails] J'ai étudié la différence entre les ressources et les ressources
La comparaison d'énumération est ==, et equals est bonne [Java]
Différences entre les classes et les instances dans Ruby
Calculer la différence entre les nombres dans un tableau Ruby
Le comportement est différent entre new et clear () de ArrayList
Comparez la différence entre dockerfile avant et après docker-slim
Vérification de la relation entre l'image Docker et le conteneur
[Swift] UITextField m'a appris la différence entre nil et ""
Je vais expliquer la différence entre le développement d'applications Android et le développement d'applications iOS du point de vue des ingénieurs iOS
Maintenant dans la troisième année, le malentendu que j'ai remarqué est la différence entre la méthode equals et ==