Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: composite - referencje
Forum PHP.pl > Forum > PHP > Object-oriented programming
Cysiaczek
Nie będę tłumaczył wzorca, tylko skupie się na clue sprawy.

Mam powiedzmy 5-o elementową tablicę, z której pobieram jeden klucz i tworzę obiekt. Reszta "kolegów" z tablicy zostaje dodana do tego obiektu jako obiekty tego samego typu. Żebym mógł w czasie wykonania programu zmienić obiekt na którym pracuję, to do każdego z tych obiektów muszę również przekazać referencje pozostałych 4
Kompozyt przechowuje n*(n-1) referencji do innych obiektów tego samego typu.
Czyli mając 5 obiektów mam 20 referencji, przy 10 jest już 90 itd. Jak duże obciążenie może to wygenerować? Warto?

Pozdrawiam.
DeyV
Referencje są bardzo "lekkie" dla systemu, nie zużywają ani pamięci, ani mocy procesora.
Przy ich dużej ilości jedynym problemem jaki może się pojawić, to usuwanie obiektów, które są kasowane z pamięci dopiero wtedy, gdy usunięte zostaną wszystkie referencje tego obiektu.
cicik
Dołożyłbym do tego jeszcze jeden problem.
Na php.net jakiś czas temu pojawiła się propozycja projektu w ramach google summer of code.
Polegać on miał na tym aby poprawić phpowego garbage collectora tak aby poprawnie zwalniał pamięć po obiektach tworzących cykl.

Wnioskuję stąd, że obecny garbage collector sobie z tym nie radzi.
W związku z tym, jeżeli będziesz miał trzy obiekty:
pierwszy ma referencję do drugiego, drugi do trzeciego i trzeci do pierwszego to grabage collector nie zwolni pamięci zajmowanej przez te obiekty nawet jeżeli z zewnątrz cyklu nie ma do nich referencji.
Taka właśnie sytuacja występuje u Ciebie.

Poza tym to nie prawda, że referencja nie zajmuje pamięci - zajmuje, na 32-bitowych maszynach dokładnie 4 bajty* .


* Dane dla języków kompilowanych (C, C++, Delphi, etc.) - nie wiem dokładnie jak jest w PHP, może to jeszcze w nim jest jakoś owijane w dodatkowe dane więc wtedy zajmować będzie więcej.
DeyV
>Poza tym to nie prawda, że referencja nie zajmuje pamięci
cicik - smile.gif - a szkoda - już miałem nadzieję, że chociaż to jest za darmo winksmiley.jpg

A tak na poważnie - jasne, że coś zajmują, i jak sądzę - więcej niż w C lub Delphi, jednak nie jest to wielkość znacząca.

Swoją drogą - ciekawe, jak Garbage radzi sobie w przypadku wykorzystania destruktorów, usuwających wewnętrzne związki.
Warto by bylo jakoś to sprawdzić, jednak nie mam coś zaufania to pomiarów zużytej pamięci wykonywanych przez Xdebug pod windowsem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.