web-dev-qa-db-ja.com

Javaプログラムのメモリ使用量を計算する方法は?

Runtimeクラス(freeMemory()totalMemory()、およびgc())を使用すると、MBを超えるメモリ(つまり1,000,000バイト)が得られます。

しかし、オンラインコンパイラで同じコードを実行すると、使用されているメモリがKB単位(つまり1000バイト)で表示されます。これは大きな違いです。

これは、Runtimeがプログラムで使用される実際のメモリを表示しないことを意味します。

プログラムで使用される実際のメモリを計算する必要があります。これらのオンラインコンパイラがプログラムで使用されるメモリを計算する方法は何ですか?

14
Ganesh S

まず、コードの実行前に使用されるメモリ、つまりコードの最初の行を計算します。

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();

コードの実行後に使用されるメモリを計算します。

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();

その後、次のことができます。

long actualMemUsed=afterUsedMem-beforeUsedMem;

プログラムで使用される実際のメモリを提供します。

さらにメモリ分析を行うには、 jvisualvm のようなプロファイラツールが最適です。

  • Runtime.getRuntime()。totalMemory()、このメモリはJVMで使用可能な合計メモリであることを覚えておいてください。
  • Java -Xms512m -Xmx1024mは、プログラムの合計メモリが512MBで始まることを意味します。最大1024MBまで遅延ロードされる場合があります。
  • したがって、同じJVM上で同じプログラムを実行している場合、Runtime.getRuntime()。totalMemory()は異なる結果をもたらす可能性があります。
22
Amit Bhati

Ubuntuでtopコマンドを使用して、Javaプログラムを実行中にCPU使用率またはメモリ使用率%を確認できます。

topコマンドは、これらの多くの情報を提供します。

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+ COMMAND

topと入力し、端末でEnterキーを押して、コマンドセクションでJava.

5
Rohit Gupta