Сейчас поэкспериментировал с прогой, запустил её, оперу 4.1 и оперу 2.07. Нажимал alloc, заходил в оперу 2.07, нажимал "0", постепенно с каждым нажатием "Alloc" опера показывала больше свободного heap"a. Но в какой-то момент показало где-то около 800б, и больше показания не росли. И в один прекрасный момент при нажатии "Alloc" прога выдала: null outofmemoryerror. Нажал "Realloc", всё вернулось к нормальным значениям. Не очень только понял, что дает галка "auto gc()".
Попробовал ещё запустить встроенный проигрыватель, Vizual (визуализация плеера на java) и Memory Manager. Без этой проги постоянно отключался и появлялся звук, при выделении памяти прогой звук не пропадал (по крайней мере, в течении 5-6 минут), но визуализация стала работать немного прерывисто.
всем драсьте! это приложение предназначено в основном для экспериментальных целей. например, чтобы узнать сколько памяти расходует то или иное приложение. функцию Alloc можно использовать для определения максимального значения размера heap. на jp-7 этот размер является общим для всех приложений: чем больше одно ява приложение "кушает" памяти, тем меньше памяти может быть выделено другому приложению. этот эксперимент можно проделать с этим приложением: выделяя в нем все больше памяти, все меньше приложений можно будет запустить одновременно и все неустойчивей могут работать уже запущенные приложения. некоторые приложения (моды оперы, к примеру) используют метод Runtime totalMemory() для определения размера памяти и получить максимальное значение не смогут, если этим приложение первоначально не увеличить динамическую память.
Ну я бы не стал точно утверджать, что heap общий. Разумеется, количество heap, используемое одним приложением не может не влиять на другие запущенные приложения. Но не факт, что если есть одно приложение, которое занимает максимум выделяемой памяти (например, 5 МБ на JP-7), то нельзя больше запускать приложения, тоже загружающие память. Я имею в виду, что может быть так, что есть, допустим, 20 МБ оперативной памяти, но одному приложению выделяется не более 7 МБ. На JP-8.3, кстати, будет возможность выяснить это точно. Ну а если какая прога криво написана и не занимает память дальше, чтобы она росла, а вместо этого виснет, тогда да, выделелние памяти "мусором" будет иметь применение.
Sklif, естественно, куча одна, в зависимости от модели на 5 колене она ~ от 3 до 6 метров, и уже эта куча делится ява- машиной на кучки для запущенных приложений. Кстати, у меня в Опере (облегченной,~210кб) хип через 0 сначала около 750кб, но после долгого хождения бывало и больше 900кб- до этой проги - ява- машина сама добавляет
Xodok, у каждого приложения своя потребность в хипе, так? Если бы куча делилась, то в каждой запущенной проге был бы свой размер свободного хип. Но ведь это не так. Во всех запущенных он одинаков. Вот поэтому я и думаю, что ничего не делится. Ну как если бы в склейке. Или есть нюансы, в которые я не въезжаю?
Sklif, да не одинаков он, а зависит от веса/потребности запущенного приложения, мин.1048кб, в полной Опере (или с набитым кэш) весом больше ~250кб хип уже около 1,5м. Получается, что после добавления к Опере мусорного балласта ява-машина выделяет ей больше хипа, сразу после удаления мусора свободной оперативы становится больше, но при следующем шаге видно, что ява-машина оптимизирует по своему.
Sklif, почему же это он среди всех запущенных одинаков? Нет, в том-то вся и фишка, что для каждого приложения показывается максимальный размер heap доступный для данного конкретного приложения и занятый объем для данного конкретного приложения. Иначе все приложения начали бы сходить с ума от того, что они только запустились, а уже почему-то занято до фига памяти.
Прога непонятно для чего. Ява выделяет хип-память для каждой проги свою. И одна прога влиять на другую не может. И управлять прога (принудительно чистить, смотреть скока всего и скока свободного) хипом может тока своим. Другое дело что если автоматический garbage-collector спит, то мож пока вы там проги переключаете с запущенной проги на этот мемори-менеджер - то мобила на всякий случай запускает garbage-collector раньше положенного срока, и он чота чистит типа просто совпадение. это шарлатанство ну или просто мечты о неком "чистильщике" памяти. это как проги для бесплатного инета, тоже прям прога с кнопкой "получить бесплатный инет". и кажетца щас нажмешь - и вуаля, всех обманул
23 мая 2008 в 19:08