同様の質問がありますが、この特定の質問への回答を避けているようです。Java プログラムが Java のランタイム API を介して使用するメモリを取得するにはどうすればよいですか?
ここでの答えは、次のようなことができることを示しています。
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
しかし、これは、実行するプログラムに関係なく、常に同じ数値を返します。たとえば、以下のプログラムでは、マップにいくつの数字を入れてもメモリ使用量は変わりません。
package memoryTest;
import java.util.HashMap;
import java.util.Map;
public class MemoryTest {
static Map<Integer, NewObject> map = new HashMap<Integer, NewObject>();
public static void main(String[] args){
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
fillMemory(25);
System.out.println("KB: " + (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024);
}
static int j=0;
public static void fillMemory(int i){
for(int k=0; k< 2000; k++)
map.put(j++, new NewObject());
}
public static class NewObject{
long i = 0L;
long j = 0L;
long k = 0L;
}
}
cambecc のメイン メソッド経由で、出力は次のとおりです。