Outil de profiling Java : VisualVM

L’outil graphique de profiling VisualVM permet de surveiller, localement ou à distance, les applications Java comme par exemple la consommation CPU, mémoire, le nombre de threads et leur état. VisualVM permet aussi de lire des dumps de la mémoire au format HPROF comme expliqué dans l’article « Détecter graphiquement les fuites mémoires« .

Ce logiciel, qui fonctionne en java 6, est fourni dans la JDK depuis la version 1.6 update 7. NetBeans intègre par défaut VisualVM et il existe un plugin spécifique pour Eclipse.

La version actuelle est 1.3.1 et les releases notes montrent que le projet est actif. La RefCardz « Profile Your Applications with Java VisualVM » de chez DZone explique très bien l’utilisation de VisualVM.

Malheureusement, je n’ai pas encore testé en profondeur VisualVM et Memory Analyzer Tool (MAT) pour identifier des avantages et inconvénients.

Les machines virtuelles Java temps réels (Java Real Time VM)

Avant de lister les VMs Java temps réels, il convient de préciser que l’organisation Java Community Process (JCP) a proposé une Java Specification Requests (JSR) pour l’implémentation du Java temps réel nommé « JSR001 – Real-time Specification for Java« . L’article « Un peu d’histoire autour de Java temps réel » retrace rapidement l’historique de cette spécification.

La société TimeSys est en charge de l’implémentation de référence mais libre à chacun d’implémenter plus ou moins respectueusement la spécification pour créer sa propre VM Java temps réel.

Voici la liste des machines virtuelles Java temps réel.

(Lire la suite…)

Workshop – JamaicaVM Technology for Multicore Processor Architectures

La société Aicas, éditrice de la JVM temps réel JamaicaVM, a organisé un workshop à Karlsruhe en Allemagne. J’ai noté quelques informations intéressantes sur leur JVM et la programmation Java sur des processeurs multicore.

Voici mes notes…

(Lire la suite…)

Partage d’info sur les optimisations, l’embarqué et le temps réel

J’ai l’intime conviction que l’information ne vaut quelque chose que si elle est partagée.

Je souhaite donc partager dans cet article mes sources que j’aime surveiller et lire pour assurer une veille technologique sur les optimisations de la plateforme Java pour systèmes embarqués et / ou temps réel.

(Lire la suite…)

Java SE 6 Update 21

La version de Java SE 6 Update 21 est sortie en juillet 2010 est apporte des corrections intéressantes pour notre domaine d’application :

  • Java Hotspot VM 17.0 : cette version de JVM apporte quelques améliorations de performances tels que :
    • pointeurs d’objets compressés
    • optimisation des allocations sur la pile (escape analysis)
    • meilleur gestion du cache de code
    • amélioration du GC Concurrent Mark-Sweep et Garbage First (G1)
  • VisualVM 1.2.2 : ajout de fonctionnalités supplémentaires tels que :
    • amélioration des performances du HeapWalker
    • amélioration des performances du VisualVM-Sampler
    • ajout de BTrace 1.1 dans le plugin BTrace4VisualVM
    • correction de bugs du moteur de profiling
    • inclus dans la plateforme NetBeans 6.8

Tous les détails sont sur la page de la version Java SE 6 Update 21.

Java Embedded : la plateforme Java embarqué méconnue

La plateforme Java se divise en différentes versions afin de s’adapter à des besoins spécifiques :

Pour une application n’utilisant pas le BlueTooth, les petits écrans, les SMS/MMS, la plateforme Java Micro Edition est inutile. Si cette même application doit fonctionner sur une carte aux ressources limitées, la plateforme Java Standard Edition sera trop volumineuse.

Dans ce cas, quelle plateforme utiliser ? Notamment pour les systèmes plus performants que les appareils portables mais moins que les ordinateurs de bureau et nécessitant toute l’API du Java Standard Edition ?

(Lire la suite…)

Détecter graphiquement les fuites mémoires

Après l’article pour savoir comment détecter manuellement les fuites mémoires, voici une méthode plus graphique et automatique. Le principe reste le même avec la génération d’un dump au format HPROF de la mémoire mais cette fois-ci au format binaire pour être lu par des outils graphiques.

1ère étape méthode : dump au format binaire
Il faut commencer par générer un dump de la mémoire :

  • sur un arrêt normal de l’application : -Xrunhprof:heap=dump,format=b
  • sur une exception de type « OutOfMemory » : -XX:+HeapDumpOnOutOfMemoryError
  • sur un arrêt de l’application par « Ctrl+C » : -XX:+HeapDumpOnCtrlBreak
  • avec JConsole du JDK 1.6 : utiliser la méthode « dumpHeap() » dans le « MBean HotSpotDiagnostic« 
  • avec JMap: jmap -dump:format=b <pid> (jps pour trouver le pid)

2ème étape : analyse graphique du dump

  • avec Memory Analyzer Tool (MAT)

Il suffit de fournir le dump HPROF au format binaire à Memory Analyzer Tool (MAT) que j’ai présenté dans l’article Memory Analyzer Tool (MAT) : fuite et consommation mémoire

  • avec VisualVM

Il suffit de fournir le dump HPROF au format binaire à VisualVM que j’ai présenté dans l’article Outil de profiling Java : VisualVM

Bonne chasse aux fuites mémoires !

Memory Analyzer Tool (MAT) : fuite et consommation mémoire

Memory Analyzer Tool (MAT) est un outil basé sur Eclipse pour analyser la mémoire de la JVM afin de détecter des fuites mémoire et réduire la consommation mémoire d’une application. D’autres outils existent mais soit ils ne sont pas facile à utiliser, tel que Java Heap Analysis Tool (JHAT) ou JMAP, soit ils sont payants comme Jprofiler.

MAT analyse un dump de la mémoire de la JVM format HPROF, IBM ou Portable Heap Dump (PHD) et indique une multitude d’informations sur l’occupation mémoire ainsi qu’un rapport sur les fuites mémoires éventuels.

Les conférences intéressantes

Voici une liste des conférences Java qui traite exclusivement ou en partie des applications Java embarquées et / ou temps réels :

  • JavaOne : conférence annuelle organisée par Oracle à San Francisco  pour discuter des technologies Java (du 19 au 23 septembre 2010 à San Franciso)
  • JavaTechnologies for Real-time and Embedded Systems (JTRES) : conférence annuelle organisée à des endroits différents chaque année (du 19 au 21 août 2010 à Prague en République Tchèque)

Je ne suis pas sûr que ma liste soit exhaustive, merci de m’envoyer un mail pour proposer d’autres conférences.