Archives de
Year: 2020

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

J’ai testé Java Google Cloud Functions Alpha

J’ai testé Java Google Cloud Functions Alpha

J’ai testé les Java Google Cloud Functions en Alpha. Jusqu’ici, les Cloud Functions de Google n’étaient implémentables qu’en NodeJs, Go ou Python. Mais Google est en train de préparer l’ouverture d’un runtime Java (8 et 11), que j’ai pu tester en alpha release privée (pour s’inscrire, c’est ici). Après inscription à l’alpha privée, vous aurez accès à un document de tutoriel pas à pas, et à un forum d’aide en ligne. On peut écrire deux types de fonctions : les…

Lire la suite Lire la suite

Introduction à JMH – Java Microbenchmark Harness

Introduction à JMH – Java Microbenchmark Harness

Dans mon précédent article For vs Stream, j’ai utilisé JMH – The Java Microbenchmark Harness, un outil pour réaliser des microbenchmarks de manière facile, et surtout, pertinente. Cet article à pour but de vous présenter l’outil et son utilisation. Mais tout d’abord : c’est quoi un microbenchmark ? Microbenchmark Benchmark ou banc d’essai en français : un programme qui permet de mesurer les performances d’un système, pour le comparer à d’autres. Microbenchmark : un benchmark fait pour mesurer les performances…

Lire la suite Lire la suite

For vs Stream

For vs Stream

Cela faisait longtemps que je n’avais pas écrit un article de blog et pourtant, pour cause de confinement, j’ai du temps pour le faire! N’ayant pas d’idée, j’ai demandé à ma twitosphère de m’en donner, et j’ai eu une réponse intéressante : Les différences de perf entre stream et for classique ? On en a parlé y’a longtemps, mais j’avais fait une session de micro bench avec JMH qui montrait que les ‘for’ étaient plus performants que les streams. —…

Lire la suite Lire la suite

Quarkus et Testcontainers

Quarkus et Testcontainers

Si vous ne connaissait pas Quarkus, voici un article d’introduction : Zoom sur Quarkus. Quarkus offre un support des Tests Unitaires (TU) avec JUnit 5 via l’annotation @QuarkusTest, la documentation du support des TU de Quarkus peut être trouvé ici. Voici un exemple de TU tiré du Quickstart Hibernate ORM : Classiquement, on peut exécuter des tests en utilisant une base de données embarquée, Quarkus supporte la BDD H2 pour ça. Mais si on veut que nos tests tournent dans…

Lire la suite Lire la suite

Java 14 : quoi de neuf ?

Java 14 : quoi de neuf ?

Maintenant que Java 14 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 version de Java, pour ceux qui voudraient les lires en voici les liens : Java 13, Java 12, Java 11, Java 10, et Java 9. À l’inverse des précédentes version de Java, la version 14 apporte beaucoup de fonctionnalités,…

Lire la suite Lire la suite