Introduction au cache de code JVM

Introduction au cache de code JVM

1. introduction

Dans ce didacticiel, nous allons examiner et découvrir rapidement la mémoire cache de code de la JVM.

2. Qu'est-ce que le cache de code?

En termes simples,JVM Code Cache is an area where JVM stores its bytecode compiled into native code. Nous appelons chaque bloc du code natif exécutable anmethod. Le smightnmethod est une méthode Java complète ou intégrée.

Le compilateur juste-à-temps (JIT) est le plus gros consommateur de la zone de cache de code. C’est pourquoi certains développeurs appellent cette mémoire un cache de code JIT.

3. Réglage du cache de code

The code cache has a fixed size. Une fois qu'il est plein, la JVM ne compilera aucun code supplémentaire car le compilateur JIT est maintenant désactivé. De plus, nous recevrons le message d'avertissement“CodeCache is full… The compiler has been disabled ». En conséquence, nous nous retrouverons avec des performances dégradées dans notre application. Pour éviter cela, nous pouvons ajuster le cache de code avec les options de taille suivantes:

  • InitialCodeCacheSize - la taille initiale du cache de code, 160 Ko par défaut

  • ReservedCodeCacheSize - la taille maximale par défaut est de 48 Mo

  • CodeCacheExpansionSize - la taille d'extension du cache de code, 32 Ko ou 64 Ko

L'augmentation desReservedCodeCacheSize peut être une solution, mais ce n'est généralement qu'une solution temporaire.

Heureusement, la JVM propose unUseCodeCacheFlushing option to control the flushing of the code cache area. Sa valeur par défaut est false. Lorsque nous l'activons, ilfrees the occupied area when the following conditions are met:

  • le cache de code est plein; this area is flushed if its size exceeds a certain threshold

  • l'intervalle déterminé est écoulé depuis le dernier nettoyage

  • le code précompilé n’est pas assez chaud. Pour chaque méthode compilée, la machine virtuelle Java garde une trace avec un compteur de hotness spécial. Si la valeur de ce compteur est inférieure à un seuil calculé, la machine virtuelle Java libère cette partie de code précompilée.

4. Utilisation du cache de code

Afin de surveiller l'utilisation du cache de code, nous devons suivre la taille de la mémoire actuellement utilisée.

To get information on code cache usage, we can specify the –XX:+PrintCodeCache JVM option. Après avoir exécuté notre application, nous verrons un résultat similaire:

CodeCache: size=32768Kb used=542Kb max_used=542Kb free=32226Kb

Voyons ce que chacune de ces valeurs signifie:

  • size in la sortie affiche la taille maximale de la mémoire, qui est identique àReservedCodeCacheSize

  • used est la taille réelle de la mémoire actuellement utilisée

  • max_used est la taille maximale qui a été utilisée

  • free est la mémoire restante qui n'est pas encore occupée

L'optionPrintCodeCache est très utile, car nous pouvons:

  • voir quand le rinçage arrive

  • déterminer si nous avons atteint un point d'utilisation critique de la mémoire

5. Conclusion

Cet article rapide présente une brève introduction au cache de code JVM.

De plus, nous avons présenté quelques options d'utilisation et de mise au point pour surveiller et diagnostiquer cette zone de mémoire.