Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wycieki pamięci a PHP, Pytanie teoretyczne
luinnar
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 15.07.2004
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Ostatnio (nie wiem skąd) naszła mni myśl: czy tworzę wyciek pamięci takim kodem:
  1. <?php
  2. $Object = new myClass();
  3. $Object = new myClass2();
  4. ?>


PHP samo usunie instancję klasy myClass z pamięci (tak jak to robi Java ze swoim odśmiecaczem pamięci) czy instancja zostanie w pamięci i zrobi się nam wyciek (tak jak w C)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
luinnar
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 15.07.2004
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Tak jak mówił SonoQ zrobiłem prosty test:

  1. <?php
  2. class test
  3. {
  4. private $sZmienna = 'aaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccc
    cdddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeee'
    ;
  5. }
  6.  
  7. for($i = 1; $i < 1000000000; $i++)
  8. {
  9. $Obj = new test();
  10. }
  11. ?>

Po uruchomieniu tego skrypciku nic nie wskazywało na wzrost ilości zajmowanej pamięci.

Aby się upewnić zrobiłem 2 test pokazujący jak powinna się zapychać pamięć gdyby był wyciek:
  1. <?php
  2. class test
  3. {
  4. private $sZmienna = 'aaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccc
    cdddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeee'
    ;
  5. }
  6.  
  7. $aObj = array();
  8.  
  9. for($i = 1; $i < 1000000000; $i++)
  10. {
  11. $aObj[$i] = new test();
  12. }
  13. ?>

Ilość zadeklarowanej pamięci zaczęła gwałtownie się zwiększać (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Po zakończeniu skryptu komp musiał chwile popracować nad usunięciem z RAMu niepotrzebnych informacji.

Podsumowując
PHP automatycznie usuwa niepotrzebne instancje z pamięci (tak jak java).
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


sorki za odkopywanie staroci - ale skoro nie jest tak różowo to lepiej nie tkwić w błędzie jeśli ktoś to przeczyta...
Cytat(luinnar @ 17.02.2007, 23:50:10 ) *
Podsumowując
PHP automatycznie usuwa niepotrzebne instancje z pamięci (tak jak java).

Jakoś sobie manuala przeglądałem a potem trochu pogooglałem (tak przy okazji znowu na to forum trafiłem a szukałem czegoś podobnego ;p)...
w powyższych przykładach akurat jest usuwana zmienna/referencja (może trochę źle się wyrażę) i o wyciek przy krótko działających skryptach aż nadto nie trzeba się martwić gdyż na koniec i tak to z ramu się upłynni. Jednak jeśli skrypt ma dłużej działać lub coś napisane w stylu demona to pasuje wiedzieć kiedy jest wyciek pamięci - w duuuużym skrócie to jak się usunie "zewnętrzne" odwołanie do obiektu a wewnątrz też była jakaś referencja.... zresztą co tu dużo pisać - ciekawi tematu to odsyłam do manuala:
Garbage Collection

ps. w niektórych wersjach php zdarzają się niektóre funkcje powodujące wyciek pamięci ^^

Ten post edytował zegarek84 25.03.2010, 03:05:27
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 12:30