Java 7 Update 1 corrige l'incompatibilité avec Apache Lucene et Solr
Due à une optimisation défectueuse du compilateur JIT
Mise à jour du 27 octobre 2011 par Idelways
Une anomalie découverte quelques jours avant la sortie de Java 7, et laissée pour compte par manque de temps, vient d'être écartée.
Oracle sort l'Update 1 de Java 7 qui corrige l'optimisation défectueuse du compilateur Hotspot, responsable de boucles potentiellement erronées, pouvant produire des résultats de calculs incorrects, ou faire crasher la JVM à l'exécution.
Cette anomalie touchait notamment Apache Lucence, le célèbre moteur de recherche en full TEXT, ainsi que son sous-produit Solr.
Oracle a sortie cet Update il y a quelques jours, mais n'a mis à jour qu'aujourd'hui les statuts des trois rapports du compilateur "JIT [Just in Time] et les bogues de boucle" signalés par la fondation. D'autres bogues relatifs, découverts en interne, ont été corrigés.
Uwe Schindler, un contributeur du projet confirme après des tests que l'anomalie a bien été résorbée. Il n'a cependant pas précisé si l'utilisation des flags -XX:+OptimizeStringConcat et -XX:+AggressiveOpts reste toujours recommandée.
Télécharger Java 7u1
Source : Oracle, blog d'un contributeur à Apache
Un bogue sur Java 7 paralyse Apache Lucene et Solr
Une optimisation défectueuse du compilateur Hotspot incriminée
Mise à jour du 1 août 2011 par Idelways
Un sérieux bogue vient d'être dévoilé suite au lancement final de Java 7. Il entrave le fonctionnement de deux projets de la fondation Apache, notamment Lucene, le célèbre moteur de recherche en full-text.
Le problème se situe plus précisément au niveau du compilateur Hotspot qui intègre un optimisateur défectueux, capable de créer des boucles potentiellement erronées.
Par conséquent, la machine virtuelle Java peut planter à l'exécution, ou produire des résultats de calculs incorrects.
Pour Lucene, ce bogue risque de corrompre l'index, plus particulièrement sur la version qui embarque le PulsingCodec.
L'autre projet phare de la fondation Apache affecté par ce bogue est Solr, le moteur de recherche issu de la bibliothèque Lucene sus-citée.
Oracle aurait découvert ce bogue 5 jours avant la sortie de Java 7 en version définitive, mais aurait préféré reporter sa correction au deuxième « service release » de Java 7, le premier étant réservé à la correction des bogues de sécurité, sauf changement de planning.
En attendant, les utilisateurs des deux projets doivent temporiser avant de passer à Java 7 en production ou l'utiliser avec l'option -XX:-UseLoopPredicate qui désactive l'optimisation et met ainsi l'index Lucene à l'abri.
Un bogue similaire peut surgir sur Java 6 avec les flags -XX:+OptimizeStringConcat et -XX:+AggressiveOpts qui activent des optimisations Hotspot par défaut désactivées.
Trois rapports de bogues ont été admis par Oracle, l'un de faible priorité et les deux autres de priorité modérée.
De pareils dysfonctionnements n'ont pas encore été signalés sur des produits autres que ceux de la fondation Apache.
Pour plus d'informations sur les nouveautés de Java 7, lire ci-dessous.
Source : avertissement de la fondation Apache
Et vous ?
Qu'en pensez-vous de ce bogue ? L'avez-vous rencontré ?
Java 7 disponible en version finale
Oracle publie son environnement d'exécution et le JDK 7
Mise à jour du 29/07/11, par Hinault Romaric
Après plus de quatre ans depuis la sortie de Java 6, Oracle vient de publier la version finale de Java Runtime Environment (JRE) 7.
Cette version est la première de Java SE publiée depuis la reprise du langage par Oracle suite au rachat de SUN.
Java SE 7 apporte un support pour un bon nombre de tendances qui ont déferlé dans le monde du développement informatique depuis la publication de la dernière version. Il offre une prise en charge amélioré des langages dynamique conçus pour fonctionner sur la machine virtuelle Java comme Scala et Groovy.
Java SE 7 embarque une API permettant de simplifier l’exécution d’un programme à travers des processeurs multi-cœurs. Et plusieurs autres nouveautés importantes (lire-ci avant).
Le nouveau Runtime Java 7 peut-être utilisé par les développeurs avec les environnements de développement NetBeans ou encore IntelliJ IDEA 10.5. Oracle a annoncé qu’il publiera avant la fin de l’année une mise à jour de son EDI JDeveloper pour un support de Java 7.
Le Runtime Java 7 est disponible pour les systèmes d’exploitations Linux, Solaris et Windows 32 bits et 64 bits.
Oracle a également annoncé la disponibilité de la version finale du Kit de Développement de Java 7 (JDK7),
Télécharger Java 7 sur le site d'Oracle
Télécharger JDK 7 sur le site d'Oracle
La RC de Java 7 est disponible
nio2, coin, javadoc et autres nouveautés
Enfin ! Plus de quatre ans après la dernière version majeure de Java, Oracle vient d'annoncer la disponibilité de Java 7 en Release Candidate.
Oracle relance enfin l'évolution de la plate-forme phare qu'est Java qui avait été ralentie par la sortie de JavaFX 1.X et ensuite par le rachat de Sun par Oracle.
Les nouveautés, si elles sont moins nombreuses qu'initialement espérées (un bon nombre ont été repoussées pour Java 8) sont tout de même importantes. Nous allons en faire un rapide tour d'horizon.
Le Projet Coin va apporter des nouveautés au cœur du langage.
- Strings in switch
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 case "truc": processTruc(s); break;- Binary integral literals
Code : Sélectionner tout - Visualiser dans une fenêtre à part int value = 0b10000000; // 128- Underscores in numeric literals
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int oneMillion = 1_000_000; //plutôt que int oneMillion = 1000000;- Multi-catch and more precise rethrow
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 catch (IOException|SQLException ex) { logger.log(ex); throw ex; }- Improved type inference for generic instance creation (diamond)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Map<String, List<String>> map = new HashMap<String, List<String>>(); //pourra sécrire plus rapidement grâce au diamond opérateur : Map<String, List<String>> map = new HashMap<>();- try-with-resources statement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } //pourra sécrire : try (BufferedReader br = new BufferedReader(new FileReader(path)) { return br.readLine(); }- Simplified varargs method invocation
Nio2 Le gros morceau à avaler car cela va remplacer l'antique java.io.File (qui reste cependant présent) par une API beaucoup plus moderne et complète. La plupart de ces nouveautés se trouvent dans le package java.nio.File
- Détection de modification de fichiers grâce à la classe WatchService
- Une toute nouvelle API de manipulation de fichiers.
- Gestion des E/S asynchrones
- Enfin une copie de fichier simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 FileSystem default = FileSystems.getDefault(); Path source = default.getPath("pets/cat.txt"); Path target = default.getPath("nicePets/nicecat.txt"); Files.copy(source, target);- Un support complet des liens physiques et symboliques (si le système de fichier les supporte).
- Une gestion propre des erreurs, via des exceptions.
- Un API complète pour l'accès aux attributs des fichiers, qui supporte les fonctionnalités de chaque système (DOS et Posix) ainsi que la gestion des utilisateurs (propriétaire et liste ACL). Le tout parfaitement extensible pour supporter d'autres systèmes de fichiers via des providers. D'ailleurs ce dernier point se concrétise en standard par l'intégration du filesystem "ZIP" qui permet de traiter un fichier ZIP comme un système de fichier standard (ou presque).
Ainsi pour extraire un fichier d'un ZIP on peut faire ceci (noter l'utilisation du try-with-resource) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 try (FileSystem zip = FileSystems.newFileSystem(Paths.get("file.zip"), null)) { Path source = zip.getPath("pets/cat.txt"); Path target = Paths.get("nicePets/nicecat.txt"); Files.copy(source, target); }
invokeDynamic : Une amélioration de la JVM pour les langages dynamiques (Groovy par exemple) mais qui sera utilisable directement en Java via l'API java.lang.invoke. CGlib et JavaAssist vont sûrement beaucoup évoluer.
Concurrency and collections updates (jsr166y) : pour améliorer vos programmes multi-threadés avec la classe ForkJoinPool
Plus anecdotique mais quand même bien sympathique :
un nouveau look beaucoup plus moderne pour la javadoc :
Et enfin, toute l'API est pleine de petites nouveautés. Par exemple, la nouvelle classe Objects que vous pouvez découvrir avec Adiguba.
L'annonce sur le site d'oracle
Télécharger Java 7 sur le site d'Oracle
La liste officielle des nouveautés
Partager