forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   вопрос на засыпку =) (http://forum.boolean.name/showthread.php?t=7307)

beZ_probleM 10.11.2008 18:31

вопрос на засыпку =)
 
кодеры подскажыте что лучше будет для программы:
1) загружать изображения из ресурса в переменные а потом работать с ними?

или

2) напрямую загружать картинки из ресурса каждый раз(drawImage(loadImage('/бла_бла_бла.png'), 0, 0))?


я думаю шо если загружать в переменные то соответственно память будет выделятсо и будет лагать, но я не шарю потому мне кажетсо шо второй вариант лучше :dontknow:

impersonalis 10.11.2008 18:38

Ответ: вопрос на засыпку =)
 
скорость/расход памяти(что в последствии может повлиять и на скорость)

ARV 10.11.2008 19:46

Ответ: вопрос на засыпку =)
 
имхо, первый вариант более быстродействующий.
при втором варианте как раз наоборот, будет выделяться и освобождаться память неизвестно как (в какие-то внутренние переменные Java-кода), так что если одна и та же картинка рисуется неоднократно - загрузить ее внчале в переменную и затем по мере надобности использовать.

beZ_probleM 11.11.2008 01:38

Ответ: вопрос на засыпку =)
 
но ето будет жрать память...? у меня итак масив будет один розмером 320х240 =)

ViNT 11.11.2008 02:04

Ответ: вопрос на засыпку =)
 
Смотря сколько изображений, как часто они отрисовываются, сколько раз используется одно изображение и сколько оперативки у телефона.

Frank 11.11.2008 02:07

Ответ: вопрос на засыпку =)
 
Я считаю так, что если картинку нужно использовать всего один раз, то пойдет и второй вариант, иначе - первый... :)

beZ_probleM 11.11.2008 04:00

Ответ: вопрос на засыпку =)
 
а освобождать както ети переменные с картинками можнО? шоб они память не жрали=)
типа присвоить nill =)

odd 11.11.2008 08:25

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от beZ_probleM (Сообщение 90427)
а освобождать както ети переменные с картинками можнО? шоб они память не жрали=)
типа присвоить nill =)

Да. Можно. Есть библиотека Lib_memclean и в ней единственная функция clean, которая и делает очистку памяти от неиспользуемых ресурсов.

beZ_probleM 11.11.2008 16:37

Ответ: вопрос на засыпку =)
 
тоесть? а как она узнает шо я тот ресурс не буду использовать больше? оО

ViNT 11.11.2008 19:35

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от beZ_probleM (Сообщение 90457)
тоесть? а как она узнает шо я тот ресурс не буду использовать больше? оО

Я в теме приводил пример использования. Суть в том, что объявляется дополнительный объект image, который не загружается. Далее для удаления изображения из памяти достаточно присвоить ему этот пустой объект и вызвать функцию очистки.

odd 14.11.2008 03:18

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от beZ_probleM (Сообщение 90457)
тоесть? а как она узнает шо я тот ресурс не буду использовать больше? оО

Да очень просто. На самом деле в переменной типа картинка хранится не сама картинка, а адрес в оперативке, по которому она находится. При загрузке новой картинки, мобила выделяет нужное место в оперативке, переписывает туда картинку, а адрес первого байта этой картинки записывает в переменную. Вся фишка в том, что старая картинка при этом так и остаётся в оперативке, хотя ни одна переменная на эту область не ссылается. Старая картинка получается тупо засоряет оперативную память. Когда же оперативки становится мало, телефон запускает процесс под названием Garbage Collector (Сборщик Мусора). Он просто сверяет занятые участки в оперативке и текущие переменные и если обнаруживает, что на какой-то ресурс (например, картинку) в памяти не ссылается ни одна переменная, то этот ресурс считается мусором и подлежит удалению. Библиотека Lib_memclean просто вызывает Сборщика Мусора досрочно, не дожидаясь когда же оперативки будет мало.

ARV 16.11.2008 23:35

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от odd (Сообщение 90664)
Библиотека Lib_memclean просто вызывает Сборщика Мусора досрочно, не дожидаясь когда же оперативки будет мало.

судя по тому, как реализован сборщик мусора в Java, нет никакой гарантии, что уборка начнется сразу после вызова этой функции (поправьте, если не прав). Вызов уборщика - это именно "вызов", как звонок в скорую :) а уж когда она приедет - это еще вопрос... я хочу сказать, что система, получив указание почистить память, вполне может еще подумать и приступить к уборке тогда, когда ей покажется это наиболее удобным.

ViNT 17.11.2008 00:55

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от ARV (Сообщение 90800)
судя по тому, как реализован сборщик мусора в Java, нет никакой гарантии, что уборка начнется сразу после вызова этой функции (поправьте, если не прав). Вызов уборщика - это именно "вызов", как звонок в скорую :) а уж когда она приедет - это еще вопрос... я хочу сказать, что система, получив указание почистить память, вполне может еще подумать и приступить к уборке тогда, когда ей покажется это наиболее удобным.

Нет, очистка происходит именно при вызове функции(во всяком случае, так должно быть на нормальных телах).

Phantom 17.11.2008 04:10

Ответ: вопрос на засыпку =)
 
ViNT, а я тоже много где слышал, что при вызове сборщика мусора он не обязательно сразу вызовется. Там типа такой же прикол, как, например, с обработкой клавиш бывает. Клавишу в некоторых играх нажимаешь, а отклик запаздывает или вообще не всегда происходит. Это типа если несколько плотных потоков работает, то для спящих потоков не хватает квантов времени процессора для того, чтобы проснуться и начать работать.

ViNT 17.11.2008 21:08

Ответ: вопрос на засыпку =)
 
Цитата:

Сообщение от Phantom_wc (Сообщение 90807)
ViNT, а я тоже много где слышал, что при вызове сборщика мусора он не обязательно сразу вызовется. Там типа такой же прикол, как, например, с обработкой клавиш бывает. Клавишу в некоторых играх нажимаешь, а отклик запаздывает или вообще не всегда происходит. Это типа если несколько плотных потоков работает, то для спящих потоков не хватает квантов времени процессора для того, чтобы проснуться и начать работать.

Ну это уже другой вопрос. Сборщик мусора, скорее всего, действительно работает в фоновом режиме, тогда нужно вызывать его когда процессор не загружен, т.е. не выполняются сложные вычисления.


Часовой пояс GMT +4, время: 07:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot