Есть похожие вопросы, но они, похоже, не отвечают на этот конкретный вопрос. Как я могу получить память, которую моя программа Java использует через Java Runtime 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: