Здравствуйте.
Как узнать объём памяти, занятой программой? Я делаю так:
public static String divSize(long n) {
final int KB = 1000;
final int MB = 1000000;
final int GB = 1000000000;
final long TB = 1000000000000L;
long b = n % KB;
long kb = (n % MB) / KB;
long mb = (n % GB) / MB;
long gb = (n % TB) / GB;
if (n >= 0 && n < KB)
return String.format("%01d b", b);
if (n >= KB && n < MB)
return String.format("%01d,%03d KB", kb, b);
if (n >= MB && n < GB)
return String.format("%01d,%03d MB", mb, kb);
if (n >= GB && n < TB)
return String.format("%01d,%03d GB", gb, mb);
return String.format("%01d %03d %03d %03d bytes", gb, mb, kb, b);
}
long memoryMax = Runtime.getRuntime().maxMemory();
long memoryUsed = memoryMax - Runtime.getRuntime().freeMemory();
t = "Memory used: " + Utils.divSize(memoryUsed) + " / " + Utils.divSize(memoryMax);
Но оно выдаёт примерно 10-15 мегабайт свободной памяти (постоянно колеблется), независимо от того, что стоит в параметре -Xmx. Таких значений просто не может быть. Ну никак!
Ну вот. Убрал я divSize. Показатели от этого правдоподобнее не стали. Вы бы мозги включали и тему читали перед тем как отвечать. Зачем флудить и отвечать мимо вопроса?
Создает tile-based мир и на каждом фрейме создаёт экземпляры объектов для проверки коллизии. Я пробовал создавать все объекты сразу, но тогда либо тормоза, либо сразу краш с out of memory.
Потому что в другой аналогичной программе (не моей) индикатор памяти ведёт себя по-другому. Там он пляшет от 50 до 90%.
Вот я и подумал, что что-то не так. Разве нормально, что память долбится в 99%? Еще немного и out of memory. Каким образом сборщик мусора успевает так быстро чистить память?
Как же не надо, если память постоянно загружена на 95%? Наоборот, ему приходится её постоянно чистить.
Если, конечно, возвращенные значения не врут.
Странно как-то. За 40 лет истории программы не научились нормально замерять собственную память.
Ну я, в принципе, сам знаю чем. Я просто не пойму, в чем отличие от другой программы.
Наверное, придётся декомпилировать ту программу и искать, как они память замеряют.