Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > dimarik

Оценить эту запись

GC тоже иногда расслабляется

Запись от dimarik размещена 11.06.2013 в 01:03
Обновил(-а) dimarik 01.08.2013 в 18:43

Создаем текстуру для Stage3D. Добавляем ее как ссылку в некий TestObject extends Object. Повторяем создание новой текстуры и объекта невообразимое количество раз. Ссылку на каждый новый TestObject не запоминаем из принципа. GC отлично срабатывает, и мы не получаем уведомления от рантайма о переполнении GPU memory. Теперь перепишем листинг класса TestObject так, чтобы он создавал в себе ссылку на метод, созданный в его контексте (метод объекта, анонимка). Запускаем.

AIR 3.5, 3.7

UPD. Такое поведение GC связано с наличием циклических ссылок. Можно просто создать в объекте ссылку на самого себя, не обязательно ссылку на себя через свой метод. Предположительно, к удалению подобных "зацикленных" объектов GC приступает в некотором будущем, соотносящимся с заполнением оперативной памяти. Однако за это время может произойти переполнение видеопамяти, т.к. объем RAM обычно существенно превышает объем VRAM, доступный для Flash/AIR рантайма.
Как бороться? Почувствовать себя в роли GC и принудительно очищать видеопамять, совершая обряд TextureBase#dispose(). В AIR можно время от времени запускать System.gc(); Но очень гаденько становится от одной только мысли, что в GC-системе программист должен заботиться о сборке мусора.

Пример объекта с простейшей циклической ссылкой
Код AS3:
package mailru.display.test.display
{
 
import flash.display3D.textures.TextureBase;
 
public class TestDisplayObject
{
	public function TestDisplayObject() {
		super();
		this._o = this;
	}
 
	private var _o:			Object;
 
	public var texture:		TextureBase;
}
}
Всего комментариев 4

Комментарии

Старый 11.06.2013 13:43 bublic_bicubic вне форума
bublic_bicubic
 
Аватар для bublic_bicubic
замыкание метода хранит в себе ссылку на хозяина, то есть ссылка на метод (для GC) равносильна ссылке на объект
Старый 11.06.2013 18:53 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Анонимки всегда радовали.
Старый 04.07.2013 19:00 Asfel вне форума
Asfel
но ведь переполнения ГПУ будет в любом случае если не диспозить текстуру
Старый 01.08.2013 18:45 dimarik вне форума
dimarik
 
Аватар для dimarik
Обновил запись
 

 


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


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