JVMプロセスとJVMヒープメモリ使用量

heap java jvm memory process
JVMプロセスとJVMヒープメモリ使用量

私はこれをhttps://stackoverflow.com/questions/4893192/process-memory-vs-heap-jvm[Process Memory Vs Heap-JVM]を読んでいますが、同じ問題があります。

jvmプロセスのメモリ使用量は増え続け、縮小することはありません。Linuxサーバーでtopを実行して確認しました。 アプリケーションは、クラスターにジョブをスケジュールしています(Quartz + Sun Java DRMAA APIを使用)

アプリケーションのライフサイクル中、Javaヒープスペースは制限内に留まっていますが、jvmプロセスはメモリ使用量が着実に増加しており、ダウンすることはありません。

これはメモリリークですか? もしそうなら、なぜヒープスペースが制限内にあるのですか? 誰か説明できますか。

更新: jconsoleを追跡すると-Xmx1600m -Xms1600mがあり、この制限内で450m以内にヒープスペースが十分に表示されますが、topコマンドはプロセスが900m以上を使用していることを示しています。

  17  11


ベストアンサー

使用される仮想メモリの合計は、最大ヒープ+スレッドスタック+ダイレクトメモリ+ perm gen +共有ライブラリの合計です。 これは決して縮小しません。

実際に使用されるメインメモリは、使用されている仮想メモリの量によって異なります。 共有ライブラリは共有されるため、複数のJVMを使用してもこのメモリが2倍になることはありません。

JVMはメモリをOSに解放しませんが、メインメモリが長期間使用されない場合、必要に応じてスワップアウトできます。

11


実際のメモリ消費量は、Xmxなどで設定したものよりも多く、それが正常です。 「javaは、各スレッドのスタックなど、他のものにメモリを割り当てます。 VMの合計メモリ消費量が-Xmxの値を超えることは珍しいことではありません。」

2


パラメータ-Xmx1600m -Xms1600mは、最小で1600MBのメモリ、最大で1600MBのメモリを割り当てるようJVMに指示します。 したがって、JVMは起動時に1600MBを割り当て、解放しないでください。

JVMにメモリを解放してOSに戻す場合、-Xmsはできるだけ低くする必要があり、おそらく新しいG1ガベージコレクタでJava 1.7を使用する必要があります。 stefankrause.net/wp/?p=14。

Mac OS X 10.8およびJava 1.7で-Xms32m -Xmx256m -XX:+ UseG1GC -XX:MinHeapFreeRatio = 5 -XX:MaxHeapFreeRatio = 10を使用すると、System.gc()の実行後にメモリがOSに解放されます。

1


ヒープには、Java仮想マシン(JVM)がJavaアプリケーションによって作成されたすべてのオブジェクトを格納します。 「new」演算子を使用します。 Javaガベージコレクター(gc)は、ヒープを異なる領域に論理的に分離できるため、gcは削除できるオブジェクトをより迅速に識別できます。

新しいオブジェクトのメモリは、実行時にヒープに割り当てられます。 インスタンス変数は、それらが宣言されているオブジェクト内に存在します。

スタックは、メソッド呼び出しとローカル変数が保存される場所です。 メソッドが呼び出されると、そのスタックフレームが呼び出しスタックの一番上に配置されます。 スタックフレームには、実行中のコード行やすべてのローカル変数の値など、メソッドの状態が保持されます。 スタックの一番上のメソッドは、常にそのスタックで現在実行中のメソッドです。 スレッドには独自の呼び出しスタックがあります。

前述のように、Javaオブジェクトはヒープ内に作成されます。 プログラミング言語では、オブジェクトをスタック内で生成するかどうかをプログラマーが決定できるようにすることはできません。 ただし、特定のケースでは、スタック上のメモリ割り当てがヒープ内のメモリ割り当てよりも安く、スタック上の割り当て解除が無料であり、スタックがランタイムによって効率的に管理されるため、スタック上のオブジェクトを割り当てることが望ましい場合があります。

したがって、JVMは内部エスケープ分析を使用して、オブジェクトがスレッドまたはメソッドでのみ使用されているかどうかを確認します。 JVMがこれを特定すると、スタック上にオブジェクトを作成することを決定し、Javaプログラムのパフォーマンスが向上します。 (http://www.ibm.com/developerworks/java/library/j-nativememory-linux/)

0


タイトルとURLをコピーしました