1. ホーム
  2. java

[解決済み] Runtime.getRuntime().totalMemory()とfreeMemory()とは何ですか?

2022-04-26 13:51:26

質問

の正確な意味は何だろうかとずっと考えていました。 Runtime.getRuntime().totalMemory() , Runtime.getRuntime().freeMemory()。 そして Runtime.getRuntime().maxMemory() があります。

私の理解では Runtime.getRuntime().totalMemory() は、私のプロセスが使用しているメモリの合計を返します。これは正しいですか?

どうでしょう freeMemory()maxMemory() ?

解決方法は?

によると API

totalMemory()

Java 仮想マシンの総メモリ量を返します。このメソッドが返す値は、ホスト環境に応じて時間の経過とともに変化する可能性があります。 任意の型のオブジェクトを保持するために必要なメモリ量は、実装に依存する可能性があることに注意してください。

maxMemory()

Java仮想マシンが使用しようとするメモリの最大量を返します。固有の制限がない場合は、Long.MAX_VALUEの値が返されます。

freeMemory()

Java 仮想マシンの空きメモリ量を返します。gcメソッドを呼び出すと、freeMemoryが返す値が増加する場合があります。

ご質問の件ですが maxMemory()-Xmx の値を指定します。

と疑問に思われるかもしれませんが の合計メモリ maxMemory() . その答えは、JVMがメモリを遅延して割り当てるからです。 このようにJavaプロセスを開始するとしましょう。

java -Xms64m -Xmx1024m Foo

プロセスは64mbのメモリで始まり、それ以上(1024mまで)必要な場合は、メモリを割り当てます。 totalMemory() はメモリ量に相当する 現在 JVMがFooのために利用可能です。 もしJVMがもっとメモリを必要とすれば、それは遅延的に割り当てられます。 アップ を最大メモリにする。 で実行した場合 -Xms1024m -Xmx1024m から得られる値は totalMemory()maxMemory() は等しくなります。

また、正確に計算したい場合は 中古 メモリは、次の計算で行います。

final long usedMem = totalMemory() - freeMemory();