JavaアプリケーションでG1を有効にすると-Xmx=1024m -XX:+UseG1GC
。また、jvisualvm
コマンドを使用して最大ヒープサイズを確認します。最大ヒープサイズは1GBではなく2GBです。
誰かが理由を知っていますか?
JVMは、使用量よりも多くのヒープメモリをOSから割り当てます。
メモリの割り当ては、パフォーマンスを考慮すると重い操作です。
したがって、JVMは常に必要なメモリを追加で割り当てます。
Javaは、各スレッドのスタックなど、他のものにもメモリを割り当てます。VMの合計メモリ消費量が-Xmxの値を超えることは珍しいことではありません。
JVMは、Java™ヒープとネイティブ(またはシステム)ヒープの2つのメモリ領域を維持します。これらの2つのヒープには異なる目的があり、異なるメカニズムによって維持されます。
Javaヒープには、Javaオブジェクトのインスタンスが含まれており、「ヒープ」と呼ばれることがよくあります。ガベージコレクションによって維持されるのはJavaヒープであり、コマンドラインヒープ設定によって変更されるのはJavaヒープです。Javaヒープは、mmap、または大きなページのサポートが要求された場合はshmatを使用して割り当てられます。Javaヒープの最大サイズは、最小ヒープサイズ設定が低くても、JVMの起動時に1つの連続した領域として事前に割り当てられます。
ネイティブまたはシステムヒープは、オペレーティングシステムの基盤となるmallocおよびfreeメカニズムを使用して割り当てられ、特定のJavaオブジェクトの基盤となる実装に使用されます。例えば:
1)Just In Time(JIT)コンパイラによって生成されたコンパイル済みコード
2)Javaスレッドにマップするスレッド
jvisualvmは、Javaヒープ+システムヒープを表示しています。一方、-XmxパラメータはJavaヒープに影響を与えているだけです。
リンク:http://www-01.ibm.com/support/knowledgecenter/SSYKE2_5.0.0/com.ibm.java.doc.diagnostics.50/diag/problem_determination/aix_mem_heaps.html
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加