Fonctionnement interne de volatile et synchronized en Java

L'implémentation de volatile et synchronized en Java couvre plusieurs couches, du code source au matériel. Cet article explore les mécanismes sous-jacents de ces deux fonctionnalités de synchronisation. Synchronized 1.1 Niveau bytecode En analysant le bytecode généré par javap, on observe que les méthodes marquées avec synchronized possèdent ...

Publié le 4 juillet à 17h57

Augmenter le débit d'un service Java de 22,5 % par tuning JVM avec CMS

Contexte et observations sur sept jours L'analyse des métriques d'une semaine révèle un profil de mémoire et de ramasse-miettes précis. Le taux d'occupation du CPU reste faible, autour de 10 %, ce qui laisse une marge de manœuvre importante. La mémoire est globalement peu sollicitée, avec une zone Old peuplée mais disposant encore d'espace disp ...

Publié le 30 juin à 17h46

Comprendre la relation entre equals() et hashCode() en Java

Dans l'écosystème Java, la gestion de l'identité des objets repose sur deux méthodes fondamentales de la classe Object : equals() et hashCode(). Bien qu'elles puissent sembler redondantes, leur interaction est cruciale pour la performance et l'intégrité des structures de données. 1. Pourquoi conserver hashCode() si equals() suffit à comparer ? ...

Publié le 27 juin à 01h46

Analyse et résolution des erreurs OutOfMemoryError dans les applications Java en production

Épuisement des threads et allocation de tampons surdimensionnés dans Tomcat Dans un système traitant environ 100 requêtes par seconde, des erreurs OutOfMemoryError: Java heap space surviennent de manière récurrente, entraînant l'arrêt complet du service. L'analyse des journaux révèle que les threads de travail de Tomcat (ex: http-nio-8080-exec- ...

Publié le 22 juin à 17h28

jmap : Une introduction à l'analyse mémoire des applications Java

Lorsque vous gérez des applications à forte charge ou des flux de données massifs, il est courant de rencontrer des problèmes tels que des Full GC fréquents, une accumluation dans le Old Gen ou une chute de débit. Pour diagnostiquer ces symptômes, l'outil en ligne de commande intégré au JDK, jmap, s'avère essnetiel. Il permet d'obtenir une vue ...

Publié le 21 juin à 01h55

Fondamentaux de Java : Environnement d'Exécution et Syntaxe de Base

Environnement Java : JDK, JRE et JVM Java Development Kit (JDK) fournit les outils nécessaires pour développer des applications Java. Il inclut un compilateur (javac) et une bibliothèque de classes. Le JDK est essentiel pour écrire, compiler et déboguer du code Java. Java Runtime Enviornment (JRE) permet d'exécuter des programmes Java sur une m ...

Publié le 20 juin à 00h43

Gestion de l'environnement Java et optimisation des performances

Compoasnts clés de l'écosystème Java Collecte des déchets (Garbage Collection) Définition et avantages La collecte des déchets (GC) est un mécanisme d'allocation et de libération automatique de la mémoire. Il améliore l'abstraction dans le développement logiciel, permet aux programmeurs de se concentrer sur les fonctionnalités métier sans gérer ...

Publié le 16 juin à 21h58

Comprendre le fonctionnement interne de HashMap en Java 8

La classe HashMap est un incontournable des entretiens techniques pour les développeurs Java. Que vous soyez débutent ou architecte, sa structure interne permet d'évaluer vos connaissances sur les collections, mais aussi votre maîtrise des structures de données fondamentales et de la gestion de la mémoire dans la JVM. L'évolution de HashMap : d ...

Publié le 13 juin à 18h42

Questions avancées sur Java pour les entretiens techniques

Différentes méthodes de création d'objets Utilisation du mot-clé new : Cette approche permet de créer une nouvelle instance dans la mémoire heap. Via la réflexion : Le mécanisme de réflexion de Java offre la possibilité de créer dynamiquement des objets pendant l'exécution. On peut utiliser la méthode newInstance() de la classe Class ou ...

Publié le 12 juin à 23h36

Reproduire un débordement de la PermGen ou du Metaspace

Pour comprendre comment simuler un dépassement de mémoire dans la PermGen ou le Metaspace, commençons par examiner ce qui y est stocké : des informations de types, des constantes, des variables statiques, et le cache de code compilé à la volée. Les constantes, comme celles obtenues via String.intern(), étaient gérées différemment selon les vers ...

Publié le 11 juin à 03h51