2016-12-08 6 views
3

私はこのトピックの初心者です。私の質問がはっきりしていてもお詫び申し上げますが、ここにあります。
Javaアプリケーションを起動するたびに、JVMの新しいインスタンスが作成されます。 JVM自体は、OS上で実行されるプロセスであり、他のプロセスと同様に、独自のメモリ要件があります。
私は、ヒープメモリ構造とヒープ以外のメモリ構造、およびそれらをどのように設定して操作できるのかを知っています。私が探しているのは、jvmプロセス自体のメモリの詳細です。 全体的なメモリの分割方法つまりjvm独自のメモリ要件+ヒープ+非ヒープ+ネイティブスタック
いくつのセグメントがありますか?
OSがJVMに割り当てるメモリ量と、jvmがそれをさらにどのように使用していますか?
アプリケーションの実行中にこれらの詳細を確認するコマンドまたはユーティリティはありますか?
私はたくさんの検索をしましたが、この方向で具体的なものは何も見つかりませんでした。ほとんどの記事でヒープとヒープ以外のメモリ構造(eden/old/metaなど)が説明されています。私はまた、links-の下に訪れたそれは私が私が探し始めることができるように、このトピック上の任意のポインタは素晴らしいことだ、ここにこだわっているようだ
JVM Memory Types
How is the java memory pool divided?
JVM Memory segments allocation
https://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/
JVM memory mapping over a Linux Process
Understanding JVM Memory Allocation and Java Out of Memory: Heap Space
その方向に。プロセスとしてのJVMのメモリの詳細

答えて

3

Java 8のネイティブメモリートラッキング(NMT)機能は、質問に答えるのに役立ちます。オプションで

実行するJava -XX:NativeMemoryTracking=summary
その後、実行時にJVMのメモリの統計情報を印刷するには、次のコマンドを実行します。

jcmd <pid> VM.native_memory summary 

を出力するようになります。

Total: reserved=664192KB, committed=253120KB 

-     Java Heap (reserved=516096KB, committed=204800KB) 
          (mmap: reserved=516096KB, committed=204800KB) 

-      Class (reserved=6568KB, committed=4140KB) 
          (classes #665) 
          (malloc=424KB, #1000) 
          (mmap: reserved=6144KB, committed=3716KB) 

-     Thread (reserved=6868KB, committed=6868KB) 
          (thread #15) 
          (stack: reserved=6780KB, committed=6780KB) 
          (malloc=27KB, #66) 
          (arena=61KB, #30) 

-      Code (reserved=102414KB, committed=6314KB) 
          (malloc=2574KB, #74316) 
          (mmap: reserved=99840KB, committed=3740KB) 

-      GC (reserved=26154KB, committed=24938KB) 
          (malloc=486KB, #110) 
          (mmap: reserved=25668KB, committed=24452KB) 

-     Compiler (reserved=106KB, committed=106KB) 
          (malloc=7KB, #90) 
          (arena=99KB, #3) 

-     Internal (reserved=586KB, committed=554KB) 
          (malloc=554KB, #1677) 
          (mmap: reserved=32KB, committed=0KB) 

-     Symbol (reserved=906KB, committed=906KB) 
          (malloc=514KB, #2736) 
          (arena=392KB, #1) 

-   Memory Tracking (reserved=3184KB, committed=3184KB) 
          (malloc=3184KB, #300) 

-  Pooled Free Chunks (reserved=1276KB, committed=1276KB) 
          (malloc=1276KB) 

-     Unknown (reserved=33KB, committed=33KB) 
          (arena=33KB, #1) 

詳しい情報herehere

+0

私が探していたものです。 – meexplorer

1

コマンドラインユーティリティをお探しの場合は、起動中のすべてのJavaプロセスのPIDだけを出力するjpsから開始してください。次に、発見したいものを選択し、jmapとそのPIDを使用します。

JDKにはビジュアルツールも付属しています。古いものはJConsokeであり、より新しいものはVisualVMです。

+0

私はJconsoleとVisual VMを使用しました。ちょうどこの記事が見つかりました。このようなものがあります。http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html – meexplorer

+1

OSはXメモリをプロセスとしてJVMに割り当て、次にXからJVMは-Xms/-Xmx/-XXに基づいてヒープ/パーマネントにメモリを割り当てます:PermSize、MaxPermSize、残りのメモリは(X1 = X-heap-パーマ)。 X1では何が起こりますか、JVMがX1からどれくらいのメモリを必要としますか?他のセグメントにどれだけの量がありますか?記事が説明するように他のセグメントはほとんどありません – meexplorer

関連する問題