2

この質問はよくあることですが、このサイトからいくつかの解決策を確認しましたが、うまくいかなかったようです。

だから、私は小さなJavaプログラムを書きました。さまざまな実行時にどれだけのメモリを消費するかを知りたいです。Runtime.getRuntime.total() と Runtime.getRuntime.free() を試しましたが、毎回 (ほぼ) 同じ結果が得られます。

JVM全体で使用可能なメモリ量または使用されているメモリ量には興味がありません。特にJavaプロセスについて知りたいです。

4

2 に答える 2

13

これにより、プロセスが使用したヒープメモリの量がわかります。

MemoryUsage heapMemoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
heapMemoryUsage.getUsed();

また、すべてのメモリプールを取得し、それらを反復処理して他のメモリ使用量を判断することもできます

List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans()

jvisualvmを使用してアプリケーションに問い合わせることもできます。

于 2012-11-27T06:55:36.240 に答える
3

JVM全体で使用可能または使用されているメモリの量には関心がありません。特に、Javaプロセスについて知りたいです。

一般的なユースケースでは、「JVM全体」と「Javaプロセス」の間に実際の区別はありません。少なくとも、メモリ使用量の観点からではありません。

重要なのは、JVMが実行するすべてのこと、およびJVMが割り当てるメモリのすべてのビットは、アプリケーションの要求で実行されるということです。また、アプリケーション内の何かがいつかそれを使用する可能性があるため、メモリのすべての単語に到達可能なままです。

ですから、あなたが求めていることはあまり意味がありません。そして当然、情報は利用できません。これが理にかなっているとしても、アプリケーションに「属する」メモリとJVMに何が「属する」かを知ることで何が得られるかはわかりません。

于 2012-11-27T07:13:25.220 に答える