PDA

Просмотр полной версии : Циклические ссылки


Whatsername
05.11.2004, 14:30
Гари Гроссман (мужчина, придумавший Action Script) пишет о неких «циклических ссылках».

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

Если не трудно, объясните мне, пожалуйста:


Что это за объекты ссылающиеся друг на друга?
Что за загадочные циклические ссылки?
Вообще, с кем это мужчина разговаривает?


Спасибо большое.

Antares
05.11.2004, 20:42
Я так понимаю, циклические ссылки это что-то типа следующего:


var a = {variable:"A"};
var b = {variable:"B"};
var c = {variable:"C"};

var d = a;
a = b;
b = c;
c = d;

trace(a.variable);
trace(b.variable);
trace(c.variable);


Однако, для меня остается загадкой, как неиспользуемые объекты могут при этом ссылаться друг на друга... Раз есть ссылки -- значит, они как-то да используются. Компилятор будет определять, что мне нужно в проекте, а что -- нет? :D

Whatsername
07.11.2004, 22:28
Наверное, циклические ссылки это что-то похитрее.
Или переводчик пятого Мука что-то нахитрил.

Antares
07.11.2004, 22:44
Если скажешь главу, посмотрю в оригинальном, может, поймем, что имелось ввиду :)

Штрек
07.11.2004, 23:35
Глава 15
стр.407
вроде всё там яснее ясного...

Antares
08.11.2004, 06:17
Periodic mark-and-sweep garbage collection eliminates objects containing circular references

Ну ведь и правда все ясно, если хоть каплю с программированием знаком и знаешь, что имеется ввиду под словом "ссылка".

"Чего не сделаешь ради дословности перевода" ?

Whatsername
09.11.2004, 11:01
Большое спасибо, мужчины.
Низкий поклон =))

Джа
09.11.2004, 13:32
недавно Делимитер поведал мне о чудо-граблях, как раз на тему сборщика мусора и циклических ссылок.

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

суть в том, что объекты типа XMLNode, созданные в одном контейнере, и ссылающиеся друг на друга, не удаляются из памяти при удалении контейнера (что происходит с объектами других типов).

запустите этот код в стандалоун плеере, откройте таск манагер, и наблюдайте с какой скоростью увеличивается память, расходуемая приложением.
_global.x = "Jackdaws love my big sphinx of quartz...\t";
// делаем длиииинную строку
for (var i = 0; i<10; i++) {
_global.x += _global.x;
}
//
this.onEnterFrame = function() {
// удаляем клип тест
test.removeMovieClip();
// создаём клип тест
this.createEmptyMovieClip("test", 1);
//
for (var i = 0; i<50; i++) {
// создаём в клипе тест объект XMLNode
test["node"+i] = new XMLNode(3, x);
// ставим ссылку на объект, созданный в предыдущей итерации
test["node"+i].link = test["node"+(i-1)];
//
}
};
this.onMouseDown = function() {
// остановить
delete this.onEnterFrame;
};рекомендации лучших граблестроителей.

Whatsername
09.11.2004, 13:39
Клева! Спасибо.

Штрек
09.11.2004, 19:28
Так я и знал -
Нокса из Австралии турнули и он теперь на Ямайке... :p
Насчёт граблей - отличный вариант расплаты с недобросовестным работодателем...