Speicherverbrauch von Objekten bei verschiedenen Ansätzen

zer0

Erfahrenes Mitglied
Hallo,

ich habe zwei verschiedene Ansätze bei der Klassenprogrammierung. Beim einen wird das veränderte Objekt zurückgegegeben, beim anderen immer ein neues Objekt das verändert wurde.

Hier der Auszug aus beiden Varianten:

Selbes Objekt verändert:
PHP:
public function concat($string) {
	$this->string .= $string;
	return $this;
}

Immer ein neues Objekt:
PHP:
public function concat($string) {
	$this->string .= $string;
	return new self($this->string);
}

Nun habe ich beide Varianten getestet indem ich einfach eine for-Schleife benutze und 100mal durchlaufen lassen.

PHP:
for($i = 2; $i < 100000; $i++) {
    $string = $string->concat($i);
}

Bei der zweiten Variante werden dadurch 100 Objekte neu erstellt, bei der 1. nur das Objekt verändert.

Folgende Ausgabe habe ich:
Code:
Immer neue Objekte:
Start: 344880
Ende: 345544
Differenz: 664

Immer das selbe Objekt:
Start: 345128
Ende: 345712
Differenz: 584

Es ist nur ein geringer Unterschied zu sehen. Selbst bei 1000 Schleifendurchläufen ist der Unterschied sehr gering.

Kann mir das jemand erklären? Warum ist der Verbrauch bei der Variante wo jedes mal ein neues Objekt erstellt wird doch nur geringfügig größer.

Gruß
 
Weil du bei beiden Varianten $string jedesmal überschreibst und PHP wahrscheinlich das alte Objekt wegschmeißt... Wogegen beim ersten der String immer größer wird.
 
Ok, dadurch wird das Objekt immer im selben Speicherbereich abgelegt, das klingt logisch! :)

Dann macht mir dass auch kein Problem wenn ich immer ein neues Objekt erstelle.

Kann man sagen was schneller geht, eine neue Instanz mit new self; oder das Objekt klonen?

Gruß
 
Zurück