2017-06-17 35 views
1

マイコンピュータは、メモリ64GBのを持っており、Eclipseで、私はそうのようなデフォルトのVM引数を設定します。JVMの実際のメモリフットプリントが私のXmxよりもずっと大きいのはなぜですか?

-Xms512m -Xmx9g 

私は9ギガバイトは私のJavaアプリケーションの利用を作ることができる最大の大きさであると思いました。しかし、しばらくの間、アプリケーションを起動した後、Javaアプリケーションプロセスが約16GBのメモリを使用していることをSystem Monitorから確認できます。どのように私は9GBとして設定したVMの引数よりも大きいことができますか?

+1

質問が期待通りに動作しない理由Xmxのはではなく、あるものではありませんので、それは、重複したようには見えません@Ravi。 – Harald

+0

@ user697911どのシステムモニタもあなたを参照していますか、どの番号を正確に見ていますか? – Harald

+0

あなたは 'Xmx'についての情報を求めています。それで、そこにはよく説明されています。タスクマネージャの画面を共有する必要があります。より多くの記憶を取っているので、我々を見せるために – Ravi

答えて

1

-Xmxは、Javaオブジェクト(いくつかの '世代'に編成されたEden、Survivor、Tenured/Old)に使用されるJVMのヒープメモリの最大サイズを設定します。 外ヒープJVMも割り当て:

  • ロードされたクラス、およびJITコンパイルされたコードを(必要に応じて)

  • スレッドが

  • NIO '直接' バッファ

  • ネイティブコードをスタック:JVM自体(それが使用するシステムライブラリを含む)、JNIまたはJNAによってロード/アクセスされるコード

  • ネイティブコードによって管理されるデータ

最初のグループは、Java 8でJava 7とメタスペースを通してCodeCacheとPermGenにあります。ヒープではありませんが、これらはヒープスペースのようにMemoryPoolMXBeanによって報告され、異なるオプション(-XX:MaxPermSize -XX:MaxMetaspaceSizeなど)で調整することができます。残りのグループはJavaからAFAIKを報告できません。スタックサイズは-Xss(ただし、すべてのスレッドでグローバルに設定可能)で設定できます。

も参照してくださいWhat is the difference between Java Non Heap Memory and Stack Memory? Are they Same if not what is the difference between them?Java: non-heap-memory analyzes

関連する問題