J'ai une ancienne application écrite en utilisant Java 7. Elle fonctionne bien dans un Java 8 JRE. Je ne prévois pas de réécrire le code pour utiliser les fonctionnalités de Java 8. Y a-t-il un avantage technique à mettre à niveau le code compilé vers le dernier JDK Java 8?
Pour être clair, le code est actuellement compilé avec Java 7 et déjà exécuté avec le dernier JRE Java 8. Il devrait déjà bénéficier des améliorations d'exécution de Java 8. Cette question est de savoir si des avantages seraient obtenus en compilant avec la version 8 et en exécutant avec le code d'octet compilé Java 8.
En outre, je ne suis pas préoccupé par les avantages non techniques tels que la productivité des développeurs. Je pense que ceux-ci sont importants, mais ce n'est pas le but de cette question. Je demande par souci de code de production qui n'a PAS d'équipe de développement. Il est purement en mode maintenance.
la source
Réponses:
Si je comprends bien la question, vous voulez savoir si le bytecode produit par
javac
sera "meilleur" dans Java 8 que dans Java 7.La réponse est probablement non, ils corrigent constamment des bogues dans le compilateur et cela conduit parfois à un bytecode plus efficace. Mais vous ne verrez aucune accélération significative de ces correctifs pour Java 8 pour autant que je sache , le journal des modifications ne répertorie que 2 changements majeurs entre les versions.
Le site Web d'Oracle est terrible et je n'arrive pas à obtenir une liste de corrections de bogues liées
javac
entre les versions, mais en voici une non exhaustive d'OpenJDK . La majorité de ceux que je parviens à trouver corrigent des erreurs. Donc, en mettant à jour vers Java 8, il y a une chance qu'il ne se compile plus en raison dujavac
suivi plus correct du JLS et il y aura très peu ou pas d '"améliorations" au bytecode.la source
Le principal avantage est que Java 8 a les dernières corrections de bogues là où Java 7 n'est pas mis à jour publiquement.
De plus, si vous prévoyez d'exécuter du code sur une machine virtuelle Java 8, vous pouvez également n'avoir qu'une seule version de Java installée.
Java 8 est peut-être plus rapide et prend mieux en charge les nouvelles fonctionnalités telles que G1. Cependant, cela peut être plus lent pour votre cas d'utilisation, donc le seul moyen de le savoir est de le tester.
Si vous demandez s'il y a un avantage à recompiler le code Java 7 dans un compilateur Java 8, la réponse est; presque rien.
La seule différence subtile est qu'il y a eu des différences mineures avec l'API Java, donc il peut y avoir des différences très subtiles que le compilateur Java 8 pourrait trouver que le Java 7
D'autres différences mineures sont le nombre magique au début du fichier, peut-être l'ordre du pool de constantes. Le code d'octet est fondamentalement le même, même le support pour
invokedynamic
lequel a été ajouté les lambdas existait dans Java 7 mais n'était tout simplement pas utilisé de cette façon.la source
Cela pourrait aider en créant une prise de conscience .
Lorsque vous passez à Java8, vous pouvez trouver des avertissements supplémentaires émis par javac. Exemple: l' inférence de type a été grandement améliorée avec Java8. Et cela pourrait éliminer le besoin d'annotations @SuppressWarnings dans votre base de code actuelle (et lorsque de telles annotations ne sont plus nécessaires, le compilateur en avertit).
Ainsi, même si vous n'avez pas l'intention de modifier votre base de code aujourd'hui, le passage à Java8 pourrait vous renseigner sur de telles choses. Augmenter vos connaissances peut vous aider à prendre des décisions éclairées.
D'autre part:
En bref: il y a quelques avantages subtils et certains risques (où l'importance des risques dépend principalement de votre configuration globale).
la source
Je ferais au moins pour ces faits.
1) Internals HashMap (c'est plus rapide sous jdk-8)
2) Beaucoup de bogues corrigés qui pourraient être transparents pour vous (optimisations d'exécution) qui rendront votre code plus rapide et meilleur sans que vous fassiez quoi que ce soit.
3) Garbage Collector G1
ÉDITER
D'un point de vue technique, cela ressemble plus à quelque chose à voir avec Ahead of Time Compilation ou à quelque chose qu'un compilateur pourrait améliorer en analysant davantage le code. Autant que je sache, de telles choses ne sont pas faites dans le compilateur java 8.
Du point de vue du développeur, il y en a beaucoup. L'augmentation de la productivité est la plus importante pour moi.
MODIFIER 2
Je ne connais que deux points qui correspondent à votre deuxième requête:
pour conserver les noms des paramètres de méthode.
Appelé Option de profil compact pour un encombrement réduit.
la source
Si vous n'avez pas d'autres raisons de recompiler votre application, cela ne fait probablement pas beaucoup de différence, comme indiqué dans la réponse acceptée.
Cependant, si vous devez le recompiler ne serait-ce qu'une seule fois, considérez ceci:
-source 7
avec javac);-source 7
au lieu de-source 8
si vous compilez avec un JDK 8 et que votre environnement d'exécution cible est Java 8;-source 8
garantit que le développeur utilise Java 8 (ou version ultérieure) à la fois pour la compilation et pour l'exécution (tel qu'il s'applique-target 8
).En conclusion, ne le recompilez pas si vous n'en avez pas besoin. Cependant, la première fois, vous devez recompiler (en raison de changements de code), passer à Java 8. Ne prenez pas le risque d'avoir un bogue dû à des inadéquations d'environnement, et ne restreignez pas les développeurs sans une bonne raison.
la source
-source 7
mais ne compile pas avec-source 8
? Aussi, pourriez-vous s'il vous plaît indiquer les contradictions car votre commentaire n'est pas très constructif en tant que tel…