Java 17 : quoi de neuf ?

Java 17 : quoi de neuf ?

Maintenant que Java 17 est features complete (Rampdown Phase Two au jour d’écriture de l’article), c’est le moment de faire le tour des fonctionnalités qu’apporte cette nouvelle version, à nous, les développeurs. Cet article fait partie d’une suite d’article sur les nouveautés des dernières versions de Java, pour ceux qui voudraient les lire en voici les liens : Java 16, Java 15, Java 14, Java 13, Java 12, Java 11, Java 10, et Java 9. Cette release ne contient pas beaucoup de JEP,…

Lire la suite Lire la suite

Debugger une image native GraalVM avec GDB

Debugger une image native GraalVM avec GDB

Dans un précédent article, j’avais évoqué comment profiler une image native GraalVM avec perf. Si vous ne connaissez pas l’outil GraalVM et les limitations qu’il apporte, je vous conseille de relire mon article, ou tout du moins son début. Comme vu dans mon article précédent, une image native va contenir une JVM minimaliste, appelée SubstrateVM, qui ne supporte pas JVM-TI, et ne permet donc pas l’utilisation de debugger Java. Pour débugger une image native, il faut donc un debugger système…

Lire la suite Lire la suite

Profiler une application Java dans un conteneur déployé dans kubernetes avec JFR – Java Flight Recorder

Profiler une application Java dans un conteneur déployé dans kubernetes avec JFR – Java Flight Recorder

La plupart des clients chez lesquels j’interviens aujourd’hui utilisent Kubernetes pour déployer leurs applications. Bien que Kubernetes soit un super outil, si on a besoin de ce type d’outil (qui est une discussion dans laquelle je ne rentrerais pas ici), il peut apporter une certaine complexité quant aux moyens de « regarder » le comportement de nos applications en cours de fonctionnement. Quand j’ai un problème de performance sur une application, j’utilise régulièrement un profiler Java. Il en existe de nombreux, mais…

Lire la suite Lire la suite

Introduction à Quickperf

Introduction à Quickperf

QuickPerf est une bibliothèque de test pour Java permettant d’évaluer et d’améliorer rapidement les performances de votre application. Le grand intérêt de Quickperf réside dans le fait que cela s’effecue via des tests unitaires, ce qui permet, après avoir détecté et corrigé un problème de performance, d’avoir des tests de non-régression pour que celui-ci ne revienne jamais ! Vous pouvez alors évaluer en continue les performances de votre application via votre environnement d’intégration continue ! Quickperf peut être utilisé pour…

Lire la suite Lire la suite

Java 16 : quoi de neuf ?

Java 16 : quoi de neuf ?

Maintenant que Java 16 est features complete (Rampdown Phase Two au jour d’écriture de l’article), c’est le moment de faire le tour des fonctionnalités qu’apporte cette nouvelle version, à nous, les développeurs. Cet article fait partie d’une suite d’article sur les nouveautés des dernières versions de Java, pour ceux qui voudraient les lire en voici les liens : Java 15, Java 14, Java 13, Java 12, Java 11, Java 10, et Java 9. Cette nouvelle version compte pas moins de 17 JEP mais…

Lire la suite Lire la suite

Benchmark : conversion de long en byte[]

Benchmark : conversion de long en byte[]

J’utilise beaucoup Kafka ces derniers temps, et dans Kafka, beaucoup de choses sont des tableaux de bytes, même les headers ! Comme j’ai de nombreux composants qui s’échangent des messages, j’ai ajouté des headers pour aider au suivi des messages, et entre autres un header timestamp qui a comme valeur System.currentTimeMillis(). Il m’a donc fallut transformer un long en tableau de byte; d’une manière très naïve, j’ai codé ça : String.valueOf(System.currentTimeMillis()).getBytes(). Mais instancier une String à chaque création de header…

Lire la suite Lire la suite

Profiler une image native GraalVM avec perf

Profiler une image native GraalVM avec perf

L’outil GraalVM native-image permet de générer un exécutable natif (ou image native) depuis votre application Java. Cet exécutable natif va démarrer très rapidement et avoir une empreinte mémoire beaucoup plus faible qu’une application Java traditionnelle; au prix de performances en pic réduites et d’un temps de création de ce package natif assez élevé. Plus d’informations sur les exécutables natifs ici. Un exécutable natif contient une JVM minimaliste appelée SubstratVM, celle-ci a quelques limitations : Support partiel de la reflection Support…

Lire la suite Lire la suite

Ma deuxième année chez Zenika

Ma deuxième année chez Zenika

Aujourd’hui est un jour spécial, cela fait deux ans que je suis arrivé chez Zenika, après 9 ans en tant qu’architecte logiciel dans la DSI d’un grand groupe de retail. L’année dernière j’avais fait le bilan de ma première année passée : 1 an chez Zenika. Et un an après, quel est le bilan de cette deuxième année ? La crise du COVID-19 a fortement influencé le déroulement de cette année, le client chez lequel j’étais au moment du confinement…

Lire la suite Lire la suite

Java 15 : quoi de neuf ?

Java 15 : quoi de neuf ?

Maintenant que Java 15 est features complete (Rampdown Phase One au jour d’écriture de l’article), c’est le moment de faire le tour des fonctionnalités qu’apporte cette nouvelle version, à nous, les développeurs. Cet article fait partie d’une suite d’article sur les nouveautés des dernières versions de Java, pour ceux qui voudraient les lire en voici les liens : Java 14, Java 13, Java 12, Java 11, Java 10, et Java 9. Cette nouvelle version apporte son lots de nouvelles JEP, dont la principale…

Lire la suite Lire la suite

Quarkus, jlink et Application Class Data Sharing (AppCDS)

Quarkus, jlink et Application Class Data Sharing (AppCDS)

Quarkus est optimisé pour démarrer rapidement et avoir une empreinte mémoire très faible. Ceci est vrai en déployant dans une JVM standard mais encore plus en déployant notre application comme un exécutable natif via GraalVM. Quarkus facilite grandement la création d’exécutable natif, grâce à ça, une application Quarkus démarre en quelques dizaines de millisecondes et avec une empreinte mémoire très faible : quelques dizaines de Mo de RSS (Resident Set Size – totale d’utilisation de mémoire du processus Java vu…

Lire la suite Lire la suite