Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   анти GC. как? (http://www.flasher.ru/forum/showthread.php?t=145890)

Psycho Tiger 22.10.2010 23:40

Цитата:

А в чём соль то ?
Ну это давняя история. Были-жили сишники, ассеблерники и прочие люди. И работали они с памятью напрямую. Но пришли нонконформисты и сказали - это неудобно! Мы сделаем так, что машина сама решит когда пришло время что-то сделать с памятью! И сделали. Да так сделали, что кроссплатформенно получилось. С тех пор разделились языки на 2 категории: одни с GC, другие без. Мы - CLI Ecma-based язык. Мы не можем работать с памятью напрямую. Во всяком случае из AS )

Цитата:

Не понял. Подробностей хочется.
Ну, жил был объект - потомок DisplayObject`а. Повесил на него очень умный программист ENTER_FRAME, да ещё как повесил - обработчик дёргал BigClass.someMethod, куда передавал себя аргументом. А тот что-то с ним творил. Например, брал с него какие-то данные. А потом пришел GC и перестал вызываться этот метод. Потому что объект удалился. Вот так вот объект подготовленный ко смерти стучался туда, куда GC не доберется.

i.o. 22.10.2010 23:55

Цитата:

Ну, жил был объект - потомок DisplayObject`а. Повесил на него очень умный программист ENTER_FRAME
Забыл добавить, что потом этот "программист" "потерял" ссылку на вот этот вот объект, в результате чего, тот остался на растерзание GC. А в оставшееся время до часа Х, отчаянно передавал ссылку на себя в BigClass.someMethod. )))

Psycho Tiger 23.10.2010 00:35

Дада, тонувший не умел плавать, но кричал команде спасателей )

MerlinTwi 23.10.2010 11:12

Все же доп. средства управления GC не помешали бы. Например, мне очень хочется ставить GC на паузу, ему ведь пофиг, что щас отработать, что через минуту. А то этот умник частенько решает все почистить и затормозить именно в тот момент, когда каждая миллисекунда на счету (сложная 3D схема).

Psycho Tiger 23.10.2010 11:46

Так то да. Думаю, в будущем что-то похожее получим.
Сперва - почти официальный запуск GC через Loder#unloadAndStop, потом опкоды для жарки прямо в память. Whats next? )

f.g.programmer 23.10.2010 12:24

Искал когда-то тоже информацию по GC, и нашёл способ принудительного вызова
В оригинале выглядит примерно так
Код AS3:

try {
        (new LocalConnection()).connect("freg");
        (new LocalConnection()).connect("freg");
}
catch (e:Error) {
        System.gc();
        System.gc();
}

Но без вызова System.gc() (который должен работать вроде как только в air) тоже работает

Tails 23.10.2010 14:09

Один явный способ вызова есть - можно закидать его пещеру трупами
Код AS3:

new TextField();

настолько, чтобы память флешки превысила выделенный ей лемит. гц вылезет голодный и злой.

f.g.programmer 23.10.2010 14:34

В примере с try-catch и без трупов работает :)

TanaTiX 23.10.2010 14:42

Кто-то, вроде silin, если память не изменяет, предлагал грузить пустой gif из byteArray-я. У него на эту тему класс есть. При этом вызывается gc без трупов и прочих извратов.

Добавлено через 3 минуты
Вот, нашел

Psycho Tiger 23.10.2010 14:45

Ага. Суть в том, что после Loader#unloadAndStop GC запускается. silin просто сразу обернул пустую gif`ку и отдавал её Loader`у, после чего выгружал.


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.