2

Java アプリケーションの起動コマンド ラインの 1 つに、次のパラメーター (IBM JVM) -Xcodecache が表示されます。

このパラメーターがコード モジュールのキャッシュのサイズを制御することは直感的に理解できますが、ドキュメントでこのパラメーターの説明を見つけることができません。

さらに、このパラメーターは、別の設定を使用して行われるサーブレットのキャッシュにどのように関連していますか?ご協力ありがとうございます。

4

2 に答える 2

2

このドキュメントを見てください。

IBM コードキャッシュは、クラスから生成されたネイティブ JIT コンパイル コードを格納する場所のようです。JVM は、これを他のリソースとは別のメモリ チャンクに格納します。

多くのアプリケーションでは、ほとんどのメソッドが JIT コンパイルされると、この「コードキャッシュ」メモリはかなり安定します。 IBM JVM はこれをどのように行うかについて賢く、必要以上のメモリーを少しだけ使用しようとします。 ただし、JVM ライフサイクルの早い段階でメソッドがまだ JIT コンパイルされている間、またはコードが新しいクラスを生成したり、リフレクションを使用したりすると、このメモリが消費されます。JVM は、現在割り当てられているコードキャッシュに十分なスペースがないと判断すると、新しいブロックを割り当ててサイズを増やします。-Xcodecacheパラメータは、割り当てられるこれらの新しいチャンクのサイズを設定します。

これは、リンクされたドキュメントからの関連する一節です。

JIT コンパイラはメモリをインテリジェントに使用します。コード キャッシュが初期化されると、消費されるメモリは比較的少なくなります。より多くのメソッドがネイティブ コードにコンパイルされると、プログラムのニーズに対応するためにコード キャッシュが動的に拡張されます。破棄または再コンパイルされたメソッドによって以前占有されていたスペースは、回収されて再利用されます。コード キャッシュのサイズが事前に定義された上限に達すると、成長が停止します。JIT コンパイラーは、システム・メモリーを使い果たし、アプリケーションまたはオペレーティング・システムの安定性に影響を与えることを回避するために、今後のメソッドのコンパイルの試みをすべて停止します。

ドキュメントには、デフォルト値はアーキテクチャに固有であると記載されています。これは、64 ビット システムまたは 32 ビット システムを実行している場合、おそらく異なるサイズのチャンクを割り当てる必要があるためです。この値を調整する必要があるのは、定期的に新しいクラスを JVM にロードするアプリケーションを実行している場合です。その場合、値を増やして、新しい割り当てが発生する頻度を減らすことができます。ただし、使用するよりも多くのメモリを割り当てたくないため、これをあまり高く設定しないでください。ドキュメントはそれを示唆しています

最適なサイズを調整する妥当な出発点は (totalNumberByteOfCompiledMethods * 1.1) です。

于 2013-08-02T20:05:30.623 に答える
0

IBM のドキュメントを読むと、 JIT されたコードの量は次のようになります。

コンパイルされたコードは、コード キャッシュと呼ばれる JVM プロセス空間の一部に配置されます。コード キャッシュ内のメソッドの場所が記録されるため、それを後で呼び出すと、コンパイルされたコードが呼び出されます。

于 2013-08-02T20:04:52.690 に答える