ネイティブ・ヒープの使用量

ネイティブ・ヒープの使用量は、通常は安定したレベルまで増加し、その後はそのレベル前後にとどまります。 svmon 出力の「Inuse」ページの数を監視することによって、ネイティブ・ヒープにコミットされているメモリーの量をモニターできます。

しかし、malloc() によってネイティブ・ヒープに JIT コンパイルされたコードが割り振られる際、使用頻度の低いメソッドが JIT コンパイルの実行しきい値に達するのに合わせて、ネイティブ・ヒープの使用量が定常的にゆっくりと増加する場合があることに注意してください。

コードの JIT コンパイルをモニターすると、この動作とメモリー・リークの混同を避けることができます。 これを実行するには、コマンド行オプション -Xjit:verbose={compileStart|compileEnd} を使用して実行します。 このコマンドを実行すると、各メソッドのコンパイルの開始時および終了時にメソッド名が stderr に出力され、コンパイルされたコードが格納されているメモリー内の場所も示されます。
(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

使用しているネイティブ・ヒープの量をモニターした後、Java™ ヒープのサイズを変更することによって、使用可能な最大ネイティブ・ヒープを増減できます。 ヒープ間のこの関係は、Java ヒープによって使用されないプロセス・アドレス・スペースがネイティブ・ヒープに使用できるために生じます。

ネイティブ・リソースの割り振り失敗やプロセス・アドレス・スペースの不足に関連するエラーがプロセスで生成されている場合には、ネイティブ・ヒープを増やす必要があります。 これらのエラーは、JVM 内部エラー・メッセージの形式または OutOfMemoryError に関連付けられた詳細メッセージの形式を取ることがあります。 関連するエラーに関連付けられたメッセージの場合には、その問題がネイティブ・ヒープの不足によるものであることが明確になります。