Utilisation du tas natif

L'utilisation du tas natif atteint normalement un niveau stable puis se maintient à peu près à ce niveau. Vous pouvez surveiller la quantité de mémoire engagée dans le tas natif en observant le nombre de pages "Inuse" dans la sortie de svmon.

Toutefois, comme du code compilé JIT est alloué au tas natif avec malloc(), il peut se produire un augmentation lente et continue de l'utilisation du tas natif, car les méthodes peu utilisées finissent quand même par atteindre le seuil à partir duquel elles sont éligibles à la compilation JIT.

Vous pouvez surveiller la compilation JIT du code afin d'éviter de confondre ce comportement avec une fuite de mémoire. Pour ce faire, exécutez l'option de ligne de commande -Xjit:verbose={compileStart|compileEnd}. Cette commande permet d'afficher chaque nom de méthode dans stderr lors de sa compilation et, une fois la compilation terminée, fournit l'emplacement en mémoire dans lequel le code compilé est stocké.
(warm) Compiling java/lang/System.getEncoding(I)Ljava/lang/String; 
+ (warm) java/lang/System.getEncoding(I)Ljava/lang/String; @ 0x02BA0028-0x02BA0113   
                                        (2) Compiling java/lang/String.hashCode()I 
+ (warm) java/lang/String.hashCode()I @ 0x02BA0150-0x02BA0229   
  (2) Compiling java/util/HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)
   Ljava/lang/Object; 
+ (warm) java/util/HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)
                 Ljava/lang/Object; @ 0x02BA0270-0x02BA03F7   
                (2) Compiling java/lang/String.charAt(I)C 
+ (warm) java/lang/String.charAt(I)C @ 0x02BA0430-0x02BA04AC   
       (2) Compiling java/util/Locale.toLowerCase(Ljava/lang/String;)
                Ljava/lang/String; 
+ (warm) java/util/Locale.toLowerCase(Ljava/lang/String;)Ljava/lang/String; 
                                                    @ 0x02BA04D0-0x02BA064C

Une fois que vous avez surveillé la quantité de segments de mémoire natifs que vous utilisez, vous pouvez augmenter ou diminuer le segment de mémoire natif maximal disponible en modifiant la taille du segment de mémoire Java™ . Cette relation entre les segments de mémoire se produit car l'espace adresse de processus non utilisé par le segment de mémoire Java est disponible pour l'utilisation du segment de mémoire natif.

Vous devez augmenter le tas natif si le processus génère des erreurs en rapport avec un échec d'allocation de ressources natives ou l'épuisement de l'espace d'adressage du processus. Ces erreurs peuvent prendre la forme d'un message d'erreur interne de la JVM ou d'un message de détail associé à une OutOfMemoryError. Le message associé aux erreurs pertinentes indique clairement que le problème est lié à un épuisement du tas natif.