[JAVA] L'histoire selon laquelle les performances de traitement d'ARM d'Open JDK étaient faibles

L'histoire selon laquelle les performances de traitement d'ARM d'Open JDK étaient faibles

Lorsque j'ai utilisé la version ARM d'Open JDK, la vitesse de traitement était plus lente que la version Intel, donc Décrivez le contenu de l'enquête à ce moment-là et les sites auxquels il est fait référence.

Qu'est-ce que JDK (Java Development Environment)?

Package de développement pour Java. En plus de JRE (Java Runtime Environment: environnement pour l'exécution de programmes pour Java) Contient un logiciel de développement tel que la compilation pour Java.

Vers JRE JVM (Java Virtual Machine: un environnement virtuel qui exécute des programmes Java) et Contient l'API (interface d'application) pour Java.

http://qiita.com/chkkchy/items/3a4594645b3aef7a98b7

Oracle JDK JDK développé par Oracle. Il y a des frais pour une utilisation commerciale.

A. CARACTÉRISTIQUES COMMERCIALES. Est décrit dans la colonne ↓ http://www.oracle.com/technetwork/java/javase/terms/license/index.html

Open JDK Une version open source du JDK dans laquelle des sociétés autres qu'Oracle participent également au développement.

Après JDK7, Open JDK et Oracle JDK sont fondamentalement identiques. Il n'y a pas de différence particulière tant qu'elle est programmée normalement.

Open JDK a-t-il de faibles performances de traitement lorsque le processeur est ARM?

Selon le site ci-dessous, l'Open JDK n'est pas optimisé pour ARM, Il existe une description indiquant que les performances de traitement sont inférieures à celles du JDK Oracle.

https://blogs.oracle.com/jtc/entry/comparing_arm_linux_jvms_revisited

Comparaison des opérations

Lorsque le programme Java a été exécuté avec Open JDK et Oracle JDK dans l'environnement ARM sur la machine réelle, les résultats suivants ont été obtenus.

Possibilité de ralentissement dû à la suppression du cache de code

Étant donné que la taille du cache de code de Java (zone de stockage temporaire du code compilé) est petite par défaut, les fonctions Java supprimeront le cache de code lorsque la limite supérieure est dépassée. Il semble y avoir un phénomène selon lequel le traitement devient lent car il se compile à chaque fois.

http://blog.cybozu.io/entry/2016/04/13/080000

La compilation elle-même n'est-elle pas en cours d'exécution?

Lorsque j'ai vérifié l'état de la compilation avec la commande jstat, Avec l'Open JDK, il n'était pas du tout compilé.

*Afficher les tâches compilées JIT cumulées
jstat -compiler ${JAVA_PID}Intervalle d'affichage(milliseconde)

*Afficher les méthodes compilées JIT
jstat --printcompilation ${JAVA_PID}Intervalle d'affichage(milliseconde)

https://docs.oracle.com/javase/jp/6/technotes/tools/share/jstat.html

Sur le site suivant, il est indiqué que le délai de traitement a été amélioré en désactivant la fonction de suppression du cache de code dans l'option de démarrage Java pour ce qui suit.

Dans mon environnement, même si les mesures ci-dessus ont été prises, l'état de non-compilation a continué.

http://blog.cybozu.io/entry/2016/04/13/080000

*Affiche la valeur initiale des options Java et si la mise en cache du code est activée, spécifiez des options pour désactiver la suppression du cache de code
java -XX:+PrintFlagsFinal -version

*Désactiver la suppression du cache de code
-XX:-UseCodeCacheFlushing

Je ne sais pas pourquoi, mais certaines options Java sont spécifiques à un processeur particulier, Est-il possible que l'option ait affecté la version ARM de sorte qu'elle ne soit pas compilée en premier lieu?

référence

Recommended Posts

L'histoire selon laquelle les performances de traitement d'ARM d'Open JDK étaient faibles
Ceci et cela de JDK
[Spring Boot] L'histoire selon laquelle le bean de la classe avec l'annotation ConfigurationProperties n'a pas été trouvé
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
L'histoire selon laquelle la sortie standard change également fatalement le comportement du programme
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
Une histoire à laquelle j'étais accro à deux reprises avec le paramètre de démarrage automatique de Tomcat 8 sur CentOS 8
[Édition Java] Histoire de la sérialisation
L'histoire de @ViewScoped dévore la mémoire
Ordre de traitement dans le programme
Un mémo sobrement accro à la demande de multipart / form-data
[Java] L'histoire selon laquelle le tableau attendu n'a pas été obtenu par la méthode String.split.